Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 18.10.2020, 14:35
Новичок на форуме
Отправить личное сообщение для For_que Посмотреть профиль Найти все сообщения от For_que
 
Регистрация: 18.10.2020
Сообщений: 3

Как вывести уведомление на странице при определенном условии?
Добрый день!

Подскажите, пожалуйста, как с помощью скрипта выводить на странице информационную строчку при определенном условии?

Например, на сайте есть позиции, у которых вместо цены стоит значение "Цена по запросу*". Нужно сделать так, чтобы при условии, если в заказе есть такие позиции, появлялось информационное уведомление для клиента (в виде обычной строкой).

Пример как должно быть во вложении.

Скажу сразу, что в JS абсолютный новичок, только постигаю азы, а сделать это необходимо как можно скорее

Заранее спасибо за помощь!
Изображения:
Тип файла: jpg Screenshot_2.jpg (47.4 Кб, 7 просмотров)
Ответить с цитированием
  #2 (permalink)  
Старый 18.10.2020, 15:29
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

Opencart?
Ответить с цитированием
  #3 (permalink)  
Старый 18.10.2020, 17:49
Новичок на форуме
Отправить личное сообщение для For_que Посмотреть профиль Найти все сообщения от For_que
 
Регистрация: 18.10.2020
Сообщений: 3

Сообщение от laimas Посмотреть сообщение
Opencart?
Да, он самый.
Ответить с цитированием
  #4 (permalink)  
Старый 18.10.2020, 19:30
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

Сообщение от For_que
Да, он самый.
Можно добавить код в common.js, но стоит установить какую либо новую тему, которая использует свой модифицированный common.js, и добавленный код работать не будет.

Можно в шаблон страницы соответствующей добавить такой код, но исходники нельзя трогать, так как чей либо модификатор может и не отработать корректно.

Учитывая все это и то, что JS тут боком, и это должно быть заботой сервера, нужно написать модификатор, который модифицирует контроллер, шаблон и языковый файл заказа, а ведь такие же цены будут отображаться и в корзине, поэтому и ее контроллер, шаблон и языковый файл нужно тоже модифицировать. После чего поместить файл модификатора в каталог system и обновить модификаторы в админке. Теперь все будет работать и ничему не мешать.
Ответить с цитированием
  #5 (permalink)  
Старый 18.10.2020, 20:27
Новичок на форуме
Отправить личное сообщение для For_que Посмотреть профиль Найти все сообщения от For_que
 
Регистрация: 18.10.2020
Сообщений: 3

@laimas спасибо за ответ!

Как вы описали это правильно, но нам нужен, можно сказать, костыль. Код планируется вставить только в шаблон чекаута. Никаких модификаций больше с сайтом не планировалось.

Нам удалось это сделать с помощью php метода:
<?php if ($product['price'] =='0.00 р.'){ echo '*ТЕКСТ'; }?>,
но он срабатывает не совсем правильно. Хватает значение последнего товара в цикле и, если этот товар с ценой, то уведомление не появляется.

Посоветовали это сделать, прописав код скрипта JS в шаблоне, но вот какой код - вот в чем вопрос.
Как я понимаю, должно быть что-то вроде: Если на текущей странице присутствует "ВОТ ЭТОТ ТЕКСТ", то в определенном месте вывести "вот эту" надпись.

Логика, в целом понятна, а вот знаний JS не хватает, чтобы это реализовать .
Ответить с цитированием
  #6 (permalink)  
Старый 18.10.2020, 20:59
Аватар для voraa
Профессор
Отправить личное сообщение для voraa Посмотреть профиль Найти все сообщения от voraa
 
Регистрация: 03.02.2020
Сообщений: 2,704

Сообщение от 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.
Ответить с цитированием
  #7 (permalink)  
Старый 18.10.2020, 21:00
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

Сообщение от For_que
Код планируется вставить только в шаблон чекаута
Нам удалось это сделать с помощью php метода
А подумать, прежде чем костылять? Не хотите делать как это полагается, костыляйте, но если завтра захочется/потребуется кроме русского поддержку другого языка?

Сообщение от For_que
Никаких модификаций больше с сайтом не планировалось.
Модификаторы, это то, что нужно сесть и почитать, в сети найдете, не так это и сложно.
А вы сейчас можете зарекаться, что вам ничего не надо, завтра же прицепите какую либо хню по способу оплаты или еще чего, что точно затрагивает продажи, тогда что?

Открывайте код контроллера заказа, в нем найдете формирование массива товаров для страницы заказа. Вот там как раз и будет условие, если цены нет, то вместо нее из язкового файла будет браться значение переменной определяющей текст "Запрос цены". Нужно через модификатор добавить здесь переменную, например:

$data['noprice'] = '';
//далее в формировании массива, если есть товар без цены, то
$data['noprice'] = $this->language->get('text_noprice');


где 'text_noprice', это текст который вы хотите показать "В вашей корзине ....", который также через модификатор в языковый файл добавить под этой переменной.

В файл шаблона через модификатор, в конце таблицы с товарами добавить {{ noprice }}

Вот как надо делать, а не слушать советчиков малограмотных, и самому не делать через попу, чтобы потом не жалеть.

Последний раз редактировалось laimas, 18.10.2020 в 21:09.
Ответить с цитированием
  #8 (permalink)  
Старый 18.10.2020, 21:02
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

Сообщение от voraa
Ну если условие только такое, то в head поместить такой скрипт
Не поместите вы так скрипта, в этой CMS, как и в других подобных, есть справила добавления скриптов, а подобные самописки просто не выводятся на страницу.
Ответить с цитированием
  #9 (permalink)  
Старый 18.10.2020, 21:38
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

Файл модификатора, это обычный 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.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как сбросить данные формы только при ее отправке? sadovod Общие вопросы Javascript 1 11.04.2020 10:21
Как создать присвоить класс div при множественном условии admin'ko Элементы интерфейса 1 26.10.2019 06:35
Заставить работать скрипт для навигации по странице при переходе извне geol.post jQuery 5 29.10.2015 13:35
Как сделать срабатывание вызова скрипта Vivus при определенном классе родителя? Арсений JustPuk Элементы интерфейса 16 08.08.2015 19:44
Как восстановить инфу из sessionStorage при выполнении определенных условий? ligisayan jQuery 1 26.06.2015 09:34