Я пытался отобразить пользовательские данные на странице домашней страницы 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
Вот код 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>
Любая помощь будет оценена по достоинству.
попробуйте использовать notepad ++ для поиска, где отображаются default.tpl. Используйте «Найти в файлах» и добавьте поисковую фразу default.tpl
@MorganFreeFarm Я включил сюда два блока кода моего контроллера. здесь // $ data ['duration'] = html_entity_decode ($ product_info ['duration'], ENT_QUOTES, 'UTF-8'); $ data ['расписание'] = html_entity_decode ($ product_info ['расписание'], ENT_QUOTES, 'UTF-8'); и здесь // $ data ['products'] [] = array ('duration' => $ result ['duration'], 'schedule' => $ result ['schedule'], 'href' => $ this- > url-> ссылка ('product / product', 'product_id ='. $ result ['product_id'])); используя этот контроллер, я действительно успешно отображаю на странице продукта.
@ K.B. Спасибо за ответ . Я уже пробовал искать, но безуспешно.
@ в общем / домашнем контроллере у меня есть эти файлы. if (isset ($ this-> request-> get ['route'])) {$ this-> document-> addLink (HTTP_SERVER, 'canonical'); } $ data ['column_left'] = $ this-> load-> controller ('common / column_left'); $ data ['column_right'] = $ this-> load-> controller ('common / column_right'); $ data ['content_top'] = $ this-> load-> контроллер ('common / content_top'); $ data ['content_bottom'] = $ this-> load-> контроллер ('common / content_bottom'); $ data ['нижний колонтитул'] = $ this-> load-> controller ('common / footer'); $ data ['header'] = $ this-> load-> controller ('общий / заголовок');






Некоторые файлы контроллеров, которые вы видите в папке catalog / controller / common, являются «контейнерами чего-то еще». Я объясню, что происходит например в файле home.php
Если вы откроете этот файл, вы увидите всего несколько строк кода, некоторые из них выглядят так:
$ data ['column_left'] = $ this-> load-> controller ('common / column_left');
С помощью этой единственной строки кода Opencart загружает все модули, назначенные столбцу слева от домашней страницы (из администратора перейдите на страницу Дизайн -> макеты -> Дом).
$ data ['column_left'] - большой объект со списком модулей внутри:
(Это просто псевдокод, чтобы дать вам представление о том, как работают вещи.):
$data['column_left'] {
module 1 {...} controller + template
module 2 {...} controller + template
module 3 {...} controller + template
}
каждый модуль имеет свой контролер + (модель) + шаблон
Чтобы быстро получить контроллер, который отображает ваш шаблон, сначала вы должны взглянуть на макет домашней страницы (из панели администратора). Вы увидите четыре основных раздела: верхняя часть контента, контент внизу, столбец слева, столбец справа ".
Проверьте на своей домашней странице, где распечатывается ваш контент. Если, например, он находится в левом столбце, модуль, который отображает файл tpl, является одним из модулей, перечисленных в левой части столбца вашего домашнего макета (Admin).
Обычно имен модулей достаточно, чтобы узнать, какие модули (а затем какие контроллеры) отображают tpl (обычно вам нужно только посмотреть в папке catalog / controller / extension / module, чтобы найти имя файла, которое совпадает с именем модуля на странице макета ).
Метод, который я описал вам, работает в большинстве случаев без необходимости использования каких-либо инструментов отладки.
Я встречал сторонние расширения, написанные как кубики рубика. В этих случаях вы должны использовать debug_backtrace ().
Эта функция, особенно на больших фреймворках, может выводить тонны данных. Чтобы уменьшить производительность этой функции, я советую вам:
найдите, в каком разделе страницы отображается контент (содержание вверху, контент внизу, столбец слева, столбец справа), затем откройте файл каталог / контроллер / общий / [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;
Это действительно хорошее объяснение, Фрэнк. Поскольку я новичок в Opencart, я изучил поток данных на домашнюю страницу. так как я использую версию pavo flshshop 2.0.3. Первым делом не повозился с контроллером. поскольку нет файла с таким именем. поэтому я выбрал второй метод. и я вставляю предоставленный вами код и получаю эту ошибку. Примечание: Неопределенный индекс: класс в C: \ xampp \ htdocs \ grceducators \ catalog \ controller \ common \ context nt_top.php в строке 77.
Привет, Садхик, спасибо, я отредактировал этот код, я не тестировал его, но вы больше не должны получать эту ошибку уведомления
Можете ли вы показать код контроллера, где вы устанавливаете эту переменную?