使用Opencart执行数据库

时间:2014-01-02 10:47:00

标签: opencart

我正在使用this模块,它允许我在OC中运行一个简单的博客/新闻源,除了一件事我需要做的事情,我需要在主页上显示前4篇文章。

到目前为止我有以下内容:

<?php
$sql = "SELECT * FROM " . DB_PREFIX . "blog b LEFT JOIN " . DB_PREFIX . "blog_description bd ON (b.blog_id = bd.blog_id) WHERE b.status = 1 AND b.date <= NOW() AND bd.language_id = '" . (int)$this->config->get('config_language_id') . "'";
$query = $this->db->query($sql);
$blogs = array();
?>
<div class="box" id="news">
 <div class="title">
  <p>Latest News</p>
 </div>
 <div class="content">
  <?php
  foreach($query->rows as $result){
   $blogs[] = $result;
  }
 ?>
 </div>
</div>

我一直在开发OC模板一段时间,但模块对我来说是一个全新的球类游戏,任何帮助都将不胜感激

1 个答案:

答案 0 :(得分:3)

首先,你应该学习并理解在OpenCart中如何实现MVC(或者它往往是什么) - 我们有控制器,模型和视图模板。

您的方法是将所有控制器和模型部件混合到一个完全错误的视图模板中。

那么应该去哪里:

  1. SQL查询应该进入模型
  2. 从模型中检索数据并为视图模板准备数据的新方法应该进入控制器
  3. 视图模板中只应包含HTML标记
  4. 假设您下载的扩展程序在此处有一个控制器:catalog/controller/information/news.php - 您应该扩展它的index()(或其他适当的)方法(如果需要,甚至可以创建一个新方法),以便它调用您放置新方法getLastFourArticles()的新闻模型应该如下所示:

    public function getLastFourArticles() {
        $sql = "
            SELECT * 
            FROM " . DB_PREFIX . "blog b 
            LEFT JOIN " . DB_PREFIX . "blog_description bd ON b.blog_id = bd.blog_id 
            WHERE b.status = 1 
                AND b.date <= NOW() 
                AND bd.language_id = " . (int)$this->config->get('config_language_id') . " 
            ORDER BY b.date DESC 
            LIMIT 4";
    
        return $this->db->query($sql);
    }
    

    ORDER BY部分将从最新到最新的博客条目进行排序,LIMIT 4部分将确保我们最多只收到4行。

    现在在控制器中您应该执行以下操作:

        $this->data['latest_entries'] = $this->model_information_news->getLastFourArticles();
    

    虽然期望模型为catalog/model/information/news.php并且已加载($this->load->model('information/news');)。

    现在,在您的模板中,只需要此部分:

    <div class="box" id="news">
        <div class="title">
            <p>Latest News</p>
        </div>
        <div class="content">
            <?php foreach($latest_entries as $entry) { ?>
            <span class="date"><?php echo $entry['date']; ?></span>
            <span class="entry"><?php echo $entry['text']; ?></span>
            <?php } ?>
        </div>
    </div>
    

    请记住,这只是类似指令的答案,您应该传递正确的名称和变量(以及模板中博客条目的索引)。