Jump to content
Sign in to follow this  
Ramis05rus

[Решено] OpenCart 2. Как проверить, находимся ли мы на странице товара?

Recommended Posts

Здравствуйте!
Имеется магазин на OpenCart 2.0.1.1, необходимо в header.tpl задать проверку, находимся мы на странице товара или же какой-то другой.

<?php
  if (<проверка, товар ли мы показываем или нет>){
    оператор;
  }else{
    оператор 2;
  };
?>
Как можно провести такую проверку? Используется ЧПУ, так что из url парсить не удастся.
Может, можно через тип используемого шаблона? Для товаров используется product.tpl, в нём и вызывается header.tpl
Edited by Ramis05rus

Share this post


Link to post
Share on other sites

Проверяеть по роуту

if (isset($this->request->get['route']) && $this->request->get['route'] == 'product/product') {
 ...
}
  • +1 1

Share this post


Link to post
Share on other sites

Вот такая конструкция у меня.

<?php if ($description) : ?>
	//если есть родной дескрипшн, выводим собственный
	<meta name="description" content="<?php echo $description; ?>" />
	//иначе, если мы находимся на странице с товаром
	//формируем дескрипшн вида "тайтл + некоторые предопределенные слова"
<?php elseif(isset($this->request->get['route']) && $this->request->get['route'] == 'product/product') : ?>
	<meta name="description" content="<?php $desc = $title . '. ✔ Заходите!'; echo $desc; ?>" />
<?php else : ?>
	//для отладки - если не удается получить ни тот, ни другой, пишем "отсутствует"
	<meta name="description" content="Отсутствует" />
<?php endif; ?>

Эта проверка не работает, выводится "отсутствует". Есть еще идеи?

Edited by Ramis05rus

Share this post


Link to post
Share on other sites

Проверку необходимо делать в контроллере, а не в представлении

Share this post


Link to post
Share on other sites

thentru, Я правильно понимаю, в контроллер header.php мы добавляем эту проверку, определяем, например, переменную, а затем можем обращаться к этой переменной из header.tpl?

 

Добавил в system\modification\catalog\controller\common\header.php ,

class ControllerCommonHeader extends Controller {
	<тут стандартные функции>
	
    if (isset($this->request->get['route']) && $this->request->get['route'] == 'product/product') {
		$tovar = true;
    };
}

но получил просто пустую страницу. Где я ошибся, неправильно выбрал место для размещения проверки?

Share this post


Link to post
Share on other sites

Переменная $description в данном случае относится к контроллеру продукта
/catalog/controller/product/product.php

соответственно, все ваши манипуляции делаете в нем и выводите в product.tpl


в header.tpl эта переменная $description недоступна, чтобы ее здесь получить нужно получить информацию о товаре

Edited by thentru
  • +1 1

Share this post


Link to post
Share on other sites

thentru, Дело в том, что $description - это не описание непосредственно товара, это содержимое одноимённого метатега (привет, SEO), и она доступна из header.tpl в изначальной версии шаблона, без падений.

 

Проблемы у меня возникают, когда я добавляю любой код в контроллер (я что-то на этом шаге делаю неверно).

Например, сейчас я добавил в \system\modification\catalog\controller\product\product.php код:

<?php
class ControllerProductProduct extends Controller {
	тут стандартные функции

	$abcde = 5;
}

и получил пустой экран при открытии товара.

 

То же было, когда пытался добавить что-то в header.php.

Можно писать прямо в классе, или надо оборачивать код в какую-то функцию?

PS. Шаблон NewStore, если это внесёт ясность...

Edited by Ramis05rus

Share this post


Link to post
Share on other sites

1. правки внутри метода index()

2. зачем вы трогаете header?
3. проверка на роут вам и не нужна
4. посмотрите как передается мета-тег в контроллере продукта

$this->document->setDescription($product_info['meta_description']);

все что вам надо - это слепить нужный мета-тег и установить его через метод setDescription

