3

如何修改模块,使其仅接收来自特定类别 (ID = 35) 的文章?

下面的代码获取了 opencart 模块 pavblog 的所有文章。我想改变它,所以它只需要类别 id 为 35 的文章。

请让我知道如何更改此代码。

它取自 opencart 中的目录/控制器/模块文件夹。

<?php  
class Controllermodulepavbloglatest extends Controller {
    protected function index($setting) {
        static $module = 0;
        $this->load->model('pavblog/blog');
        $this->load->model('catalog/product'); 
        $this->load->model('tool/image');
        $this->language->load('module/pavblog');

        $this->data['button_cart'] = $this->language->get('button_cart');


        if( !defined("_PAVBLOG_MEDIA_") ){
            if (file_exists('catalog/view/theme/' . $this->config->get('config_template') . '/stylesheet/pavblog.css')) {
                $this->document->addStyle('catalog/view/theme/' . $this->config->get('config_template') . '/stylesheet/pavblog.css');
            } else {
                $this->document->addStyle('catalog/view/theme/default/stylesheet/pavblog.css');
            }
            define("_PAVBLOG_MEDIA_",true);
        }

        $default = array(
            'latest' => 1,
            'limit' => 9
        );

        $this->data['width'] = $setting['width'];
        $this->data['height'] = $setting['height'];
        $this->data['cols']   = (int)$setting['cols'];  

        $this->data['tabs'] = array();



        $data = array(
            'sort'  => 'b.`created`',
            'order' => 'DESC',
            'start' => 0,
            'limit' => $setting['limit']
        );

        if( $setting['tabs'] == 'featured' ){           
            $data['featured'] = 1;
            $blogs = $this->model_pavblog_blog->getListBlogs( $data );
            $this->data['heading_title'] = $this->language->get('text_featured');
        }elseif( $setting['tabs'] == 'mostviewed' ){    
            $data['sort'] = 'b.`hits`';
            $blogs = $this->model_pavblog_blog->getListBlogs( $data );
            $this->data['heading_title'] = $this->language->get('text_mostviewed');
        }else {
            $blogs = $this->model_pavblog_blog->getListBlogs( $data );
            $this->data['heading_title'] = $this->language->get('text_latest');
        }


        $this->load->model('pavblog/category'); 
        $users = $this->model_pavblog_category->getUsers();

        foreach( $blogs as $key => $blog ){
            if( $blogs[$key]['image'] ){    
                $blogs[$key]['thumb'] = $this->model_tool_image->resize($blog['image'], $setting['width'], $setting['height'] );
            }else {
                $blogs[$key]['thumb'] = '';
            }                   

            $blogs[$key]['description'] = html_entity_decode($blog['description'], ENT_QUOTES, 'UTF-8');
            $blogs[$key]['author'] = isset($users[$blog['user_id']])?$users[$blog['user_id']]:$this->language->get('text_none_author');
            $blogs[$key]['category_link'] =  $this->url->link( 'pavblog/category', "path=".$blog['category_id'] );
            $blogs[$key]['comment_count'] =  10;
            $blogs[$key]['link'] =  $this->url->link( 'pavblog/blog','id='.$blog['blog_id'] );
        }


        if( isset( $setting['description'][$this->config->get('config_language_id')] ) ) {  
            $this->data['message'] = html_entity_decode($setting['description'][$this->config->get('config_language_id')], ENT_QUOTES, 'UTF-8');
        }else {
            $this->data['message'] = '';
        }



        $this->data['blogs'] = $blogs;
        $this->data['module'] = $module++;

        if (file_exists(DIR_TEMPLATE . $this->config->get('config_template') . '/template/module/pavbloglatest.tpl')) {
            $this->template = $this->config->get('config_template') . '/template/module/pavbloglatest.tpl';
        } else {
            $this->template = 'default/template/module/pavbloglatest.tpl';
        }

    $this->render();
}

}
?>

您所指的代码

<?php   
/******************************************************
 * @package Pav blog module for Opencart 1.5.x
 * @version 1.0
 * @author http://www.pavothemes.com
 * @copyright   Copyright (C) Feb 2013 PavoThemes.com <@emai:pavothemes@gmail.com>.All rights reserved.
 * @license     GNU General Public License version 2
*******************************************************/

/**
 * class ModelPavblogBlog 
 */
class ModelPavblogBlog extends Model {      


