2012-05-10 2 views
2

Heyo, 잠시 동안 magento 테마로 작업 중이었습니다 (... 그리고 시스템에 대한 나의 이해는 천천히 그러나 꾸준히 증가하고 있습니다). 곧 일부 맞춤 모듈 작업을 시작해야하므로이 작은 프로젝트로 시작하여 내 베어링을 얻습니다.Magento - 커스텀 모듈 구조

복사하여 붙여 넣은 특정 작업을 관리하는 코드를 발견했습니다. 템플릿 파일 :

매우 간단합니다. 제품이 특정 카테고리에 속해 있는지 확인하고 요소가있는 경우 해당 요소를 생성합니다. (나는 이것을하기의 대략 5 개의 단단한 방법이다는 것을 알고있다 ... 이것은 나가로 갔다이다).

제품 블록이 표시 될 때마다이 코드를 테스트해야하며 지금까지는이 코드를 복제하여 작동하도록했습니다. 그것은 작동하지만 뒤로 (나는 뷰 계층에 로직을 두지 않아야합니다)입니다. -

좋아 그래서, 기능 공유 할 수있는 간단한 모듈을 만들 수 있습니다 :

지역/WACI/ProductFlag을/etc/config.xml에

<config> 
    <modules> 
     <WACI_ProductFlag> 
      <version>0.1.0</version> 
     </WACI_ProductFlag> 
    </modules> 
    <global> 
     <blocks> 
      <WACI_ProductFlag> 
       <class>WACI_ProductFlag_Block_View</class> 
      </WACI_ProductFlag> 
     </blocks> 
    </global> 
</config> 

등/모듈/WACI_All.xml

<config> 
    <modules> 
     <WACI_CustomPageLayouts> 
      <codePool>local</codePool> 
      <active>true</active> 
     </WACI_CustomPageLayouts> 
    </modules> 
    <modules> 
     <WACI_ProductFlag> 
      <codePool>local</codePool> 
      <active>true</active> 
     </WACI_ProductFlag> 
    </modules> 
</config> 

이제 클래스에 대한 ... 난 정말 확실하지 해요 Block O 경우 r Helper이 적합합니다. 나는 Block으로 갔다. 그러나 - idk ... 나는 아마 틀리다. (이 물건에 대한 튜토리얼은 격렬히 다르다.)

지역/WACI/ProductFlag/차단/View.php

<?php 

    /** 
    * WACI 
    * 
    * @codepool Local 
    * @category View 
    * @package WACI 
    * @module  ProductFlag 
    */ 

    class WACI_ProductFlag_Block_View extends Mage_Core_Block_Template 
    { 
     private $_focus; 
     private $_isFF = false; 

     public function getIsFF($product){ 
      $this->_focus = "FF"; 
      $isFF = false; 
      $ids = $product->getCategoryIds(); 
      $cat = Mage::getModel('catalog/category')->load($ids[0]); 

      foreach ($ids as $key=>$val) { 
       $cat = Mage::getModel('catalog/category')->load($val); 
       $name = $cat->getName(); 

       if ($name === 'Fast Fulfillment') { 
        $isFF = true; 
       } 
      } 
     } 

     protected function _toHtml(){ 
      $html = parent::_toHtml(); 

      if ($this->_focus === "FF") { 
       if ($this->_isFF){ 
        $html .= '<span class="ff-logo"></span>'; 
       } 
      } 

      return $html; 
     } 
    } 
?> 

난 단지 특정 제품의 입력에 따라 출력에 문자열을 원하는 희망의 취소합니다. 문자열을 전달하기 위해 _toHtml()을 무시해야합니까? 다시. 이이 클래스를 인스턴스화하는 경우

<catalog_product_view> 
<reference name="content"> 
      <reference name="product.info"> 
<block type="WACI/ProductFlag" name="product.flag" as="productFlag" output="toHtml" />... 

... 내가 분명하지 않다 : 아마하지 ... 내 local.xml에서

나는 블록을 참조? 나는 그렇게 생각하지 않는다. 어쨌든 매개 변수가있는 메소드를 호출해야 할 경우 내 product/view/media.phtml에 주소를 지정하는 방법을 잘 모르겠습니다.

