Magento - XML-макеты, указать значение для ifconfig? - PullRequest
6 голосов
/ 08 апреля 2011

Я уверен, что видел где-то раньше, указав значение для операторов xml ifconfig (по умолчанию это просто логическое значение). В любом случае отключение модулей в админке на самом деле не работает (отключает только вывод модулей). Но вы можете добавить ifconfig в ваш файл макета, например, для установки шаблона только в том случае, если модуль отключен имеет следующий вид:

<action method="setTemplate" ifconfig="advanced/modules_disable_output/Myname_Mymodule">
    <template>mytemplate.phtml</template>
</action>

Так как же это можно инвертировать, чтобы шаблон устанавливался только в том случае, если для модуля включен ? Что-то вроде:

<action method="setTemplate" ifconfig="advanced/modules_disable_output/Myname_Mymodule" value="0">
    <template>mytemplate.phtml</template>
</action>

Ответы [ 2 ]

22 голосов
/ 09 апреля 2011

Это хорошо вписывается в что-то (самостоятельная ссылка), над которой я работал.

Вы не можете делать то, что хотите, без переписывания класса, чтобы изменить поведениеifconfig.Вот код, который реализует функцию ifconfig.

File: app/code/core/Mage/Core/Model/Layout.php
protected function _generateAction($node, $parent)
{
    if (isset($node['ifconfig']) && ($configPath = (string)$node['ifconfig'])) {
        if (!Mage::getStoreConfigFlag($configPath)) {
            return $this;
        }
    }

Если обнаружено присутствие ifconfig и значение config возвращает true, метод действия вызываться не будет.Вы можете переписать _generateAction и реализовать свое собственное условное выражение, но тогда на вас ложится стандартное бремя поддержки переписывания.

Лучше было бы использовать вспомогательный метод в параметре action.Примерно так

<action method="setTemplate">
    <template helper="mymodule/myhelper/switchTemplateIf"/>
</action>

вызовет setTemplate с результатами вызова

Mage::helper('mymodule/myhelper')->switchTemplateIf();

Реализуйте свою собственную логику в switchTemplateIf, которая либо сохраняет шаблон, либо изменяет его, и вы 'будет хорошо идти

9 голосов
/ 09 апреля 2011

Вы можете создать отдельную настройку enable , не используя ничего, кроме system.xml.

<config>
    <sections>
        <advanced>
            <groups>
                <YOURMODULE>
                    <fields>
                        <enable>
                            <label>YOUR MODULE</label>
                            <frontend_type>select</frontend_type>
                            <source_model>adminhtml/system_config_source_enabledisable</source_model>
                            <show_in_default>1</show_in_default>
                            <show_in_website>1</show_in_website>
                            <show_in_store>1</show_in_store>
                        </enable>
                    </fields>
                </YOURMODULE>
            </groups>
        </advanced>
    </sections>
</config>

вашего модуля. Затем используйте новую настройку в файле макета:

<action method="setTemplate" ifconfig="advanced/YOURMODULE/enable">
    <template>mytemplate.phtml</template>
</action>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...