Edited by thentru
  • +1 1

Share this post


Link to post
Share on other sites

не в ту степь как в техническом так и в идеологическом плане

Share this post


Link to post
Share on other sites

thentru, я сразу не объяснил, исправлюсь.

Есть куча товаров с не прописанным метатегом description.

Есть страницы типа "Главная", "О нас", у которых этот метатег составлен вручную, но также есть страницы без тега.

 

Задача: для страниц с товарами выводить:

1) если метатег задан - выводить его (этот вариант по-умолчанию работает, в header.tpl есть условие проверки $description, если не пустая = выводим);

2) если метатег для страницы товара не прописан - генерируем description по шаблону "%название товара% - Купить там-то сям-то." и выводим его.

 

Изначально код в header.tpl выглядел так:

<?php if ($description) { ?>
	<meta name="description" content="<?php echo $description; ?>" />
<?php } ?>

И он работал.

Я его модифицировал, добавив генерацию description по шаблону в случае его отсутствия:

<?php if ($description) : ?>
	<meta name="description" content="<?php echo $description; ?>" />
<?php else : ?>
	<?php
		$desc = $title . ' ➤ Купить по выгодной цене!';
	?>
	<meta name="description" content="<?php echo $desc; ?>" />
<?php endif; ?>

И это тоже работает :)

Теперь нужно сделать так, чтобы description генерировался в случае отсутствия только на страницах товара (а не, например, в категориях или каких-то справочных страницах типа "Доставки"). То есть, перед процедурой генерации нужно добавить проверку, товар ли мы собираемся отобразить, или нет.

Share this post


Link to post
Share on other sites

@Ramis05rus , вы идёте абсолютно не тем путём! Как уже было сказано выше, есть метод

$this->document->setDescription()

С помощь него вы можете установить этот метатег прямо в контроллере товара. И если вы этот контроллер откроете, то увидите, что там этот метод уже используется. Вот там и делайте свои проверки перед вызовом этого метода.

Share this post


Link to post
Share on other sites

thentru, Dotrox, большое спасибо!

В \system\modification\catalog\controller\product\product.php после указанного метода добавил

if ($product_info['meta_description'] == ''){
	$this->document->setDescription($data['heading_title'] . ' ➤ Купить по выгодной цене!');
}

, всё работает как надо!

Share this post


Link to post
Share on other sites

@Ramis05rus , это надо делать не в кеше модификаторов, а в оригинальном файле (/catalog/controller/product/product.php), иначе все правки после обновления кеша улетят в трубу.

И второе: надо не дважды вызывать setDescription, а сделать все проверки до вызова и туда передать уже результат. То есть так:

if (empty($product_info['meta_description'])){
	$product_info['meta_description'] = $data['heading_title'] . $this->language->get('custom_meta_description');	
}
$this->document->setDescription($product_info['meta_description']);

 

Ну, и обратите внимание, что empty, а не сравнение с пустой строкой и сам текст не в контроллере, а в языковом файле и подтягивается оттуда через

$this->language->get

 

Share this post


Link to post
Share on other sites
В 31.03.2017 в 14:18, thentru сказал:

Проверяеть по роуту

if (isset($this->request->get['route']) && $this->request->get['route'] == 'product/product') {
 ...
}

и что в трех точках писать если мне нужно вывести код в определенном месте в хедер тпл?

 

Share this post


Link to post
Share on other sites
14 часов назад, Alexlife сказал:

и что в трех точках писать если мне нужно вывести код в определенном месте в хедер тпл?

