2013-11-07 3 views
0

Я новичок в magento и хочу установить вид магазина после входа в систему в зависимости от пользователя. Пользователь может выбрать вид хранилища при регистрации, и он сохраняется в качестве атрибута EAV в базе данных.Как определить новый source_model для пользователя magento?

Мой сценарий установки:

<?php 
$installer = $this; 
$installer->startSetup(); 
$setup = Mage::getModel('customer/entity_setup', 'core_setup'); 
$setup->addAttribute('customer', 'default_store_view_code', array(
    'type' => 'varchar', 
    'input' => 'select', 
    'label' => 'Default Store View', 
    'global' => 1, 
    'visible' => 1, 
    'required' => 1, 
    'user_defined' => 1, 
    'default' => '', 
    'visible_on_front' => 1, 
    'source' => 'ModuleName/source_storeViewCode' 
)); 


Mage::getSingleton('eav/config') 
    ->getAttribute('customer', 'default_store_view_code') 
    ->setData('used_in_forms', array('adminhtml_customer','customer_account_create','customer_account_edit','checkout_register')) 
    ->save(); 

$installer->endSetup(); 
?> 

used_in_forms не настроен прямо сейчас. Моя проблема: Когда я пытаюсь показать подробности моего клиента в Magento бэкэнда я получаю ошибку:

Warning: include(Mage/ModuleName/Model/Source/StoreViewCode.php): failed to open stream: No such file or directory

'source' => 'NameSpace/ModuleName/source_storeViewCode' 

и

'source' => 'NameSpace_ModuleName/source_storeViewCode' 

не работает. Он пытается загрузить из Mage NameSpace. Как я могу установить его в мое пространство имен?

My source_model находится в локальном/NameSpace/ModuleName/Model/Source/StoreViewCode.php.

PS: мой config.xml моего модуля

<?xml version="1.0"?> 
<config> 
    <modules> 
     <NameSpace_ModuleName> 
      <version>1.0.0</version> 
     </NameSpace_ModuleName> 
    </modules> 

    <global> 
     <blocks> 
      <customer> 
       <rewrite> 
        <form_register>NameSpace_ModuleName_Block_Form_Register</form_register> 
       </rewrite> 
      </customer> 
     </blocks> 
     <resources> 
      <ModuleName_setup> 
       <setup> 
        <module>NameSpace_ModuleName</module> 
        <class>NameSpace_ModuleName_Model_Resource_Setup</class> 
       </setup> 
      </ModuleName_setup> 
     </resources> 
    </global> 

    <frontend> 
     <routers> 
      <customer> 
       <args> 
        <modules> 
         <moduleName before="Mage_Customer">NameSpace_ModuleName</moduleName> 
        </modules> 
       </args> 
      </customer> 
     </routers> 
    </frontend> 
</config> 

ответ

2

Вы пропускаете это в config.xml на том же уровне, как <blocks>

<models> 
    <modulename> 
     <class>Namespace_Modulename_Model</class> 
    </modulename> 
<models> 

Затем создайте класс Namespace_Modulename_Model_Source_StoreViewCode с методом toOptionArray внутри него , Этот метод должен возвращать массив с доступными параметрами.

В вашем сценарии установки источник должен выглядеть следующим образом:

'source' => 'modulename/source_storeViewCode' 
+0

Большое спасибо. Это то, что я выяснил при изучении Config :: getFroupedClassName. Я должен определить его, хотя у меня нет модуля, чтобы помочь автозагрузчику. Большое спасибо. – noeden

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

  • Нет связанных вопросов^_^