我一直试图在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>
任何帮助将不胜感激。
答案 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()。
该功能(尤其是在大型框架上)可以输出大量数据。为了减少该函数的输出,我建议您:
查找在页面的哪个部分呈现内容(内容顶部,内容底部,左列,列右),然后打开文件 catalog / controller / common / [ your_section ]。php
将以下代码复制到该文件的底部(我正在将您的调试版本粘贴到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;