템플릿 파일이 필요하지 않다고 생각합니다. 문자열을 출력하는 것만 같지만 템플릿이없는 블록 모듈을 본 적이 없다고 생각합니다. 어쩌면 헬퍼 클래스가 적절할 수 있습니까?

어떤 경우 이건 작동하지 않습니다.
내 미디어 클래스에 getIsFF() 메서드가 없다는 치명적인 오류가 발생하거나 아무 것도 나타나지 않습니다. 내 구성 파일은 정확하지만 그게 문제라고 생각합니다.

제 버스. 나는 모두 뒤집었다.

마법사의 skillz가있는 누군가가이 간단한 문제를 명확히하고 올바른 방향으로 나를 가리킬 수 있습니까?

건배!

+0

괜찮으 시다면 정확한 오류를 게시하십시오. (스택 트레이스 포함) –

+0

안녕하세요. 답장을 보내 주셔서 감사합니다. 나는 직장을 그만두기 전에 마침내 어제 밤 일하는 것을 마침내 얻었다. 나는 (결국) 일할 수있는 간단한 도우미 클래스를 만들었습니다. 내 아키텍처가 "맞는지"알지 못합니다. 약간의 해킹이 일어납니다. 내가 월요일에 생각해 냈던 것을 올릴거야. ... magento U 비디오를 통해 진행됩니다. 이 프로세스의 속도를 높일 수 있습니다. – Bosworth99

답변

3

조언이 없습니까?

지역/WACI/ProductFlag을/etc/config.xml에

<config> 
    <modules> 
     <WACI_ProductFlag> 
      <version>0.1.0</version> 
     </WACI_ProductFlag> 
    </modules> 
    <global> 
     <blocks> 
      <productflag> 
       <class>WACI_ProductFlag_Block</class> 
      </productflag> 
     </blocks> 
     <helpers> 
      <productflag> 
       <class>WACI_ProductFlag_Helper</class> 
      </productflag> 
     </helpers> 
    </global> 
</config> 

지역/WACI/ProductFlag/도우미/Flag.php

: 음 = 나는이 약간 수정 작업 솔루션을 sussed
class WACI_ProductFlag_Helper_Flag extends Mage_Core_Helper_Abstract 
    { 
     private $_isFF = false; 

     public function getIsFF($product){ 

      $html = ''; 
      $ids  = $product->getCategoryIds(); 
      $cat  = Mage::getModel('catalog/category')->load($ids[0]); 

      foreach ($ids as $key=>$val) { 
       $cat = Mage::getModel('catalog/category')->load($val); 
       $name = $cat->getName(); 

       if ($name === 'Fast Fulfillment') { 
        $this->_isFF = true; 
       } 
      } 

      if($this->_isFF) { 
       $html = '<span class="ff-logo"></span>'; 
      } 

      return $html; 
     } 

    } 

및 간단한 통해 모든 템플릿 파일을 호출 :

<?php echo $this->helper('productflag/flag')->getIsFF($_product); ?> 

이것이 Magento 방식에 정확히 맞는 것인지 확실하지 않습니다. 즉 모델 호출 이라고 생각합니다.은 자신의 클래스로 이전되어야하며 Model 폴더에 놓아야합니다.

무엇이든간에 -이 물건을 찾아 내려고 시도하는 다른 누군가를 위해 - 내가 주변에서 원숭이처럼 느낀 점은 config.xml 파일의 의도가 블록/헬퍼/모델 풀에 사용 가능한 팩토리 클래스를 추가하는 것임을 천천히 깨달았습니다. - 경로가 포함 디렉토리에 있음을 나타냅니다. 템플릿 파일의 도우미 호출은 디렉토리의 "짧은 이름"과 실제 클래스 이름을 식별합니다.

즉 - 당신은 헬퍼의 여러 클래스를 할 수 :

<?php echo $this->helper('productflag/class_one')->someMethod($_product); ?> 
<?php echo $this->helper('productflag/class_two')->someOtherMethod($_product); ?> 
<?php echo $this->helper('productflag/class_three')->yetAnotherMethod($_product); ?> 

그래서 ... 한 걸음 더 가까이.