在管理员后端,我想在所有管理页面的主体标签中添加一个类,该页面打印出当前登录的管理用户的名称。

In app/design/adminhtml/default/default/template/page.phtml

我发现了这一点(在第46 -CE 1.6.2.0行上):

<body id="html-body"<?php echo $this->getBodyClass()?'class="'.$this->getBodyClass().'"':'' ?>>

而且我认为我需要使用它来获取管理用户名:

Mage::getSingleton('admin/session')->getUser();

但是,无论我做什么,我似乎都无法在ID或类中输出用户名。

任何想法都是最欢迎的。

谢谢。

有帮助吗?

解决方案

最干净的方法是创建一个将类添加到身体的观察者。
为此,您可以创建一个新的模块(或使用现有模块。 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;
}

其他提示

最简单的解决方案是创建一个返回当前现有的用户名的辅助方法。

class Ns_Mn_Helper_Data extends Mage_Core_Helper_Abstract
{
    public function getAdminUsername()
    {
        if (Mage::getSingleton('admin/session')->getUser()->getId()) {
            return Mage::getSingleton('admin/session')->getUser()->getUsername();
        }
    }
}

然后在布局xml中:

<default>
    <action method="addBodyClass" block="root">
         <css_class_name helper="ns_mn/getAdminUsername" />
    </action>
</default>

在自定义模块中,您要观察您要添加正文类并使用以下代码的管理器控制器操作的倾向:

if ($block = $this->getLayout()->getBlock('root')) {
        $block->addBodyClass((string)Mage::getSingleton('admin/session')->getUser());
}
许可以下: CC-BY-SA归因
scroll top