Frage

Angenommen, ich möchte die Kontaktseite öffnen: {Website}/Kontakt, Diese Seite ist ebenfalls dargestellt wie {Website} cms/page/view/id/12.

Ist es möglich, diese URL irgendwie zu bekommen ({Website} cms/page/view/id/12)? Ich versuche es aus dem Anfrageobjekt zu bekommen, aber ohne Erfolg.

Aktualisierung

Vielleicht sollte ich abstrakt. Wenn ich auf einer Seite bin: Produkt, Blog, CMS, brauche ich einen eindeutigen Wert, der diese Seite identifiziert, wenn ich sie öffne. Jedes Mal. Ich dachte, es kann eine solche Art von URL sein.

War es hilfreich?

Lösung

Wenn ich Ihren Beitrag korrekt verstehe, versuchen Sie, eine bestimmte angeforderte Ressource einzigartig zu identifizieren, nicht nur CMS -Seiten, oder?
Wie Sie herausgefunden haben, funktioniert dies in den meisten Fällen gut, außer dass für die CMS -Seiten, in denen der Param an der Seite page_id nicht zu den Anforderungspfadinformationen hinzugefügt wird.

Das Folgende sollte in den meisten Fällen ausreichen, obwohl Sie es möglicherweise für Argumente für geschichtete Navigationsabfragen und dergleichen anpassen möchten.

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);
}

Andere Tipps

Für CMS -Seiten ist die Route die Kennung. Es ist in der Methode abgestimmt Mage_Cms_Controller_Router::match(). Diese Übereinstimmung erfolgt nach normaler Standard -Route -Matching. Sie können viele Routen verwenden, um dorthin zu gelangen:

Diese Informationen werden in der gespeichert cms_page Tisch.

Der Code (ich denke), in dem Sie brauchen Mage_Cms_Controller_Router::match() Methode.
Hier ist eine Anpassung davon.
Zuerst erhalten Sie die angeforderte Kennung:

$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

Überprüfen Sie nun, ob sich in der aktuellen Store -Ansicht eine Seite mit der angeforderten Kennung befindet.

$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.
}

Wenn Sie Enterprise und Cache mit vollem Seiten verwenden und den Zielpfad vom Anforderungspfad abrufen müssen, finden Sie hier ein Code. Beachten Sie, dass Sie Ihren URLs .html hinzufügen:

    $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];
        }
    }

Dies geschah beim Debuggen von Enterprise Full -Page -Cache. Zunächst wird die Seite normal generiert, aber block_html ist in mage_core_model_cache :: _ erlaubteCacheOptions als falsch eingestellt. Ihr Block wird also nicht im Cache gespeichert. Nachdem die Seite generiert wurde, während FPC die Container füllt, wurde der Anforderungs-Pathinfo noch nicht festgelegt (immer noch die SEO-URL, dh '/product-name.html'). Damit können Sie den Zielweg nachschlagen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit magento.stackexchange
scroll top