2016-02-16 121 views
0

我的意圖很簡單,我只想讓我的網頁在不同的格式事件調度

www.my-site.com/product-name.html - 將加載頁面的HTML

,但我希望有一個JSON對象,當我鍵入

www.my-site.com/product-name.json

如果他們的任何事件呈現404頁之前磁調度,這是非常有益的

或我不得不重寫應用程序/代碼/核心/法師/ CMS /控制器/ indexcontroller.php 或多或少

public function defaultNoRouteAction() 
{ 
    $this->getResponse()->setHeader('HTTP/1.1','404 Not Found'); 
    $this->getResponse()->setHeader('Status','404 File not found'); 

    $this->loadLayout(); 
    $this->renderLayout(); 
} 

但我不知道如何。

回答

0

我做過類似的東西,調用一個產品網址.XML,而不是html的導出時的產品數據。

我已經添加了一個觀察者監聽產品保存的事件,這增加了產品的XML網址爲core_url_rewrite。 在這種情況下,必須與.XML

例如取代的.htm(L)

產品name.htm - >目錄/產品/視圖/ ID/4 - >負載產物與ID 4和渲染產品視圖模板,magento的核心

產品name.xml的 - > mycustommodule /產品/查看/ ID/4 - >裝載的產品ID爲4和渲染XML,自定義模塊

所以,你必須添加一個名爲「mycustommodule」另一個模塊來處理XML輸出。

乾杯!

0

我的解決方案,我發現是下面,它完美地工作,但不知道可以肯定的是它的磁WAY

我重寫Mage_Cms_IndexController noRoute方法,

public function noRouteAction($coreRoute = null) { 

    // getting current url 
     $url = Mage::helper('core/url')->getCurrentUrl(); 



      if (strstr($url,".jsonp") || strstr($url,".json") || strstr($url,".xml")) { 

      // geting file-type like json/xml 
      $format = substr(strrchr($url, "."),1); 
      // product-handle 
       $elem = substr(strrchr($url, "/"),1, strpos(strrchr($url, "/") , ".")-1); 

       switch ($format) { 
        case 'json': case 'JSON': case 'jsonp': case 'JSONP': 
         $this->getResponse()->setHeader('Content-type', 'application/json'); break; 

        case 'xml': case 'XML': 
         $this->getResponse()->setHeader('Content-type', 'application/xml'); break; 

       } 

       // loding product byproduct-handle 
       $rewrite = Mage::getModel('core/url_rewrite')->setStoreId(Mage::app()->getStore()->getId())->loadByRequestPath($elem . ".html"); 
       $pid = $rewrite->getProductId(); 
       $cat = Mage::getModel('catalog/category')->setStoreId(Mage::app()->getStore()->getId())->loadByAttribute('url_key', $elem ); 

       if (strpos($url,"hs_review")) { echo Mage::getModel("Hs_Json/review")->wrapper($pid,$format);return;} 
       if ($pid) { echo Mage::getModel("Hs_Json/product")->wrapper($pid,$format);return; } 
       if ($cat) { echo Mage::getModel("Hs_Json/category")->wrapper($cat->getId(),$format);return;} 


      } else { 

      $this->getResponse()->setHeader('HTTP/1.1','404 Not Found'); 
      $this->getResponse()->setHeader('Status','404 File not found'); 

      $pageId = Mage::getStoreConfig(Mage_Cms_Helper_Page::XML_PATH_NO_ROUTE_PAGE); 
      if (!Mage::helper('cms/page')->renderPage($this, $pageId)) { 
       $this->_forward('defaultNoRoute'); 
      } 

      } 

    } 

}