Admin Category Insert Thumbnail field has disappeared

This issue occurs on fresh Magento 1.9.1 installations only.

The problem is that thumbnail attribute is created by Mage_XmlConnect module, which became inactive since 1.9.1.

So you can either fix this by enabling the Mage_XmlConnect module:

  1. Open /app/etc/modules/Mage_XmlConnect.xml
  2. Find the <active>false</active> line and replace it with <active>true</active>
  3. Navigate to Cache Management page and flush cache storage.

Important notes before starting:

  1. For this solution I'll call our PackageName "MyProject" and our ModuleName "Catalog". If you're familiar with Magento extension development you can change these names as you like, otherwise just follow these steps as is and you should have yourself your missing thumbnail field.
  2. If caching is turned off, it is probably important that no HTTP requests hit the site between step 2 and step 3. I believe if this were to happen Magento may attempt to look for the version 1.0.0 installation script, and despite not being found, mark the extension as "installed" in the core_resource table, causing the installation script in step 3 to never run. An easy solution to avoid this is to make sure the "Configuration" cache type is enabled prior to following these instructions.
  3. For steps 2 and 3, create any necessary directories for these files. Paths are important here so pay close attention to directory names as well as file names. File & directory names are also case sensitive.
  4. At the end of this I explain how to add even more additional image fields if desired. If you're looking to do this, make sure to add all your configuration (covered in step 3) to the installer script before it runs. Once it runs, Magento will not run the installer script again. If this happens you'll have to read up on how to run "upgrade" installer scripts by incrementing your extension's version number and creating appropriately named upgrade scripts.

Step 1: Create the file app/etc/modules/MyProject_Catalog.xml with the following contents:

<?xml version="1.0"?>
<config>
    <modules>
        <MyProject_Catalog>
            <active>true</active>
            <codePool>local</codePool>
        </MyProject_Catalog>
    </modules>
</config>

Step 2: Create the file app/code/local/MyProject/Catalog/etc/config.xml

<?xml version="1.0"?>
<config>
    <modules>
        <MyProject_Catalog>
            <version>1.0.0</version>
        </MyProject_Catalog>
    </modules>
    <global>
        <resources>
            <myproject_catalog_setup>
                <setup>
                    <module>MyProject_Catalog</module>
                    <class>Mage_Catalog_Model_Resource_Setup</class>
                </setup>
            </myproject_catalog_setup>
        </resources>
    </global>
</config>

Step 3: Create the file

    app/code/local/MyProject/Catalog/sql/myproject_catalog_setup/mysql4-install-1.0.0.php

with the following contents:

<?php
/**
 * Adds Thumbnail Image back to category entities
 */

$this->startSetup();

$attributes = array(
    'thumbnail' => array(
        'type'       => 'varchar',
        'label'      => 'Thumbnail Image',
        'input'      => 'image',
        'backend'    => 'catalog/category_attribute_backend_image',
        'required'   => false,
        'sort_order' => 5,
        'global'     => Mage_Catalog_Model_Resource_Eav_Attribute::SCOPE_STORE,
        'group'      => 'General Information',
    ),
);

foreach ($attributes as $code => $data) {
    $this->addAttribute(Mage_Catalog_Model_Category::ENTITY, $code, $data);
}

$this->endSetup();

Step 4: Refresh the the "Configuration" cache type if it is enabled, or if it was not enabled from the start, simply make a HTTP request to the site. The first HTTP request to the site (without cached configuration XML files) should cause Magento to find your extension, run the installer script, and then mark the extension as installed in the core_resource table.

Explanation of each step:

  1. This file tells Magento that our extension exists, is active, and where (based off it's name and code pool) to look for it's configuration file
  2. This file is our extension's primary configuration file. For this extension, we simply give it a version number (necessary for the installation script to run) and specify that it has setup resources.
  3. This is our extension's installer script. It is what adds the thumbnail image back into Magento. I've supplied configuration values to put it right back where we expected it to be in the past, next to "Image" on the "General Information" tab.
  4. Self explanatory...

Final Notes:

  1. Examining our installer script in Step 3, one can see that it would be rather easy to add any number of additional image fields to categories by specifying additional arrays to the $attributes variable. The $attributes variable is a key=>value pair of 'attribute_code' => $config_array values.
  2. If you desire additional image fields, it would be required to update at least the 'attribute_code' for each. Preferably, the label & position should be updated as well. Lastly, one may also want to change the 'group' if desired. Out of the box, Magento comes with "General Information", "Display Settings", "Custom Design", and "Category Products" groups for Category entities. However, if you were to supply a group name that does not exist, the installer script will know to create that group for you and add your new category attribute to the new group. The tab will automatically appear for you in the admin.