Самый чистый способ - создать наблюдателя, который добавляет класс к телу.
Для этого вы можете создать новый модуль (или использовать существующий. На всякий случай, вот как вы можете его создать. Давайте назовем его Easylife_AdminClass
).
Вам понадобятся следующие файлы:
app/etc/modules/Easylife_AdminClass.xml
- файл декларации
<?xml version="1.0"?>
<config>
<modules>
<Easylife_AdminClass>
<active>true</active>
<codePool>local</codePool>
<depends>
<Mage_Adminhtml />
</depends>
</Easylife_AdminClass>
</modules>
</config>
app/code/local/Easylife/AdminClass/etc/config.xml
- файл конфигурации
<?xml version="1.0"?>
<config>
<modules>
<Easylife_AdminClass>
<version>0.0.1</version>
</Easylife_AdminClass>
</modules>
<global>
<models>
<adminclass>
<class>Easylife_AdminClass_Model</class>
</adminclass>
</models>
</global>
<adminhtml>
<events><!-- event used for adding a class to the body-->
<core_block_abstract_to_html_before>
<observers>
<adminclass>
<type>singleton</type>
<class>adminclass/adminhtml_observer</class>
<method>addBodyClass</method>
</adminclass>
</observers>
</core_block_abstract_to_html_before>
</events>
</adminhtml>
</config>
app/code/local/Easylife/AdminClass/Model/Observer.php
- Наблюдатель.
<?php
class Easylife_AdminClass_Model_Adminhtml_Observer{
public function addBodyClass($observer){
$block = $observer->getEvent()->getBlock();
if ($block instanceof Mage_Adminhtml_Block_Page){ //check if the block is the root block,
$admin = Mage::getSingleton('admin/session')->getUser();
if ($admin->getId()){//check if the admin is logged in
$block->addBodyClass($admin->getUsername());//add the class to the body.
}
}
return $this;
}
}
Я рекомендую добавить префикс к классу, который вы добавляете в тело.
Я имею в виду заменить $block->addBodyClass($admin->getUsername());
на, $block->addBodyClass('some-prefix-'.$admin->getUsername());
поскольку имя пользователя может быть почти любым. Например, у вас будет сюрприз, если у вас есть администратор с именем «root». Вот как root
класс выглядит в CSS администратора по умолчанию
.root{
position: relative;
height: 260px;
margin: 0;
width: 1px;
}
var/cache
. Если ошибка все еще существует, проверьте папкуvar/report
. В одном из файлов там вы найдете более подробную информацию об ошибке. Я действительно рекомендую обратиться за помощью к программисту по этому вопросу.Самое простое решение - создать вспомогательный метод, который возвращает текущее имя пользователя.
Тогда в макете XML:
источник
Mage_Adminhtml_Block_Page
. Конечно, вы можете заменить это другим типом блока, но я не вижу смысла. И даже если вы замените его, либо замените его дочерним классомMage_Adminhtml_Block_Page
(что нормально), либо у вас есть риск отсутствия методаaddBodyClass()
. В любом случае существует риск, что мое расширение не будет работать, но я думаю, что это довольно безопасно.В пользовательском модуле вы хотите наблюдать preDispatch для действия контроллера администратора, к которому вы пытаетесь добавить классы тела, и использовать следующий код:
источник