18.10.2020, 14:35
|
Новичок на форуме
|
|
Регистрация: 18.10.2020
Сообщений: 3
|
|
Как вывести уведомление на странице при определенном условии?
Добрый день!
Подскажите, пожалуйста, как с помощью скрипта выводить на странице информационную строчку при определенном условии?
Например, на сайте есть позиции, у которых вместо цены стоит значение "Цена по запросу*". Нужно сделать так, чтобы при условии, если в заказе есть такие позиции, появлялось информационное уведомление для клиента (в виде обычной строкой).
Пример как должно быть во вложении.
Скажу сразу, что в JS абсолютный новичок, только постигаю азы, а сделать это необходимо как можно скорее
Заранее спасибо за помощь!
|
|
18.10.2020, 15:29
|
Профессор
|
|
Регистрация: 14.01.2015
Сообщений: 12,989
|
|
Opencart?
|
|
18.10.2020, 17:49
|
Новичок на форуме
|
|
Регистрация: 18.10.2020
Сообщений: 3
|
|
Сообщение от laimas
|
Opencart?
|
Да, он самый.
|
|
18.10.2020, 19:30
|
Профессор
|
|
Регистрация: 14.01.2015
Сообщений: 12,989
|
|
Сообщение от For_que
|
Да, он самый.
|
Можно добавить код в common.js, но стоит установить какую либо новую тему, которая использует свой модифицированный common.js, и добавленный код работать не будет.
Можно в шаблон страницы соответствующей добавить такой код, но исходники нельзя трогать, так как чей либо модификатор может и не отработать корректно.
Учитывая все это и то, что JS тут боком, и это должно быть заботой сервера, нужно написать модификатор, который модифицирует контроллер, шаблон и языковый файл заказа, а ведь такие же цены будут отображаться и в корзине, поэтому и ее контроллер, шаблон и языковый файл нужно тоже модифицировать. После чего поместить файл модификатора в каталог system и обновить модификаторы в админке. Теперь все будет работать и ничему не мешать.
|
|
18.10.2020, 20:27
|
Новичок на форуме
|
|
Регистрация: 18.10.2020
Сообщений: 3
|
|
@laimas спасибо за ответ!
Как вы описали это правильно, но нам нужен, можно сказать, костыль. Код планируется вставить только в шаблон чекаута. Никаких модификаций больше с сайтом не планировалось.
Нам удалось это сделать с помощью php метода:
<?php if ($product['price'] =='0.00 р.'){ echo '*ТЕКСТ'; }?>,
но он срабатывает не совсем правильно. Хватает значение последнего товара в цикле и, если этот товар с ценой, то уведомление не появляется.
Посоветовали это сделать, прописав код скрипта JS в шаблоне, но вот какой код - вот в чем вопрос.
Как я понимаю, должно быть что-то вроде: Если на текущей странице присутствует "ВОТ ЭТОТ ТЕКСТ", то в определенном месте вывести "вот эту" надпись.
Логика, в целом понятна, а вот знаний JS не хватает, чтобы это реализовать .
|
|
18.10.2020, 20:59
|
|
Профессор
|
|
Регистрация: 03.02.2020
Сообщений: 2,751
|
|
Сообщение от For_que
|
Как я понимаю, должно быть что-то вроде: Если на текущей странице присутствует "ВОТ ЭТОТ ТЕКСТ", то в определенном месте вывести "вот эту" надпись
|
Ну если условие только такое, то в head поместить такой скрипт
<script>
document.addEventListener('DOMContentLoaded', () => {
if (document.body.textContent.indexOf("ВОТ ЭТОТ ТЕКСТ") >= 0) {
let oprmest = document.getElementById('oprmest'); // Находим то "определенное место"
oprmest.innerHTML = "вот эта надпись";
}
})
</script>
Или заранее приготовить надпись, но пока невидимую
<div id='oprmest' style="display:none;">вот эта надпись</div>
А когда надо показывать
<script>
document.addEventListener('DOMContentLoaded', () => {
if (document.body.textContent.indexOf("ВОТ ЭТОТ ТЕКСТ") >= 0) {
let oprmest = document.getElementById('oprmest'); // Находим то "определенное место"
oprmest.style.display = 'block';
}
})
</script>
Последний раз редактировалось voraa, 18.10.2020 в 21:09.
|
|
18.10.2020, 21:00
|
Профессор
|
|
Регистрация: 14.01.2015
Сообщений: 12,989
|
|
Сообщение от For_que
|
Код планируется вставить только в шаблон чекаута
Нам удалось это сделать с помощью php метода
|
А подумать, прежде чем костылять? Не хотите делать как это полагается, костыляйте, но если завтра захочется/потребуется кроме русского поддержку другого языка?
Сообщение от For_que
|
Никаких модификаций больше с сайтом не планировалось.
|
Модификаторы, это то, что нужно сесть и почитать, в сети найдете, не так это и сложно.
А вы сейчас можете зарекаться, что вам ничего не надо, завтра же прицепите какую либо хню по способу оплаты или еще чего, что точно затрагивает продажи, тогда что?
Открывайте код контроллера заказа, в нем найдете формирование массива товаров для страницы заказа. Вот там как раз и будет условие, если цены нет, то вместо нее из язкового файла будет браться значение переменной определяющей текст "Запрос цены". Нужно через модификатор добавить здесь переменную, например:
$data['noprice'] = '';
//далее в формировании массива, если есть товар без цены, то
$data['noprice'] = $this->language->get('text_noprice');
где 'text_noprice', это текст который вы хотите показать "В вашей корзине ....", который также через модификатор в языковый файл добавить под этой переменной.
В файл шаблона через модификатор, в конце таблицы с товарами добавить {{ noprice }}
Вот как надо делать, а не слушать советчиков малограмотных, и самому не делать через попу, чтобы потом не жалеть.
Последний раз редактировалось laimas, 18.10.2020 в 21:09.
|
|
18.10.2020, 21:02
|
Профессор
|
|
Регистрация: 14.01.2015
Сообщений: 12,989
|
|
Сообщение от voraa
|
Ну если условие только такое, то в head поместить такой скрипт
|
Не поместите вы так скрипта, в этой CMS, как и в других подобных, есть справила добавления скриптов, а подобные самописки просто не выводятся на страницу.
|
|
18.10.2020, 21:38
|
Профессор
|
|
Регистрация: 14.01.2015
Сообщений: 12,989
|
|
Файл модификатора, это обычный xml-фал. Не составит труда его написать:
<?xml version="1.0" encoding="utf-8"?>
<modification>
<name>Add message</name>
<code>default</code>
<version>1.0</version>
<author>Main</author>
<!-- Добвление текста в языковый файл -->
<file path="catalog/language/ru-ru/checkout/checkout.php">
<operation error="skip">
<search>
<![CDATA[$_['column_total']]]>
</search>
<add position="after">
<![CDATA[$_['text_noprice'] = 'У вас в корзине есть ......';]]>
</add>
</operation>
</file>
</modification>
Сюда же добавляется и для шаблона, причем всех тем будет затронуто, для файлов <file path="catalog/view/theme/*/template/checkout/checkout.twig">, и для контроллера, своя секция <file></file>.
Если вы такое <?php if ($product['price'] =='0.00 р.'){ echo '*ТЕКСТ'; }?> вытворяете, то открыв страницу контроллера заказов, найдете место где нужно добавить ранее описанный код. То есть, объявить переменную пустую, а в цикле проверять, если есть товар без цены, определить вывод текста.
Ищите в сети описание файла модификатора, не сложно, разберетесь.
PS. Хотя, может и подзабыл, но вроде бы как вывод товаров, это контроллер confirm.php, следовательно и шаблон с этим же именем, и файл языка, будут. Проверьте.
Последний раз редактировалось laimas, 18.10.2020 в 21:45.
|
|
|
|