jjzjj

Magento SEO 分页 like/page/2

coder 2024-03-01 原文

我正在尝试使用 pager.phtml,基本上我不喜欢 magento 使用的 ?p=2 等。
我已经通过这段代码将分页更改为我想要的,但这当然会带来 404 页,因为没有/page/2 等。
我应该使用重写规则吗?有人可以指点我吗?

<div class="pages">
    <strong><?php
    $url=   ($this->getCurrentPage()==1)?
    $this->getPagerUrl(array($this->getOrderVarName()=>$order,  $this->getDirectionVarName()=>$direction,$this->getPageVarName()=>null )).'/':
    $this->getPagerUrl(array($this->getOrderVarName()=>$order,  $this->getDirectionVarName()=>$direction,$this->getPageVarName()=>null )).'/';
     echo $this->__('Page:') ?></strong>
    <ol>
    <?php if (!$this->isFirstPage()): ?>
        <li>
            <a class="previous<?php if(!$this->getAnchorTextForPrevious()): ?> i-previous<?php endif;?>" 
            href="<?php echo $url.'p='.($this->getCurrentPage()-1);?>" title="<?php echo $this->__('Previous') ?>">
                <?php if(!$this->getAnchorTextForPrevious()): ?>
                    <img src="<?php echo $this->getSkinUrl('images/pager_arrow_left.png') ?>" alt="<?php echo $this->__('Previous') ?>" class="v-middle" />
                <?php else: ?>
                    <?php echo $this->getAnchorTextForPrevious() ?>
                <?php endif;?>
            </a>
        </li>
    <?php endif;?>
    <?php
    $pages_Num= ($this->getTotalNum()%$this->getLimit())?(($this->getTotalNum()/$this->getLimit())+1):$this->getTotalNum()/$this->getLimit();
    for($_page=1;$_page<=$pages_Num;$_page++){
        if($this->getCurrentPage()==$_page) echo '<li class="current"><a class="current" href="'.$url.'page/'.$_page.'">'.$_page.'</a></li>';
        else    echo '<li><a href="'.$url.'page/'.$_page.'">'.$_page.'</a></li>';
    }
    ?>
    <?php if (($this->getCurrentPage()+1)<$pages_Num): ?>
        <li><a class="next<?php if(!$this->getAnchorTextForNext()): ?> i-next<?php endif; ?>" 
        href="<?php echo $url.'p='.($this->getCurrentPage()+1);?>" title="<?php echo $this->__('Next') ?>">
                <?php if(!$this->getAnchorTextForNext()): ?>
                    <img src="<?php echo $this->getSkinUrl('images/pager_arrow_right.png') ?>" alt="<?php echo $this->__('Next') ?>" class="v-middle" />
                <?php else: ?>
                    <?php echo $this->getAnchorTextForNext() ?>
                <?php endif;?>
            </a></li>
    <?php endif;?>
    </ol>

</div>

最佳答案

首先,您需要创建一个自定义路由器来解析所请求的 URL。

路由器的match()方法可以用这段代码实现如下:

public function match(Zend_Controller_Request_Http $request) {
    $this->_beforeModuleMatch();

    $url = $request->getRequestUri();

    $suffix = Mage::getStoreConfig('catalog/seo/category_url_suffix');
    $pagerUrlFormat = "\/page\/([0-9]+)";
    if (preg_match('/' . $pagerUrlFormat . preg_quote($suffix, '/') . '/', $url, $match)) {
        $url = str_replace($match[0], $suffix, $url);
        $request->setRequestUri($url);

        $path = $request->getPathInfo();
        $path = str_replace($match[0], $suffix, $path);
        $request->setPathInfo($path);
        $request->setParam('p', $match[1]);

        return true;
    }

    return false;
}

此代码将生成此类 URL:http://example.com/category/p/2.html

注意!请注意,上面的代码尚未经过测试。它只是我们的 SEO 模块 (SEO Suite Ultimate) 中使用的更高级代码的简化版本

以下是对您实际需要的功能的描述:

Ability to create a pager URL format for paginated pages Examples:

-page[page_number] will transform URL into /mobile-phones-page2.html /p/[page_number] will transform URL into /mobile-phones/p/2.html

关于Magento SEO 分页 like/page/2,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20927275/

