2010-06-14 11 views
15

Chcę wstawić kody śledzenia na wszystkich stronach witryny Magento i potrzebuję użyć innej składni, jeśli strona jest stroną CMS, stroną przeglądania kategorii lub produktem Obejrzyj stronę. Mam niestandardowy moduł skonfigurowany z blokiem, który na razie wstawia ogólny kod śledzenia na każdej stronie. W jaki sposób mogę rozróżnić strony CMS, strony kategorii i strony produktów?Ustal, czy na stronie produktu programowo w Magento

Zacząłem:

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

widzę, że

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

zwraca identyfikator produktu lub kategorii produktów oraz na stronach kategorii, ale nie rozróżnia tych typów stron.

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

Return „cms” dla stron CMS, ale zwraca „Katalog” dla obu stron i przeglądania kategorii Pokaż produkt, więc nie mogę używać, aby powiedzieć kategorii i produktów stron osobno.

Czy jest jakiś wskaźnik w żądaniu, którego mogę bezpiecznie używać? A może jest lepszy sposób na osiągnięcie mojego celu, jakim są różne kody śledzenia dla różnych typów stron?

Odpowiedz

25

Nie może być nawet lepszy sposób to zrobić przy użyciu routerów, ale jednym szybkim sposobem jest sprawdzenie rejestru w celu sprawdzenia, czy mamy jeden produkt, że patrzymy na:

<?php 

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

nadzieję, że pomoże !

Dzięki, Joe

+0

Jest to możliwe, gdy ten klucz rejestru jest dostępny na niestandardowych stronach lub niestandardowych funkcjach. Dlatego nie polecam go ustalać za pomocą klucza rejestru. Sposób na nazwę kontrolera jest lepszy. Kontroler –

+0

wraz ze sposobem rejestracji jest najlepszy. Jeśli korzystasz z kontrolera, a ten blok jest obecny w pliku head.phtml, możesz napotkać problemy na stronach Tag (po prostu ten problem) - Strony znaczników używają kontrolera produktu, ale nie mogą pobierać danych Produktu. Używam więc obu warunków. –

30

NAJPROSTSZY odpowiedź jest następująca:

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

to 100% sposób prawo to zrobić zgodnie z modelem MVC, proszę zajrzeć do kodu rdzenia naprawdę je zrozumieć i nie należy podawać metody z ładowaniem lub zależy od metody rejestru. Wspieraj mytraining.net, mimo że mnie tam nie ma.

+1

W niektórych kontekstach getRequest lub getControllerName mogą być niedostępne. Możesz bezpośrednio wywołać funkcję podstawową. 'Mage :: app() -> getFrontController() -> getRequest() -> getControllerName()' – Goose

4

Możesz mieć parametr do bloku, który jest używany do wskazania, jaki typ kodu śledzenia jest potrzebny. Następnie wystarczy użyć układu XML, aby rozwiązać problem. Można użyć następujących układ zajmuje się twój blok bieżąco z właściwego parametru: CMS stron = „cms_page” Kategoria przeglądanie = „catalog_category_view” wyrobów oglądania = „catalog_product_view”

coś takiego:

<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

Jak mogę ich użyć? –

16

pomyślałem, że warto byłoby wspomnieć, że jest to wada do sprawdzania

Mage::registry('current_product') 

ten rzeczywiście sprawdzić, czy dany produkt istnieje, ale gdy na stronie przeglądu f lub przykład, produkt jest również ustawiony, dlatego konieczne może być dokładniejsze określenie położenia strony.

Następująca kontrola zapewnia, że ​​jesteśmy na stronie produktu, sprawdzając, czy używa modułu "katalog", a kontroler jest żądaniem "produktu". Przeglądając listę recenzji produktów, wartościami będą "recenzja" (moduł) i "lista" (kontroler).

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

Mam nadzieję, że to pomoże.

+0

Nie mylisz się, sir. –

Powiązane problemy