2010-06-14 9 views
15

Magento 사이트의 모든 페이지에 추적 코드를 삽입하고 페이지가 CMS 페이지, 카테고리 탐색 페이지 또는 제품 인 경우 다른 구문을 사용해야합니다. 보기 페이지. 각 페이지에 일반 추적 코드를 삽입하는 블록으로 맞춤 모듈을 설정했습니다. 블록 내에서 CMS 페이지, 카테고리 페이지 및 제품 페이지를 어떻게 구별 할 수 있습니까? 내가제품 페이지가 Magento에서 프로그래밍 방식으로 결정되는지

Mage::app()->getRequest()->getParam('id'); 

제품 및 카테고리 페이지에서 제품 또는 범주 ID를 반환하는 것을 볼 수 있습니다

Mage::app()->getRequest(); 

, 그러나 그 페이지 유형을 구분하지 않습니다

나는 시작했다. 두 종류의 검색 및 제품 뷰 페이지에 대한

Mage::app()->getRequest()->getRouteName(); 

반환 CMS 페이지의 "CMS"하지만 반환 "카탈로그"그래서 나는 떨어져 카테고리 및 제품 페이지를 말할 것을 사용할 수 없습니다.

안전하게 사용할 수있는 요청에 표시기가 있습니까? 또는 다른 페이지 유형에 대해 서로 다른 추적 코드를 사용하는 더 좋은 방법이 있습니까?

답변

25

가이 사용하는 라우터를 할 수있는 더 좋은 방법이 될 수 있지만, 하나의 빠른 방법은 우리가보고있는 하나의 제품이 있는지 확인하기 위해 레지스트리를 확인하는 것입니다 수 있습니다

<?php 

$onCatalog = false; 
if(Mage::registry('current_product')) { 
    $onCatalog = true; 
} 

희망을 !

<?php 
echo $this->getRequest()->getControllerName(); 
if($this->getRequest()->getControllerName()=='product') //do something 
if($this->getRequest()->getControllerName()=='category') //do others 
?> 

이 100 % MVC의 모델에 따라 할 수있는 올바른 방법, 핵심 코드로 찾아보세요 정말 이해된다

감사합니다, 조

+0

사용자 지정 페이지 나 사용자 지정 기능에 해당 레지스트리 키가있을 때 상황이 발생할 수 있습니다. 그래서 레지스트리 키로 결정하지 않는 것이 좋습니다. 컨트롤러 이름을 사용하는 것이 좋습니다. 레지스트리 방식과 함께 –

+0

컨트롤러가 최고입니다. 컨트롤러를 사용하고 있고이 블록이 head.phtml에있는 경우 태그 페이지에 문제가 생길 수 있습니다. (이 문제가 방금 만났습니다) - 태그 페이지는 제품 컨트롤러를 사용하지만 제품 데이터를 가져올 수 없습니다. 그래서 두 조건을 모두 사용합니다. –

30

easest 대답은 다음이다 메소드를 로딩하지 않거나 레지스트리 메소드에 의존한다. 비록 내가 거기 있지 않더라도 mytraining.net을 지원하십시오.

+1

일부 컨텍스트에서는 getRequest 또는 getControllerName을 사용할 수 없습니다. 기본 함수를 직접 호출 할 수 있습니다. 'Mage :: app() -> getFrontController() -> getRequest() -> getControllerName()' – Goose

4

블록의 매개 변수를 사용하여 필요한 추적 코드 유형을 나타낼 수 있습니다. 그런 다음 레이아웃 XML을 사용하여 문제를 해결합니다. CMS 페이지 = 'cms_page' 카테고리 검색 = 'catalog_category_view' 제품 = 'catalog_product_view'같은

뭔가보기 :

<layout> 
    <default> 
     <reference name="before_body_end"> 
      <block type="mymodule/myblock" name="myblock" /> 
     </reference> 
    </default> 
    <cms_page> 
     <reference name="myblock"> 
      <action method="setTrackingType"> 
       <type>cms</type> 
      </action> 
     </reference> 
    </cms_page> 
    <catalog_category_view> 
     <reference name="myblock"> 
      <action method="setTrackingType"> 
       <type>category</type> 
      </action> 
     </reference> 
    </catalog_category_view> 
    <catalog_product_view> 
     <reference name="myblock"> 
      <action method="setTrackingType"> 
       <type>product</type> 
      </action> 
     </reference> 
    </catalog_product_view> 
</layout> 
를 다음 레이아웃이 블록은 적절한 매개 변수를 업데이트 한 핸들을 사용할 수 있습니다
+0

어떻게 사용합니까? –

16

가 나는 제품이 존재하는 경우 실제로 확인 않습니다

Mage::registry('current_product') 

이 확인에 결함이 언급 할 가치가있을 것이라고 생각하지만, 때 리뷰 페이지 F에 또는 예를 들어, 제품도 설정되어 있으므로 페이지 위치를 결정할 때 더 구체적이어야 할 수 있습니다.

다음 점검은 제품 페이지에 "카탈로그"모듈을 사용하고 있는지 확인하고 컨트롤러가 "제품"요청임을 확인합니다. 리뷰의 제품 목록을 볼 때 값은 "리뷰"(모듈) 및 "목록"(컨트롤러)입니다.

if($this->getRequest()->getModuleName()=='catalog' && 
$this->getRequest()->getControllerName()=='product'){ 
    Mage::registry('current_product'); 
} 

이 정보가 도움이되기를 바랍니다.

+0

당신은 잘못하지 않았습니다. –

관련 문제