Magento Enterprise – Fixing Admin Template Override Failures

magento-enterpriseoverridestemplate

I'm trying to modify an admin template by overriding it (instead of modifying the core template file directly).

So the way I understand it, I should just be able to copy a template file:
app/design/adminhtml/default/default/template/catalog/product/edit/websites.phtml

to:
app/design/adminhtml/default/companyname/template/catalog/product/edit/websites.phtml

Here's the tricky part: it works for just about every page except for the page I need it to work on. I'm trying to copy any of the templates used by Catalog->Products->->Custom Options

I can't seem to override any of those templates.
I've cleared every cache I own (even from my wallet just to be sure).
I've double checked all file names and paths.

I can't find error messages that would be helpful to give me a hit to what's going on, so I'm hoping somebody had run across this before or might be able to point me in the direction

At the very least at some hidden logs somewhere that might tell me what's going on?

Edit:
After digging into this more, we came up with an interesting find: the default theme is customtheme and the override template is default, only for this section. Everywhere else, default is default and override is customtheme.
We still have no idea why.

Best Answer

Assuming you've setup Magento's admin area to use comapnyname, as per Ben's answer, if you're still running into trouble, I'd jump right to the source.

The Mage_Core_Model_Design_Package class is where Magento decides which files to use for a theme. First the current theme is checked. If nothing's found there, then the default theme is checked. That check happens here

#File: app/code/core/Mage/Core/Model/Design/Package.php
public function validateFile($file, array $params)
{
    $fileName = $this->_renderFilename($file, $params);
    $testFile = (empty($params['_relative']) ? '' : Mage::getBaseDir('design') . DS) . $fileName;
    if (!file_exists($testFile)) {
        return false;
    }
    return $fileName;
}

I'd temporarily add some poor man's logging to this function to see the file's Magento is actually accepting or rejecting during a request.

#File: app/code/core/Mage/Core/Model/Design/Package.php
public function validateFile($file, array $params)
{
    $fileName = $this->_renderFilename($file, $params);
    $testFile = (empty($params['_relative']) ? '' : Mage::getBaseDir('design') . DS) . $fileName;
    if (!file_exists($testFile)) {
        file_put_contents('/tmp/design-files.log',"REJECT: $testFile\n",FILE_APPEND);
        return false;
    }
    file_put_contents('/tmp/design-files.log',"ACCEPT: $testFile\n",FILE_APPEND);        
    return $fileName;
}

My guess is you've got a subtle, hard to spot typo in one of your file paths. Try

ls -l [filename]

with the results from the above logging.

Update: Based on the comments you've made, it sounds like you're working with a system where someone has customized things to work differently, and the behavior is a side effect on that.

The two tacts I'd take on debugging this are

  1. Figure out how your system sets the value for customtheme, and why this code isn't called when the page renders the Custom Options section

  2. The custom options are rendered via ajax. Normally, this is with a URL that looks like the following

    http://magento.example.com/index.php/admin/catalog_product/options/id/166/key/2d18a7efe76c64829ba80b26aa153875/?isAjax=true

and the render is handled in the optionsAction method of

app/code/core/Mage/Adminhtml/controllers/Catalog/ProductController.php

I'd look into if this is different on your system, either via a URL rewrite or a controller override of some kind. This may explain why this particular URL is ignoring the custom theme.

Good luck!

Related Topic