2010-06-14 24 views
15

ürününde olup olmadığını belirleme Bir Magento sitesinin tüm sayfalarına izleme kodları eklemek istiyorum ve sayfa bir CMS sayfası, bir kategori tarama sayfası veya bir ürün olması durumunda farklı bir sözdizimi kullanmak zorundayım sayfaya bak. Şimdilik her sayfada genel bir izleme kodu ekleyen bir blokla kurulmuş bir özel modülüm var. Bloğun içinden CMS sayfalarını, kategori sayfalarını ve ürün sayfalarını nasıl ayırt edebilirim? BenÜrün sayfasında Magento

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

ürün ve kategori sayfalarında ürün ve kategori kimliğini döndürür görebilirsiniz

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

, ancak bu sayfa türleri arasında ayırım yapmaz:

ben ile başladı. Her iki kategori tarama ve ürün görünümü sayfaları için

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

dönüş CMS sayfaları için "cms" ama döndürüyor "katalog", bu yüzden ayrı kategori ve ürün sayfalarını anlatmak için bu kullanamazsınız.

İstekte güvenle kullanabileceğimin bir göstergesi var mı? Ya da farklı sayfa türleri için farklı izleme kodları hedefimi gerçekleştirmenin daha iyi bir yolu var mı?

cevap

25

Orada bu kullanarak yönlendiricileri yapmak daha iyi bir yol olabilir, ama bir hızlı bir şekilde biz bakıyoruz tek bir ürün olup olmadığını görmek için kayıt kontrol etmektir edilebilir: yardımcı

<?php 

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

Hope !

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

bu% 100 MVC modeline göre yapmak doğru yolu, çekirdek koduna bakmak lütfen gerçekten anlamak olduğunu:

sayesinde Joe

+0

Özel sayfalarda veya özel işlevlerde bu kayıt defteri anahtarınızın olması olası bir durumdur. Bu yüzden kayıt defteri anahtarı ile belirlemeniz önerilmez. Kontrolör isminin yolu daha iyi. Kayıt defteri yolu ile birlikte –

+0

denetleyici en iyisidir. denetleyici kullanıyorsanız ve bu blok head.phtml dosyanızda bulunuyorsa, Tag sayfalarında sorunla karşılaşabilirsiniz (bu sorunu daha yeni karşıladı) - Etiket sayfaları Ürün denetleyicisini kullanıyor, ancak Ürün verilerini açamıyor. Yani her iki durumu da kullanıyorum. –

30

easest cevap şudur ve yöntem yükleme ile vermeyin veya kayıt defteri yöntemine bağlıdır. Orada olmasam bile mytraining.net'i destekleyin.

+1

Bazı durumlarda getRequest veya getControllerName kullanılamıyor olabilir. Temel işlevi doğrudan arayabilirsiniz. 'Mage :: app() -> getFrontController() -> getRequest() -> getControllerName()' – Goose

4

Ne tür bir izleme kodunun gerekli olduğunu belirtmek için kullanılan bloğa bir parametreniz olabilir. Sonra sorunu çözmek için düzeni XML kullanın. CMS Sayfalar = 'cms_page' Kategori tarama = 'catalog_category_view' Ürün = 'catalog_product_view' böyle

Something görüntüleme:

<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> 
aşağıdaki düzen engellenenler uygun parametre ile güncellenmesini kolları kullanabilirsiniz
+0

Bunları nasıl kullanabilirim? –

16

Ben bir ürün varsa gerçekten kontrol etmez

Mage::registry('current_product') 

Bu kontrol bir kusur var kayda değer olacağını düşündüm, ama ne zaman bir yorum sayfası f veya örnek, ürün de ayarlanır, bu nedenle sayfa konumunu belirlemek için daha spesifik olmanız gerekebilir.

Aşağıdaki kontrol, bir ürün sayfasında "katalog" modülünü kullanıp kullanmadığınızı kontrol ederek ve "ürün" talebi olan bir ürün olduğundan emin olmanızı sağlar. Bir ürün listesini incelerken, değerleri "gözden geçir" (modül) ve "liste" (kontrolör) olur.

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

Umarım bu yardımcı olur.

+0

Yanlış değil, efendim. –

İlgili konular