Есть ли способ добавить блокировку только для корпоративных выпусков?


Я понимаю, как добавлять блоки с помощью xml-макета. Но у меня есть ситуация, когда я хочу добавить несколько из этих блоков только в enterprise edition. В другой версии он должен работать так, как будто этот блок даже не был добавлен в xml.

Я знаю, что есть атрибут ifconfig, но надежен ли он для определения выпуска enterprise? Если да, то какой узел конфигурации я мог бы проверить?

Еще один способ достижения вышеизложенного, я думал о прослушивание соответствующего события и добавление нового дескриптора макета (или, может быть, нового XML-файла макета?) для корпоративных выпусков и добавьте в него мои новые блоки. Правильно ли я это делаю или есть какой-нибудь лучший/более простой способ?

Также я бы предпочел, чтобы мне не приходилось делать это с помощью php-кода, так как этот код будет очень длинным с количеством блоков, а также потому, что все блоки, добавленные в community edition, добавляются через xml

Author: Mridul Aggarwal, 2013-08-14

3 answers

Как насчет ifconfig="system/media_storage_configuration/allowed_resources/enterprise_folde‌​r"? Я знаю, это выглядит не очень чисто, но лучше, чем с php-кодом.

P.S. Чтобы атрибут ifconfig работал с тегом block, вам следует установить Условия aoe_layout модуль.

 1
Author: Dmytro Zavalkin, 2013-08-18 19:24:30

Не используйте 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

 5
Author: philwinkle, 2013-08-15 17:37:45

Вместо определения версий определите функцию. Если вы добавите это вместе с файлом макета, то поместите файл макета, содержащий это правило, в папку app/design/frontend/enterprise/default/layout, и он будет включен только для корпоративных установок.

 0
Author: Anton S, 2013-08-14 10:32:26