2011-05-03 126 views

回答

77

尝试使用此方法获得的物品直接

Mage::app()->getWebsites(); < in file > app/code/core/Mage/Core/Model/App.php:920 
Mage::app()->getStores(); < in file > app/code/core/Mage/Core/Model/App.php:834 

叠代得到一个特定的网站所需要的范围或存储

foreach (Mage::app()->getWebsites() as $website) { 
    foreach ($website->getGroups() as $group) { 
     $stores = $group->getStores(); 
     foreach ($stores as $store) { 
      //$store is a store object 
     } 
    } 
} 

对于未来,如果你也有类似的问题,以下是我发现的这些答案在60秒内。首先,我用grep方法名称或空间相似的方法名之前的方法名,看看那里的方法被定义

grep ' getStores' app/code -rsn 
grep ' getWebsites' app/code -rsn 

第二步是grep命令使用示例,看看他们是如何通过意味着核心开发人员使用。对于我添加>方法名到grep,这给我在哪里,这种方法被称为和文件的列表,这将给予我们的地方去寻找例子:

grep '>getWebsites' app/code -rsn 
+0

非常感谢。这非常有帮助! – Blazo 2011-05-03 10:25:08

+0

将它投票并接受它以供其他人参考,如果它解决了您的问题 – 2011-05-03 10:31:59

+0

是的,它解决了我的问题。再次感谢,以及如何投票,说我需要15声望投票 – Blazo 2011-05-03 10:38:43

11

安东的答案,而正确的,可重新发明轮子只是一点。 Magento Core已经有一个工具可以检索这类数据。

您可以获取所有网站的列表,以及它们的“孩子”用这样的: Mage::getSingleton('adminhtml/system_store')->getStoresStructure() 您也可以通过websiteIds和StoreID,或storeGroupIds阵列的功能,以过滤列表:

public function getStoresStructure($isAll = false, $storeIds = array(), $groupIds = array(), $websiteIds = array())

输出示例:

Array 
(
    [1] => Array 
     (
      [value] => 1 
      [label] => Main Website 
      [children] => Array 
       (
        [1] => Array 
         (
          [value] => 1 
          [label] => Madison Island 
          [children] => Array 
           (
            [1] => Array 
             (
              [value] => 1 
              [label] => English 
             ) 

            [2] => Array 
             (
              [value] => 2 
              [label] => French 
             ) 

            [3] => Array 
             (
              [value] => 3 
              [label] => German 
             ) 

           ) 

         ) 

       ) 

     ) 

) 

有一个类似的用于填充“存储范围”下拉列表和跨越多选择所有管理部分。

Mage::getSingleton('adminhtml/system_store')->getStoreValuesForForm(false, true)

Array 
(
    [0] => Array 
     (
      [label] => All Store Views 
      [value] => 0 
     ) 

    [1] => Array 
     (
      [label] => Main Website 
      [value] => Array 
       (
       ) 

     ) 

    [2] => Array 
     (
      [label] =>  Madison Island 
      [value] => Array 
       (
        [0] => Array 
         (
          [label] =>  English 
          [value] => 1 
         ) 

        [1] => Array 
         (
          [label] =>  French 
          [value] => 2 
         ) 

        [2] => Array 
         (
          [label] =>  German 
          [value] => 3 
         ) 

       ) 

     ) 

) 

要发现这个问题,我位于具有我想要的数据管理多选,然后我打开模板提示,以找出哪些块类是负责渲染它: Mage_Adminhtml_Block_Cms_Page_Edit_Form。知道了这一点,我找到了代码库中的类(app/code/core/Mage/Admin/HTML/Block/Cms/Block/Edit/Form.php),并找到了通过搜索其标签来创建输入的部分视图”)。这说明我是如何被提供的输入的值:

$field =$fieldset->addField('store_id', 'multiselect', array(
    'name'  => 'stores[]', 
    'label'  => Mage::helper('cms')->__('Store View'), 
    'title'  => Mage::helper('cms')->__('Store View'), 
    'required' => true, 
    'values' => Mage::getSingleton('adminhtml/system_store')->getStoreValuesForForm(false, true), 
)); 

Mage::getSingleton('adminhtml/system_store')指向类Mage_Adminhtml_Model_System_Store,在那里我发现了多种类似的方法也可以是有用的。 Have a look for yourself.

+0

'values'=> Mage :: getSingleton('adminhtml/system_store') - > getStoreValuesForForm(false,true),工作过一次! – BENN1TH 2015-08-25 10:28:49