假设我想打开联系页面: {网站}/联系人, ,此页面也像 {网站} cms/page/view/id/12.

是否有可能以某种方式获取此URL({网站} cms/page/view/id/12)?我试图从请求对象中获取它,但没有成功。

UPD

也许我是抽象的。当我在某个页面上:产品,博客,CMS时,我需要一些唯一的值,这些价值将在我打开时标识此页面。每次。我认为这可能是这样的URL。

有帮助吗?

解决方案

如果我正确理解您的帖子,您希望唯一地识别任何给定的请求资源,而不仅仅是CMS页面,对吗?
正如您发现的那样,在大多数情况下工作正常,除了对于page_id param未添加到请求路径信息的CMS页面。

在大多数情况下,以下内容应足够,尽管您可能需要将其自定义用于分层导航查询参数等。

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

其他提示

对于CMS页面,路由是标识符。它在方法中匹配 Mage_Cms_Controller_Router::match(). 。这种匹配发生在正常标准路线匹配之后。您可以使用许多路线到达那里:

此信息存储在 cms_page 桌子。

您需要的代码(我认为) Mage_Cms_Controller_Router::match() 方法。
这是它的改编。
首先,您获得了请求的标识符:

$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

现在,检查当前商店视图中是否有带有请求的标识符的页面。

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

如果您使用的是企业和完整页缓存,并且需要从请求路径获取目标路径,则需要一些代码。请注意,假设您将.html添加到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];
        }
    }

这是在调试企业完整页缓存的同时。首先,该页面是正常生成的,但是block_html在mage_core_model_cache :: _允许cacheoptions中设置为false。因此,您的块没有保存在缓存中。生成页面后,FPC填充容器时,尚未设置请求Pathinfo(仍然是SEO URL,即'/profoduct-name.html')。因此,这使您可以查找目标路径。

许可以下: CC-BY-SA归因
scroll top