0

我一直在与一个想要在 magento 网站上写博客的客户合作。安装 AW 博客扩展后,我意识到它没有存档功能,并且我在网络上没有找到任何解决方案。

经过几天的工作,我终于找到了这个任务的解决方案。我不知道在哪里发布它,我认为这是分享它的最佳位置。

我知道人们通常不会在这里发布答案,但我必须分享,因为在那里,有人遇到困难,或者可能遇到困难。

4

2 回答 2

1

我假设您已经将 AW Blog 扩展安装到您的 magento 项目中。博客扩展页面

1)首先,我们需要一个占位符用于未来的日期选择器。我选择 AW_blog 扩展的侧边栏:app\design\frontend\YOUR_THEME\default\template\aw_blog\menu.phtml

我几乎在最后添加了以下 html 标记:

<div class="block-content">
    <div class="menu-recent">
        <h5 class="uppercase"><?php echo Mage::helper('blog')->__('Archives'); ?></h5>
        <div id="datepicker"></div>
    </div>  
</div>

2)在此之后,我将 jquery ui datepicker 添加到项目中。我们将需要它来选择日期。jquery ui 页面。在这里我需要做一些笔记。我只复制了带有主题图标的 jquery-ui.js、jquery-ui.css、images 文件夹。我这样做是因为我不需要其他任何东西。您可以根据需要下载所有内容,但关键文件是 jquery-ui.js、jquery-ui.css、images 文件夹。

a) 将jquery-ui.js复制到skin\js目录中

b) 将jquery-ui.cssimages文件夹复制到skin\frontend\YOUR_THEME\default\css目录

3) 将以下代码添加到app\design\frontend\default\default\layout\page.xml

<default translate="label" module="page">
    <label>All Pages</label>
    <block type="page/html" name="root" output="toHtml" template="page/3columns.phtml">
        <block type="page/html_head" name="head" as="head">
            ....
            <action method="addJs"><script>jquery-ui.js</script></action>
            ...
            <action method="addCss"><stylesheet>css/jquery-ui.css</stylesheet></action>

4)将以下代码添加到app\design\frontend\YOUR_THEME\default\template\page\head.phtml 这只是使用 datepicker 插件的简单工作

jQuery(function(){
    jQuery( "#datepicker" ).datepicker({
        dateFormat:"yy-mm-dd",
        onSelect: function(dateText) {
            window.location = '<?php echo Mage::getBaseUrl();?>news/?date='+dateText;//refreshes screen
        }
    });
});

所有这四个 4 步骤都是针对前端的东西。现在我们将进入后端编程

1) 打开app\code\community\AW\Blog\Block\blog.php并用以下代码替换 getPosts() 函数

public function getPosts()
{
    $collection = parent::_prepareCollection();

    $tag = $this->getRequest()->getParam('tag');
$date = $this->getRequest()->getParam('date');//gets $_GET[date] parameter

    if ($tag) {
        $collection->addTagFilter(urldecode($tag));
    }
else if ($date) { // checks if $date parameter exists
        $collection->addDateFilter(urldecode($date));
    }
    parent::_processCollection($collection);

    return $collection;
}

2) 打开app\code\community\AW\Blog\Model\Mysql4\Blog\Collection.php并添加以下函数

public function addDateFilter($date) {
    if ($date = trim($date)) {
        $whereString = sprintf("main_table.created_time >= %s", $this->getConnection()->quote($date));
        $this->getSelect()->where($whereString);
    }
    return $this;
}

这就是伙计们。如果您需要任何帮助,请告诉我。谢谢你的时间。

于 2013-07-21T11:12:54.413 回答
1

对于月份和年份列表存档

public function addDateFilter($date) {
if ($date = trim($date)) {
    $whereString = sprintf(
    "main_table.created_time = %s OR main_table.created_time LIKE %s OR main_table.created_time LIKE %s ", 
        $this->getConnection()->quote($date), $this->getConnection()->quote($date . '-%'),
        $this->getConnection()->quote('%-' . $date),$this->getConnection()->quote('%-' . $date . '-%')
        );
    $this->getSelect()->where($whereString);
}

return $this;
}

示例: foo.com/index.php/news/?date=2014bar.com/index.php/news/?date=2014-02

于 2014-06-30T18:37:48.857 回答