2014-10-10 2 views
1

В меню панели администратора-> configurate У меня есть вкладка. Я использую:Magento system.xml groups multiselect

<frontend_type>Multiselect</frontend_type> 
<source_model>adminhtml/system_config_source_customer_group_multiselect</source_model> 

и я получаю три группы пользователей, а именно ОБЩЕЕ, ритейл, WHOLESELER.

Вопрос, как получить четвертую группу, а именно НЕ ВХОДИТ?

+0

NOT LOGGED IN обрабатывается немного иначе, например, вы не можете создавать клиентов в этой группе, поэтому эта исходная модель не возвращает его. – user3154108

+0

Мне не нужно создавать клиентов в этой группе, мне нужно получить в multiselect NOT LOGGED IN с другими группами –

+0

Дело в том, что исходная модель, которую вы используете, используется на вкладке создания клиента, где группа NOT LOGGED IN не требуется, поэтому эта исходная модель не включает эту группу. Я не знаю других исходных моделей, которые у вас есть, вам либо нужно создать свой собственный, либо добавить эту группу вручную. – user3154108

ответ

3

Вместо вызова базовой модели вы можете определить свой собственный наблюдатель в System.Xml

Здесь Вы можете найти код, который позволит решить вашу проблему.

<source_model>adminhtml/system_config_source_GroupCollection</source_model> 

Теперь создайте файл GroupCollection.php в локальном \ сообщества (рабочий каталог) в поле ниже пути.

e.g app\code\local\Mage\Adminhtml\Model\System\Config\Source\GroupCollection.php 

Добавить в этот файл код.

<?php 
class Mage_Adminhtml_Model_System_Config_Source_GroupCollection 
{ 
/** 
    * Options getter 
    * 
    * @return array 
    */ 
    public function toOptionArray() 
    { 
     $group = Mage::getModel('customer/group')->getCollection(); 
     $groupArray = array(); 
     foreach ($group as $eachGroup) { 
     $groupData = array(
        'customer_group_id' => $eachGroup->getCustomerGroupId(), 
        'customer_group_code' => $eachGroup->getCustomerGroupCode(), 
        'tax_class_id' => $eachGroup->getTaxClassId() // we dont required this 
        ); 
     if (!empty($groupData)) { 
      array_push($groupArray, $groupData); 
     } 
     } 
      var_dump($groupArray); 
    } 
} 

Ниже приводится ваш вывод.

array (size=4) 
    0 => 
    array (size=3) 
     'customer_group_id' => string '0' (length=1) 
     'customer_group_code' => string 'NOT LOGGED IN' (length=13) 
     'tax_class_id' => string '3' (length=1) 
    1 => 
    array (size=3) 
     'customer_group_id' => string '1' (length=1) 
     'customer_group_code' => string 'General' (length=7) 
     'tax_class_id' => string '3' (length=1) 
    2 => 
    array (size=3) 
     'customer_group_id' => string '2' (length=1) 
     'customer_group_code' => string 'Wholesale' (length=9) 
     'tax_class_id' => string '3' (length=1) 
    3 => 
    array (size=3) 
     'customer_group_id' => string '3' (length=1) 
     'customer_group_code' => string 'Retailer' (length=8) 
     'tax_class_id' => string '3' (length=1) 

И все готово! :)

+1

Спасибо, я стараюсь делать то, что вы говорите, и это работает, но это не совсем то, что мне нужно, и я переписываю основной модуль следующим образом: public function toOptionArray() { if (!$ this -> _ options) { $ this -> _ options = Mage :: getResourceModel ('customer/group_collection') -> loadData() -> toOptionArray(); } return $ this -> _ options; } просто удалил это: -> setRealGroupsFilter() из кода –

+0

Без вас я бы не думал об этом! –

1

Вам не нужно создавать каталог 'Mage' в 'local' или переписывать основной модуль! Если вы посмотрите на app/code/core/Mage/Adminhtml/Model/System/Config/Source/Customer/Group/Multiselect.php, вы увидите, что этот класс больше не распространяется! Таким образом, вы можете создать в папке Ваши NameSpace/ModuleName/Model ваш собственный Exemple.php и просто скопировать все от Multiselect.php к Exemple.php, исправить там, что вы хотите (в вашем случае просто удалить ->setRealGroupsFilter() строка) и установите вашу модель в system.xml. Для Exemple, если в вашем config.xml у вас есть

<models> 
    <my_model> 
     <class>NameSpace_ModuleName_Model</class> 
    </my_model> 
</models> 

чем вы должны написать

<source_model>my_model/exemple</source_model> 

в вашем System.Xml!

Смежные вопросы