2012-02-11 2 views
4

저는 PHP에서 초보자입니다. 오늘 Magento에서 다음 코드를 참조하십시오. top.phtml. 내가 $this 알고

<?php $_menu = $this->renderCategoriesMenuHtml(0,'level-top') ?> 
<?php if($_menu): ?> 
<div class="nav-container"> 
    <ul id="nav"> 
     <!--NEW HOME LINK --> 
     <li class="home"><a href="<?php echo $this->getUrl('') ?>"><?php echo $this->__('Home') ?></a>"</li> 
     <!--NEW HOME LINK --> 
     <?php echo $_menu ?> 
    </ul> 
</div> 
<?php endif ?> 

은 $이 사용할 수있는 이유는, 어떤 클래스가 정의되어 있지 않은가, 그것은 단지 위의 코드에서 메서드 나 속성을 참조하는 클래스에 사용되는의 class의 자기이다 키워드 직접? $this->__('Home')의 약자는 무엇입니까?

+1

__ ('집')은 페이지를 다양한 언어로 쉽게 변환하는 데 사용되는 '집'텍스트의 현지화 방법입니다. –

+1

Magento의 번역 시스템에 대한 진입 점은 http://svn.magentocommerce.com/source/branches/1.6/app/code/core/Mage/Core/Block/Abstract.php, function __()을 참조하십시오.추가 리소스는 magento.com에서 Alan Storm의 기술 자료를 참조하십시오. 준비가되면 Magento U에서 제공하는 무료 Fundamentals 비디오를 볼 수 있습니다 (전체 공개 : 비디오 중 하나임). 행운을 빌며 질문을 계속하십시오! – benmarks

답변

5

태그를 지정 했으므로 Mage_Catalog_Block_Navigation과 같은 클래스가있을 가능성이 큽니다. 적어도, 방법은 그것에 암시한다. 지금, 나는 젠토에 대한 단서가 없다,하지만이 클래스는 Mage_Core_Block_Template에서 확장하고 그 클래스에 당신이 가지고있는 fetchView 방법, which at some point does

include $includeFilePath; 

당신은 방법 내부 include 코드, 당신은 포함에 $this에 액세스 할 때 파일의 코드는 해당 인스턴스의 범위에서 평가되기 때문에 다음과 같습니다.

파일이 포함되어 있으면 파일에 포함 된 코드가 포함 된 줄의 변수 범위를 상속받습니다. 호출 파일의 해당 행에서 사용 가능한 변수는 호출 된 파일 내에서 그 시점부터 사용할 수 있습니다. 그러나 포함 된 파일에 정의 된 모든 함수와 클래스는 전역 범위를 갖습니다.

일반 예 : "$this 클래스의 self 아니다"고

class Template 
… 
    public function render($templateFile) 
    { 
     include $templateFile; 
    } 
    public function ___($stringToTranslate) 
    { 
     // translates $stringToTranslate somehow 
    } 
} 

참고 부분적으로 만 맞습니다. self 또한 키워드 및 PHP이지만, self은 실제로 클래스를 참조하지만 $this은 클래스의 인스턴스를 나타냅니다.

+1

템플릿은'Mage_Core_Block_Template'을 확장 한 블록에서 포함됩니다. 상속 사슬에 도우미가 없습니다. – clockworkgeek

+0

@clockworkgeek 감사합니다. 그러나 tbh, 나는 Magento 부분을 걱정하지 않는다. 위 예제 템플릿은 Magento와 전혀 관련이 없습니다. 더 명확하게 답변을 업데이트했습니다. – Gordon

1

개체가 정의되었습니다! 이 템플릿은 블록의 인스턴스로 사용됩니다. 템플리트에서 참조되는 인스턴스입니다. 현재 템플릿 내에서 처리하고있는 클래스를 식별하는 빠른 방법은 템플릿에 다음 코드 줄을 사용하는 것입니다 또한

<?php echo get_class($this); ?> 

, 당신은 __ 방법을 언급. 이것은 Magento의 로켈 시스템에 연결됩니다. 이것은 당신이 쓸 수 있다는 것을 의미 :

<?php echo $this->__('Hello') ?> 

템플릿에서 다음 프랑스어 저장소에 동일한 템플릿 파일을 사용하고 단지 새로운 템플릿을 만드는 대신 프랑스어로 영어에서 텍스트 매핑을 제공해야합니다.

1

일부 블록 클래스의 템플릿이기 때문에. 블록 템플릿 (.phtml 파일)은 Mage_Core_Block_Template 클래스 fetchView() 메서드 내에 포함됩니다. app/code/core/Mage/Core/Block/Template.php으로 이동하여 완료 방법을 확인하십시오. 그렇기 때문에 $this.phtml에서 사용할 수 있습니다. this Alan Storm's article에서 자홍색 블록 및 템플릿에 대해 자세히 읽을 수 있습니다. 약간 구식이지만 기본은 매우 잘 설명됩니다 (imho).

관련 문제