标签归档 opencart MVC基础

通过清心醉

opencart二次开发之MVC的结构及模板使用规则1

在这里假设我们要修改主页的内容:

首先先不去看控制器和模型的命名方式,我们直接看文件是如何调用的,走一圈先:

/catalog/controller/common/home.php

这就是主页的文件位置了

我们看看,以开始就有这么一个$this->document

$this->document这个类在opencart中是用于同一模板间变量传递的
common模板中引用到的3个基本的PHP文件有header.php home.php 和footer.php
最终这3个php文件会形成一个页面
而header和footer基本是固定的内容 那么每个页面的一些title和关键词以及引用JS,CSS等路径的变量就会在home.php中通过$this->document赋值 最终3个文件汇总到页面模板时候传入header.php
opencart引擎中所有的注册变量都是在data数组内 通过document这样的实例类来操作

class ControllerCommonHome extends Controller {
public function index() {
$this->document->setTitle($this->config->get(‘config_meta_title’));   //获取标题
$this->document->setDescription($this->config->get(‘config_meta_description’)); //获取元描述
$this->document->setKeywords($this->config->get(‘config_meta_keyword’)); //获取关键字
if (isset($this->request->get[‘route’])){
$this->document->addLink(HTTP_SERVER, ‘canonical’); //判断是否存在route的参数。比如我们返回主页的时候经常会看到类似index.php?route=common/home的
}

//下面开始就是调用控制器获取页面的参数
$data[‘column_left’] = $this->load->controller(‘common/column_left’); //获取左边栏
$data[‘column_right’] = $this->load->controller(‘common/column_right’); //获取右边栏
$data[‘content_top’] = $this->load->controller(‘common/content_top’); //获取顶部
$data[‘content_bottom’] = $this->load->controller(‘common/content_bottom’);  //英文不太好暂时不太懂
$data[‘footer’] = $this->load->controller(‘common/footer’); //获取脚部
$data[‘header’] = $this->load->controller(‘common/header’);  //获取头部

if (file_exists(DIR_TEMPLATE . $this->config->get(‘config_template’) . ‘/template/common/home.tpl’)) { //判断当前视图的模板文件是否存在,如果存在,把上面获取的参数数组传值过去
$this->response->setOutput($this->load->view($this->config->get(‘config_template’) . ‘/template/common/home.tpl’, $data));
} else { //如果不存在,使用系统默认的模板,并且传递参数数组
$this->response->setOutput($this->load->view(‘default/template/common/home.tpl’, $data));
}
}
}

前面已经访问了common内的header,footer,content_bottom,content_top,column_right,column_left 6个控制器并且获取了相应数据

而这些数据的使用就是直接使用对应的tpl模板,然后通过home.tpl调用出来:

我们来看home.tpl文件

<?php echo $header; ?>
<div>
<div><?php echo $column_left; ?>
<?php if ($column_left && $column_right) { ?>
<?php $class = ‘col-sm-6’; ?>
<?php } elseif ($column_left || $column_right) { ?>
<?php $class = ‘col-sm-9’; ?>
<?php } else { ?>
<?php $class = ‘col-sm-12’; ?>
<?php } ?>
<div id=”content”><?php echo $content_top; ?><?php echo $content_bottom; ?></div>
<?php echo $column_right; ?></div>
</div>
<?php echo $footer; ?>

在这里直接输出的是变量,可在home.php控制器里是$data[”]的数组,因为作者也是第一次接触opencart这种东西。

所以我怀疑的是opencart直接输出的其实就是数组的元素。 下文分解,同时开始了解MVC的控制流程及控制器的命名方式!