    public function __construct( $registry ){
        parent::__construct( $registry );
        $this->isInstalled();

    }
    /**
     * Get Blog Information by Id 
     */
    public function getInfo( $id ){

        $query = ' SELECT b.*,bd.title,bd.description,cd.title as category_title,bd.content  FROM '
                                . DB_PREFIX . "pavblog_blog b LEFT JOIN "
                                . DB_PREFIX . "pavblog_blog_description bd ON b.blog_id=bd.blog_id LEFT JOIN "
                                . DB_PREFIX . 'pavblog_category c ON c.category_id=b.category_id  LEFT JOIN ' 
                                . DB_PREFIX . 'pavblog_category_description cd ON (c.category_id=cd.category_id AND cd.language_id='.(int)$this->config->get('config_language_id').')' ;

        $query .=" WHERE bd.language_id=".(int)$this->config->get('config_language_id');
        $query .= " AND b.blog_id=".(int)$id;


        $query = $this->db->query( $query );
        $blog = $query->row;
        return $blog; 
    }

    /**
     * update hit time after read
     */
    public function updateHits( $id ){
        $sql = ' UPDATE '.DB_PREFIX.'pavblog_blog SET hits=hits+1 WHERE blog_id='.(int)$id;
        $this->db->query( $sql );
    }

    /**
     * get list of blogs in same category of current
     */
    public function getSameCategory( $category_id, $blog_id, $limit=10 ){
        $data = array(
            'filter_category_id' => $category_id,

            'not_in'           => $blog_id,
            'sort'               => 'created',
            'order'              => 'DESC',
            'start'              => 0,
            'limit'              => $limit
        );

        return $this->getListBlogs( $data );
    }

    /**
     * get total blog
     */
    public function getTotal( $data ){
        $sql = ' SELECT count(b.blog_id) as total FROM '
                                . DB_PREFIX . "pavblog_blog b LEFT JOIN "
                                . DB_PREFIX . "pavblog_blog_description bd ON b.blog_id=bd.blog_id  and bd.language_id=".(int)$this->config->get('config_language_id')." LEFT JOIN "
                                . DB_PREFIX . 'pavblog_category c ON c.category_id=b.category_id  LEFT JOIN ' 
                                . DB_PREFIX . 'pavblog_category_description cd ON c.category_id=cd.category_id  and cd.language_id='.(int)$this->config->get('config_language_id') ;

        $sql .=" WHERE bd.language_id=".(int)$this->config->get('config_language_id');

        if( isset($data['filter_category_id']) && $data['filter_category_id'] ){
            $sql .= " AND b.category_id=".(int)$data['filter_category_id'];
        }
        if( isset($data['filter_tag']) && $data['filter_tag'] ){
            $tmp = explode (",",$data['filter_tag'] );

            if( count($tmp) > 1  ){

                $t = array();
                foreach( $tmp as $tag ){
                    $t[] = 'b.tags LIKE "%'.$this->db->escape( $tag ).'%"';

                }
                $sql .= ' AND  '.implode(" OR ", $t ).' ';  

            }else {
                $sql .= ' AND b.tags LIKE "%'.$this->db->escape( $data['filter_tag'] ).'%"';
            }
        }

        $query = $this->db->query( $sql );
        return $query->row['total'];

    }

    /**
     *  get list blogs 
     */
    public function getListBlogs( $data ){

        $sql = ' SELECT b.*,bd.title,bd.description,cd.title as category_title FROM '
                                . DB_PREFIX . "pavblog_blog b LEFT JOIN "
                                . DB_PREFIX . "pavblog_blog_description bd ON b.blog_id=bd.blog_id  and bd.language_id=".(int)$this->config->get('config_language_id')." LEFT JOIN "
                                . DB_PREFIX . 'pavblog_category c ON c.category_id=b.category_id  LEFT JOIN ' 
                                . DB_PREFIX . 'pavblog_category_description cd ON c.category_id=cd.category_id  and cd.language_id='.(int)$this->config->get('config_language_id') ;

        $sql .=" WHERE b.status = '1' AND bd.language_id=".(int)$this->config->get('config_language_id');

        if( isset($data['filter_category_id']) && $data['filter_category_id'] ){
            $sql .= " AND b.category_id=".(int)$data['filter_category_id'];
        }


        if( isset($data['filter_tag']) && $data['filter_tag'] ){
            $tmp = explode (",",$data['filter_tag'] );

            if( count($tmp) > 1  ){

                $t = array();
                foreach( $tmp as $tag ){
                    $t[] = 'b.tags LIKE "%'.$this->db->escape( $tag ).'%"';

                }
                $sql .= ' AND  '.implode(" OR ", $t ).' ';  

            }else {
                $sql .= ' AND b.tags LIKE "%'.$this->db->escape( $data['filter_tag'] ).'%"';
            }
        }

        if( isset($data['featured']) ){
            $sql .= ' AND featured=1 '; 
        }

        if( isset($data['not_in']) && $data['not_in'] ){
            $sql .= ' AND b.blog_id NOT IN('.$data['not_in'].')';
        }
        $sort_data = array(
            'bd.title',

            'b.hits',
            'b.`position`',
            'b.`created`',
            'b.created'
        );  
        if (isset($data['sort']) && in_array($data['sort'], $sort_data)) {
            if ($data['sort'] == 'pd.name' || $data['sort'] == 'p.model') {
                $sql .= " ORDER BY LCASE(" . $data['sort'] . ")";
            }else {
                $sql .= " ORDER BY " . $data['sort'];
            }
        } else {
            $sql .= " ORDER BY b.`position`";   
        }

        if (isset($data['order']) && ($data['order'] == 'DESC')) {
            $sql .= " DESC, LCASE(bd.title) DESC";
        } else {
            $sql .= " ASC, LCASE(bd.title) ASC";
        } 
        if (isset($data['start']) || isset($data['limit'])) {
            if ($data['start'] < 0) {
                $data['start'] = 0;
            }               

            if ($data['limit'] < 1) {
                $data['limit'] = 20;
            }   

            $sql .= " LIMIT " . (int)$data['start'] . "," . (int)$data['limit'];
        }


        $query = $this->db->query( $sql );
        $blogs = $query->rows;
        return $blogs; 
    }