有关Magento SEO 分页 like/page/2的更多相关文章

  1. ruby-on-rails - 相关表上的范围为 "WHERE ... LIKE" - 2

    我正在尝试从Postgresql表(table1)中获取数据,该表由另一个相关表(property)的字段(table2)过滤。在纯SQL中,我会这样编写查询:SELECT*FROMtable1JOINtable2USING(table2_id)WHEREtable2.propertyLIKE'query%'这工作正常:scope:my_scope,->(query){includes(:table2).where("table2.property":query)}但我真正需要的是使用LIKE运算符进行过滤,而不是严格相等。然而,这是行不通的:scope:my_scope,->(que

  2. ruby - 每个页面上的 Jekyll 分页 - 2

    据我们所知,Jekyll默认分页仅支持index.html,我想创建blog.html并在那里包含分页。有什么解决办法吗? 最佳答案 如果您创建一个名为/blog的目录并在其中放置一个index.html文件,那么您可以向_config.yml表示paginate_path:"blog/page:num"。不是使用根文件夹中的默认index.html作为分页器模板,而是使用/blog/index.html。分页器将根据需要生成类似/blog/page2/和/blog/page3/的页面。这将使您到达yourwebsite.com/b

  3. ruby - caches_page :all - 2

    有什么方法可以告诉Rails3在给定的Controller中缓存所有页面,而不必在调用caches_page时列出所有页面?我尝试了caches_page:all,但它不起作用。 最佳答案 有点像实现的错误,但我刚刚尝试过它并且它适用于Rails3.0.6:caches_page:except=>[] 关于ruby-caches_page:all,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/que

  4. ruby-on-rails - Ruby on Rails : if current page? 是主页,不显示表单 - 2

    我不想显示表单,但前提是当前页面不是主页这是我目前所拥有的...我有我的路线设置:root'projects#index'我的看法:'projects',:action=>'index'))%>showsomestuff如果url是localhost:3000/projects,则不会显示但是它显示了它的localhost:3000所以我需要以某种方式确保它不会显示主页。另外,我有主页的搜索参数,但我仍然不想显示它是否像localhost:3000/projects?search=blahblahblah 最佳答案 使用root_p

  5. ruby-on-rails - rails expire_page 没有删除缓存的文件 - 2

    我有一个具有页面缓存的ControllerAction,我制作了一个清扫程序,它使用Controller和指定的Action调用expire_page...Controller操作呈现一个js.erb模板,所以我试图确保expire_page删除public/javascripts中的.js文件,但它没有这样做。classJavascriptsController"javascripts",:action=>"lol",:format=>'js')endend...所以,我访问javascripts/lol.js并呈现我的模板。我验证了public/javascripts/lol.js

  6. ruby-on-rails - 目录 : Forgot Password & Sign In - in same page - 2

    我正在尝试将忘记密码字段与登录页面放在一起,但如果用户未注册(并且不在应用程序数据库中),则它会重定向到原始设计的忘记密码页面并出现错误(http://localhost:3000/用户/密码)。如何使错误出现在与登录页面(http://localhost:3000/users/sign_in)相同的页面中?在app/views/devise/sessions/new.html.erb文件中ForgotPasswordEntertheemailyousignedupwith所以有一个javascript链接,如果用户忘记了他们的登录凭据,输入字段将显示在该链接上。

  7. ruby-on-rails - 事件管理员 : Can't access show/edit pages - 2

    我在使用ActiveAdmin时遇到问题。以下是版本:ruby'2.2.1'rails'4.2.0'activeadmin:1.0.0.pre1arbre:1.0.3(提到这个是因为它似乎与我的问题有某种联系)我们升级到rails4.2并且还必须升级activeadmin(从0.5开始)。经过几次调整(尤其是授权系统)之后,一切似乎都很好,除了一个大问题:我只能访问索引页面。当转到具有ID的页面时(例如:“http://localhost:3000/admin/companies/2968”),我收到此错误:没有路由匹配{:action=>"edit",:controller=>"ad

  8. ruby-on-rails - 如何允许 Facebook 页面管理员仅选择他们希望我的应用程序管理的特定页面(manage_pages) - 2

    我正在使用RubyonRails和Koalagem构建一个facebook应用程序来构建我自己的登录流程。https://github.com/arsduo/koalahttps://developers.facebook.com/docs/facebook-login/manually-build-a-login-flow/我的问题很简单。假设以下情况:-尝试连接到我的应用程序的用户有多个他们管理的Facebook页面。我希望他们能够只选择他们希望我管理的特定页面,同时拒绝访问其余页面。原因是许多将使用我的应用程序的管理员管理大量页面。当我只需要一小部分页面的权限时,我无法想象他们会

  9. ruby-on-rails - ruby rails : How do you list the partial paths that are rendered for a page? - 2

    我希望列出为我的应用程序中的每个页面呈现的部分内容。例如,当显示app/tasks/index.html.erb页面时,我想向用户显示如下内容:Partialsrenderedforthispage:tasks/_list.html.erbtasks/_button.html.erbtasks/_navigation.html.erb在RubyonRails中有什么方法可以做到这一点吗? 最佳答案 是的,在Rails中完全可以做到这一点!正如bdares在他的评论中指出的那样,用于模板渲染的行出现在日志中。但他们最初是如何到达那里的

  10. ruby-on-rails - 使用 Rails 的 Messenger 机器人 : setup for multiple pages - 2

    我想创建一个供不同用户用于其Facebook页面的MessengerBot。我创建了一个Rails应用程序并使用facebook-messengergem.我成功创建了机器人,当我为一个页面设置时它可以工作。现在,我按照说明让我的机器人在多个Facebook页面上运行(请参阅"Makeaconfigurationprovider"section)。我是Rails的新手,我不确定将类ExampleProvider放在哪里?我把它放在我的config/application.rb文件中:require_relative'boot'require'rails/all'#Requiretheg

随机推荐