在opencart 2.0.3中找到各个.tpl文件的控制器文件

时间:2018-09-17 08:59:40

标签: php controller opencart

我一直试图在Opencart主页页面上显示自定义数据,但无法找到将数据发送到.tpl文件的控制器。我正在使用pavo flshshop主题2.0.3。我已将数据添加到catalog/controller/product/product.php(我不确定是不是正确的控制器)文件中。当我在.tpl文件中调用该变量时,它说“未定义的变量”。有人请帮我处理数据的来源。

这是我的.tpl路径:

  

C:\ xampp \ htdocs \ grceducators \ catalog \ view \ theme \ pav_flashshop \ template \ common \ product \ default.tpl

这是默认的.tpl代码:


<div class="product-meta clearfix">
    <h6 class="name"><a href="<?php echo $product['href']; ?>"><?php echo $product['name']; ?></a></h6>
    <h6 class="name"><a href="<?php echo $product['href']; ?>"><?php echo $product['custom_desc']; ?></a></h6>

    <?php if( isset($product['description']) ){ ?>
        <p class="description"><?php echo utf8_substr( strip_tags($product['description']),0,200);?>...</p>
    <?php } ?>
    <div class="bottom clearfix">
        <?php if ($product['price']) { ?>
            <div class="price">
              <?php if (!$product['special']) { ?>
              <span class="price-new"><?php echo $product['price']; ?></span>
              <?php } else { ?>
              <span class="price-new"><?php echo $product['special']; ?></span><span class="price-old"><?php echo $product['price']; ?></span>
              <?php } ?>
            </div>


        <?php } ?>
         <?php if ($product['description']) { ?>
        <div class="price">
              <span class="price-new"><?php echo $product['custom_desc']; ?></span>

            </div>
            <?php } ?>
    </div>
</div>

任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:1)

您在目录catalog / controller / common文件夹中看到的某些控制器文件是“其他内容的容器”。我将解释您的情况,例如在文件home.php

如果打开该文件,您将仅看到几行代码,其中一些行如下所示:

$ data ['column_left'] = $ this-> load-> controller('common / column_left');

使用这行代码,Opencart会加载分配给主页左侧列的所有模块(从Admin转到 Design -> < strong> 布局 -> 首页 )。

$ data ['column_left'] 是一个很大的对象,其中包含模块列表:

这只是一个伪代码,可让您了解东西的工作原理):

$data['column_left'] {

      module 1  {...}  controller + template    
      module 2  {...}  controller + template
      module 3  {...}  controller + template
}

每个模块都有自己的控制器 +(模型)+ 模板

要快速获取正在渲染模板的控制器,首先必须查看主页的布局(从“管理”面板)。您将看到四个主要部分:内容顶部内容底部左列右列”。

在打印内容的主页上进行检查。例如,如果它在左列中,则呈现tpl文件的模块是(管理员)主布局左列中列出的模块之一。

通常,模块名称足以获取正在渲染tpl的模块(然后是哪个控制器)(通常只需要查看目录/ controller / extension / module文件夹,即可找到与该模块名称匹配的文件名)。布局页面)。

我描述的方法在大多数情况下都可以使用,而无需使用任何调试工具。

我遇到了像rubik cubes这样编写的第三方扩展。在这种情况下,您必须使用 debug_backtrace()

该功能(尤其是在大型框架上)可以输出大量数据。为了减少该函数的输出,我建议您:

  1. 查找在页面的哪个部分呈现内容(内容顶部内容底部左列列右),然后打开文件 catalog / controller / common / [ your_section ]。php

  2. 将以下代码复制到该文件的底部(我正在将您的调试版本粘贴到debug_backtrace()中,它会格式化输出,以便您可以从浏览器中轻松读取它):

    < / li>

// PHP < 5.3.6    
foreach (debug_backtrace() as $trace) {    
echo sprintf("\n%s:%s %s::%s", (isset($trace['file'])? $trace['file'] : '') , (isset($trace['line'])? $trace['line'] : ''), (isset($trace['class'])? $trace['class'] : ''), (isset($trace['function'])? $trace['function'] : ''));    

}    
die;

// PHP >= 5.3.6    
debug_print_backtrace(DEBUG_BACKTRACE_IGNORE_ARGS);    
die;