Domanda

Supponiamo che voglio alla pagina contatto aperto: {sito} / contatto , questa pagina è rappresentata anche come {sito} cms / page / view / id / 12 .

E 'possibile ottenere in qualche modo per ottenere questo URL ( {website} cms / page / view / id / 12 )? Sto cercando di ottenere da oggetto di richiesta, ma senza successo.

UPD

Forse è stato quello di astratta. Quando sono in qualche pagina: prodotto, blog, cms, ho bisogno di qualche valore unico che identificherà questa pagina quando io apro. Ogni volta. Ho pensato che può essere tale tipo di URL.

È stato utile?

Soluzione

Se ho capito il tuo post in modo corretto si sta cercando di identificare in modo univoco un determinato risorsa richiesta, non solo le pagine CMS, giusto?
Come hai scoperto, nella maggior parte dei casi che funziona bene, tranne che per le pagine CMS in cui il parametro page_id non viene aggiunto alle informazioni richiesta di traccia.

Di seguito dovrebbe essere sufficiente nella maggior parte dei casi, anche se si potrebbe desiderare di personalizzarlo per argomenti di query di navigazione a strati e così via.

public function getRequestIdentifier()
{
    $req = $this->getRequest();
    $params = array('page_id', 'id', 'category', 'p', 'limit', 'order');
    $parts = array(
        $req->getModuleName(), $req->getControllerName(), $req->getActionName()
    );
    foreach ($params as $p) {
        $value = $req->getParam($p, false);
        if (false !== $value) {
            $parts[] = $p;
            $parts[] = $value;
        }
    }
    return implode('/', $parts);
}

Altri suggerimenti

Per le pagine CMS, il percorso è l'identificatore. E 'abbinato nel metodo Mage_Cms_Controller_Router::match(). Questo abbinamento avviene dopo normale corrispondenza percorso standard. È possibile utilizzare numerosi itinerari per arrivare:

Queste informazioni sono memorizzate nella tabella cms_page.

Il codice (credo) che serve è in metodo Mage_Cms_Controller_Router::match().
Qui è un adattamento di esso.
In primo luogo si ottiene l'identificatore richiesto:

$request = Mage::app()->getRequest();//get the request: In the router class it is passed as a parameter but you can get it like this in your code
$identifier = trim($request->getPathInfo(), '/'); //the requested page identifier

Ora controllare se c'è una pagina con l'identificatore richiesto nella visualizzazione attuale del serbatoio.

$page   = Mage::getModel('cms/page');//Mage_Cms_Model_Page instance
$pageId = $page->checkIdentifier($identifier, Mage::app()->getStore()->getId());//check for page id
if ($pageId) {
    $rawUrl = 'cms/page/view/page_id/'.$pageId;
    //or full url
    $fullRawUrl = Mage::getUrl('cms/page/view', array('page_id'=>$pageId));
} 
else{
    //there is no cms page with this identifier.
}

Se si utilizza Enterprise e piena pagina cache e la necessità di ottenere il percorso di destinazione del percorso di richiesta, qui è un codice. Si noti che questo presuppone che si aggiunge .html per gli URL:

    $app = Mage::app();
    $request = $app->getRequest();
    $storeId = $app->getStore()->Id();
    $pathInfo = $request->getPathInfo();

    if (is_numeric(strpos($pathInfo, '.html'))){

        $requestPathWithHtml = substr($pathInfo, 1);
        $requestPathWithoutHtml = substr($pathInfo, 1, strpos($pathInfo, '.html') -  1);
        $rewriteCollection = Mage::getModel('enterprise_urlrewrite/url_rewrite')->getCollection();
        $rewriteCollection->addFieldToFilter('request_path', array('in'=>array($requestPathWithHtml, $requestPathWithoutHtml)));
        $rewriteCollection->addFieldToFilter('store_id', $storeId);

        $size = $rewriteCollection->getSize();
        if ($size>0){
            $rewrite = $rewriteCollection->getFirstItem();
            $pathInfo = $rewrite->getTargetPath();

        }
    }

    $explodedPath = explode('/', $pathInfo);
    foreach ($explodedPath as $i=>$part){
        if ($part == 'id'){
            $id = $explodedPath[$i+1];
        }
    }

Ciò è avvenuto durante il debug cache di pagina intera Enterprise. In primo luogo la pagina viene generata normalmente, ma block_html è impostato come falso in Mage_Core_Model_Cache :: _ allowedCacheOptions. Così il vostro blocco non viene salvato nella cache. Dopo che la pagina viene generata, mentre FPC sta riempiendo i contenitori, la richiesta pathinfo non era ancora impostata (ancora il SEO URL, vale a dire '/product-name.html'). Quindi, questo ti permette di cercare il percorso di destinazione.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a magento.stackexchange
scroll top