Есть ли способ добавить блокировку только для корпоративных выпусков?
Я понимаю, как добавлять блоки с помощью xml-макета. Но у меня есть ситуация, когда я хочу добавить несколько из этих блоков только в enterprise edition. В другой версии он должен работать так, как будто этот блок даже не был добавлен в xml.
Я знаю, что есть атрибут ifconfig
, но надежен ли он для определения выпуска enterprise? Если да, то какой узел конфигурации я мог бы проверить?
Еще один способ достижения вышеизложенного, я думал о прослушивание соответствующего события и добавление нового дескриптора макета (или, может быть, нового XML-файла макета?) для корпоративных выпусков и добавьте в него мои новые блоки. Правильно ли я это делаю или есть какой-нибудь лучший/более простой способ?
Также я бы предпочел, чтобы мне не приходилось делать это с помощью php-кода, так как этот код будет очень длинным с количеством блоков, а также потому, что все блоки, добавленные в community edition, добавляются через xml
3 answers
Как насчет ifconfig="system/media_storage_configuration/allowed_resources/enterprise_folder"
? Я знаю, это выглядит не очень чисто, но лучше, чем с php-кодом.
P.S. Чтобы атрибут ifconfig
работал с тегом block
, вам следует установить
Условия aoe_layout модуль.
Не используйте XML-формат макета
Вместо того, чтобы использовать XML-формат, возможно, добавьте блок в родительский блок программно из вашего контроллера, используя Mage::getEdition()
, который доступен с 1.12 EE.
Это выглядело бы примерно так:
if(Mage::getEdition()=='Enterprise'){
$block = $this->getLayout()
->createBlock('core/template')
->setTemplate('myfolder/myfile.phtml');
$this->getLayout()->getBlock('content')->append($block);
}
Возможные значения констант редакции Magento:
const EDITION_COMMUNITY = 'Community';
const EDITION_ENTERPRISE = 'Enterprise';
const EDITION_PROFESSIONAL = 'Professional';
const EDITION_GO = 'Go';
Мне все равно, мне нужен XML-макет
Вы можете использовать ifconfig
, но вашему установщику придется создать запись конфигурации для издание в сценарии запуска. Это должно будет вернуть "истинное" значение (1); давайте назовем этот узел конфигурации system/magento/enterprise_edition
:
<block ifconfig="system/magento/enterprise_edition" type="enterprise_customerbalance/checkout_onepage_payment_additional" .../>
Мне нужна поддержка для
Как указано, Mage::getEdition()
не будет работать для
/**
* True if the version of Magento currently being run is Enterprise Edition
*/
public function isMageEnterprise() {
return Mage::getConfig ()->getModuleConfig ( 'Enterprise_Enterprise' ) && Mage::getConfig ()->getModuleConfig ( 'Enterprise_AdminGws' ) && Mage::getConfig ()->getModuleConfig ( 'Enterprise_Checkout' ) && Mage::getConfig ()->getModuleConfig ( 'Enterprise_Customer' );
}
public function isMageProfessional() {
return Mage::getConfig ()->getModuleConfig ( 'Enterprise_Enterprise' ) && !Mage::getConfig ()->getModuleConfig ( 'Enterprise_AdminGws' ) && !Mage::getConfig ()->getModuleConfig ( 'Enterprise_Checkout' ) && !Mage::getConfig ()->getModuleConfig ( 'Enterprise_Customer' );
}
public function isMageCommunity() {
return !$this->isMageEnterprise() && !$this->isMageProfessional();
}
Источник: https://gist.github.com/jayelkaake
Вместо определения версий определите функцию. Если вы добавите это вместе с файлом макета, то поместите файл макета, содержащий это правило, в папку app/design/frontend/enterprise/default/layout
, и он будет включен только для корпоративных установок.