[英]Locating the controller file of respective .tpl file in opencart 2.0.3
我一直试图在Opencart主页页面上显示自定义数据,但无法找到从中将数据发送到.tpl文件的控制器。 我正在使用pavo flshshop主题2.0.3。 我已将数据添加到catalog/controller/product/product.php
(我不确定控制器是否正确)文件中。 当我在.tpl文件中调用该变量时,它说“未定义的变量”。 有人请帮我处理数据的来源。
这是我的.tpl路径:
C:\\ XAMPP \\ htdocs中\\ grceducators \\目录\\视图\\主题\\ pav_flashshop \\模板\\ COMMON \\产品\\ default.tpl
这是default.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>
任何帮助将不胜感激。
您在目录/控制器/公用文件夹中看到的某些控制器文件是“其他内容的容器”。 我将解释您的情况,例如在文件home.php中
如果打开该文件,则只会看到几行代码,其中一些行如下所示:
$ data ['column_left'] = $ this-> load-> controller('common / column_left') ;
使用这行代码,Opencart会加载分配给主页左侧列的所有模块(从Admin转到页面Design- > layouts- > Home )。
$ data ['column_left']是一个很大的对象,里面有一个模块列表:
( 这只是一个伪代码,可让您了解东西的工作原理 ):
$data['column_left'] {
module 1 {...} controller + template
module 2 {...} controller + template
module 3 {...} controller + template
}
每个模块都有自己的控制器 +(模型)+ 模板
为了快速获取正在渲染模板的控制器,首先必须查看主页的布局(从“管理”面板)。 您将看到四个主要部分: 内容顶部 , 内容底部 , 左列 , 右列 “。
在您的首页上打印出您的内容。 例如,如果它在左列中,则呈现tpl文件的模块是您(Admin)主页布局左列中列出的模块之一。
通常,模块名称足以获取正在渲染tpl的模块(然后是哪个控制器)(通常,您只需要在目录/控制器/扩展名/模块文件夹中查找与布局页面中与模块名称匹配的文件名即可) )。
我描述的方法在大多数情况下都可以使用,而无需使用任何调试工具。
我遇到了第三方扩展,如rubik cubes。 在这些情况下,您必须使用debug_backtrace() 。
该功能(特别是在大型框架上)可以输出大量数据。 为了减少该函数的输出,我建议您:
查找在页面的哪一部分呈现内容 ( 内容顶部 , 内容底部 , 左列 , 右列 ),然后打开文件catalog / controller / common / [ your_section ] .php
将以下代码复制到该文件的底部(我将您的修改版粘贴到debug_backtrace(),它格式化输出,以便您可以从浏览器轻松读取它):
// 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;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.