2011-05-03 5 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 ' getStores' app/code -rsn 
grep ' getWebsites' app/code -rsn 

두 번째 단계는 사용 샘플들이 핵심 개발자에 의해 사용하기위한 것입니다 방법을 참조 할 그렙입니다 정의됩니다 먼저 내가 볼 방법 이름 앞에 방법 이름이나 공간 유사한 방법 이름을 grep으로. 올바른하면서 다시 발명 할 수있다,

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

고맙습니다. 그것은 매우 도움이되었다! – Blazo

+0

투표를 통해 문제를 해결하면 다른 사람들을 위해 나중에 받아 들여야합니다. –

+0

예, 내 문제가 해결되었습니다. 다시 감사 드리며, 투표하는 방법, 투표에 15 평판이 필요하다고 말합니다 – Blazo

11

안톤의 대답 : 그것을 위해 내가 methodName로는 grep으로>를 추가하고이 저에게이 메서드가 호출되어 파일의 목록을 제공 이것은 우리가 예를 찾기 위해 배치 줄 것이다 바퀴 조금. 이미 Magento Core에 이러한 종류의 데이터를 검색 할 수있는 기능이 있습니다.

: 목록을 필터링 또한, 함수에 websiteIds, storeIds, 또는 storeGroupIds의 배열을 전달할 수 있습니다 Mage::getSingleton('adminhtml/system_store')->getStoresStructure() 이를 사용하여

당신은 모든 웹 사이트의 목록을 검색 할 수 있으며, 자신의 "아이들" 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/Adminhtml/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

관련 문제