    public function isInstalled() {
        $sql = " SHOW TABLES LIKE '".DB_PREFIX."pavblog_blog'";
        $query = $this->db->query( $sql );
        if( count($query->rows) <=0 ){ 
            $file = dirname(DIR_APPLICATION).'/admin/model/sample/module.php';
            if( file_exists($file) ){
                require_once( $file );
                $sample = new ModelSampleModule( $this->registry );
                $result = $sample->installSampleQuery( $this->config->get('config_template'),'pavblog', true );  

            }
            return false;
        }
        return true;
    }


    public function getDefaultConfig(){



        return array(
            'children_columns' => '3',
            'general_cwidth' => '250',
            'general_cheight' => '250',
            'general_lwidth'=> '620',
            'general_lheight'=> '300',
            'general_sheight'=> '250',
            'general_swidth'=> '250',
            'general_xwidth' => '80',
            'general_xheight' => '80',
            'cat_show_hits' => '1',
            'cat_limit_leading_blog'=> '1',
            'cat_limit_secondary_blog'=> '5',
            'cat_leading_image_type'=> 'l',
            'cat_secondary_image_type'=> 's',
            'cat_show_title'=> '1',
            'cat_show_image'=> '1',
            'cat_show_author'=> '1',
            'cat_show_category'=> '1',
            'cat_show_created'=> '1',
            'cat_show_readmore' => 1,
            'cat_show_description' => '1',
            'cat_show_comment_counter'=> '1',

            'blog_image_type'=> 'l',
            'blog_show_title'=> '1',
            'blog_show_image'=> '1',
            'blog_show_author'=> '1',
            'blog_show_category'=> '1',
            'blog_show_created'=> '1',
            'blog_show_comment_counter'=> '1',
            'blog_show_comment_form'=>'1',
            'blog_show_hits' => 1,
            'cat_columns_leading_blog'=> 1,
            'cat_columns_leading_blogs'=> 1,
            'cat_columns_secondary_blogs' => 2,
            'comment_engine' => 'local',
            'diquis_account' => 'pavothemes',
            'facebook_appid' => '100858303516',
            'facebook_width'=> '600',
            'comment_limit'=> '10',
            'auto_publish_comment'=>0,
            'enable_recaptcha' => 1,
            'recaptcha_public_key'=>'6LcoLd4SAAAAADoaLy7OEmzwjrf4w7bf-SnE_Hvj',
            'recaptcha_private_key'=>'6LcoLd4SAAAAAE18DL_BUDi0vmL_aM0vkLPaE9Ob',
            'rss_limit_item' => 12,
            'keyword_listing_blogs_page'=>'blogs'

        );
    }

}
?>
4

1 回答 1

1

尝试改变:

$data = array(
     'sort'  => 'b.`created`',
     'order' => 'DESC',
     'start' => 0,
     'limit' => $setting['limit']
);

至:

$data = array(
     'filter_category_id' => 35,
     'sort'  => 'b.`created`',
     'order' => 'DESC',
     'start' => 0,
     'limit' => $setting['limit']
);

我对 opencart 做了一些研究,我认为这应该可行。最初,我没有看到以下代码,它检查函数filter_category_id中的a getListBlogs()

if( isset($data['filter_category_id']) && $data['filter_category_id'] ){
    $sql .= " AND b.category_id=".(int)$data['filter_category_id'];
}
于 2015-12-22T18:53:03.963 回答