то, что нужно сделать при данном условии

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
You are posting as a guest. If you have an account, please sign in.
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this  

  • Similar Content

    • By DarthOlolo
      Доброго времени суток. Подскажите, пожалуйста, как лучше реализовать на 2.3 вывод списка ссылок-названий городов, при выборе которого просто менялся бы выводимый в шапке телефон, текст названия текущего города и при этом запоминался бы данный выбор в сессии пользователя? Либо может у кого завалялся подходящий скрипт для такого.
       
      Так как смена данных нужна только в паре мест в шапке сайта, без смены адресов доставки корзины и прочего, решил искать не модуль простенький скрипт. Сначала нашел сие творение  скрипт1, но как то не шибко разобрался в нем (как вывести кнопку-ссылку вывода модального окна для выбора города). Затем нашел такой скрипт скрипт2 который меняет данные, лёгкий, НО при этом выбор городов реализован через select, а как переделать его под клик по ссылке пока что-то не хватает умений сделать.
    • By Caper111
      Доброго времени суток, уважаемые коллеги!
      Столкнулся с нестандартной задачей при работе с модулем simple в opencart 2.1
      Цель задачи была создать метод оплаты "Оплата бонусами", но так, что бы он не "светился" на сайте, а по факту автоматически отправлял информацию при нажатии клиентом кнопку "использовать все бонусы" ну и естественно другие методы оплаты должны быть скрыты.
      Так вот, я бы хотел все это решить через Фронт, но не пойму как обращаться к элементу по ID если ID передается следующим образом. 
       
      <?php foreach ($payment_methods as $payment_method) { ?> <?php if($payment_method['code'] == 'cash_terminal') if ($id_choice_supermarket != 3 && $id_choice_supermarket != 6 && $id_choice_supermarket != 7 && $id_choice_supermarket != 8 && $_SESSION["default"]["shipping_method"]["code"] != "pickup.pickup") continue; ?> <?php if($payment_method['code'] == 'liqpay_freeze') if (isset($_POST["reward_bonus_check"]) && strlen($_POST["reward_bonus_check"])>0) continue; ?> <div class="e5_7 radio" style="padding-bottom: 12px; <?php if($id_choice_supermarket != 8) if($payment_method['code'] != "monobank" && $payment_method['code'] != "card_privat" && $payment_method['code'] != "cash" && $_SESSION["default"]["shipping_method"]["code"] != "courier.courier") echo "display:none"; ?>"> <input type="radio" data-onchange="reloadAll" class="e9" name="payment_method" value="<?php echo $payment_method['code']; ?>" <?php echo !empty($payment_method['dummy']) ? 'disabled="disabled"' : '' ?> <?php echo !empty($payment_method['dummy']) ? 'data-dummy="true"' : '' ?> id="<?php echo $payment_method['code']; ?>" <?php if ($payment_method['code'] == $code) { ?>checked="checked"<?php } ?> /> <label for="<?php echo $payment_method['code']; ?>" class="e9_1"> <?php echo $payment_method['title']; ?> <?php if (isset($payment_method['terms'])) { ?> <?php echo $payment_method['terms']; ?> <?php } ?> </label> </div>  
       
    • By Leingard
      Модуль для обнаружения и последующего решения ошибок и проблем Ваших покупателей. Используя модуль, Вы сможете найти проблемные места Вашего сайта с которыми сталкиваются покупатели. Ошибка 404 - теперь не загадка. Вы будете знать где, когда и как покупатель вышел на отсутствующую страницу или подозрительный запрос.
       
      Обнаружение битых ссылок в поисковой системе на Ваш сайт, так же можно обнаружить при помощи модуля.  
       
      DEMO: OC 3: http://oc30.gameshara.ru/
      DEMO: OC 2.3: http://gameshara.ru/module/
      DEMO: OC 2.1: http://gameshara.ru/ocstore21/
      Админ часть: Admin (Логин и пароль: demo)
       
      Возможности модуля:
      Посещение покупателями страниц с ошибокой 404 Вашего магазина. Откуда перешел и когда. Битые товары которые до сих пор отображаются в поисковой системе или на сайте. При заходе на такие, Вы увидите отчёт. Ошибки категорий или старые категории которые нужно убрать (а посетитель их видит). При посещение таких покупателями, Вы увидите. Старые или отсутствующие производители по которым прошелся пользователь. Отображение IP адресов Подозрительные запросы так же будут отображены в отчёте.  
      Инструкция в архиве.
       
      Лицензия:
      Модуль продается с лицензией на сайт. Одна покупка = Один домен Покупая копию модуля вы получаете право на использование. Распространения модуль платно или бесплатно нарушает лицензию и грозит обнулением покупки, а так же уголовной ответственность предусмотренной статей 146 УК РФ (Нарушение авторских и смежных прав)  Автор оставляет за собой право изменят условия предоставления лицензии, изменения цены и стоков продления лицензии. Все доработки, переработки и изменения функционала не входят в стоимость модуля и оплачиваются отдельно по письменной договоренности с автором.  
      Тип распространения:
      Как есть
    • By Leingard
      450.00 руб
      Скачать/Купить дополнение


      CrashReport - отчет о проблемах сайта
      Модуль для обнаружения и последующего решения ошибок и проблем Ваших покупателей. Используя модуль, Вы сможете найти проблемные места Вашего сайта с которыми сталкиваются покупатели. Ошибка 404 - теперь не загадка. Вы будете знать где, когда и как покупатель вышел на отсутствующую страницу или подозрительный запрос.
       
      Обнаружение битых ссылок в поисковой системе на Ваш сайт, так же можно обнаружить при помощи модуля.  
       
      DEMO: OC 3: http://oc30.gameshara.ru/
      DEMO: OC 2.3: http://gameshara.ru/module/
      DEMO: OC 2.1: http://gameshara.ru/ocstore21/
      Админ часть: Admin (Логин и пароль: demo)
       
      Возможности модуля:
      Посещение покупателями страниц с ошибокой 404 Вашего магазина. Откуда перешел и когда. Битые товары которые до сих пор отображаются в поисковой системе или на сайте. При заходе на такие, Вы увидите отчёт. Ошибки категорий или старые категории которые нужно убрать (а посетитель их видит). При посещение таких покупателями, Вы увидите. Старые или отсутствующие производители по которым прошелся пользователь. Отображение IP адресов Подозрительные запросы так же будут отображены в отчёте.  
      Инструкция в архиве.
       
      Лицензия:
      Модуль продается с лицензией на сайт. Одна покупка = Один домен Покупая копию модуля вы получаете право на использование. Распространения модуль платно или бесплатно нарушает лицензию и грозит обнулением покупки, а так же уголовной ответственность предусмотренной статей 146 УК РФ (Нарушение авторских и смежных прав)  Автор оставляет за собой право изменят условия предоставления лицензии, изменения цены и стоков продления лицензии. Все доработки, переработки и изменения функционала не входят в стоимость модуля и оплачиваются отдельно по письменной договоренности с автором.  
      Тип распространения:
      Как есть Добавил Leingard Добавлено 15.04.2019 Категория Отчеты Системные требования PHP 5.6+ Метод активации По запросу в ЛС
      По запросу на почту Ioncube Loader Нет OpenCart 3.0
      2.3
      2.1 ocStore 3.0
      2.3
      2.1 OpenCart.Pro, ocShop Opencart.pro 2.3
      Opencart.pro 2.1
      OcShop 2.0.3.х Обращение к серверу разработчика Да Старая цена 500  
    • By Sergei123321
      Здравствуйте, хотел спросить такую тему, кто-нибудь знает как добавить вот сюда ещё одно поле ? Версия ocStore 2.3.0.2.3, в связке с journal 2.16.8
      Ну то есть, что бы в админке было дополнительное поле "Наименование товара" и когда туда вставляешь текст, то оно выводится в то место которое я указал на картинке
       
      Очень это нужно, заранее спасибо!!!

  • Recently Browsing   0 members

    No registered users viewing this page.

×

Important Information

On our site, cookies are used and personal data is processed to improve the user interface. To find out what and what personal data we are processing, please go to the link. If you click "I agree," it means that you understand and accept all the conditions specified in this Privacy Notice.