Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Как вывести уведомление на странице при определенном условии? (https://javascript.ru/forum/misc/81195-kak-vyvesti-uvedomlenie-na-stranice-pri-opredelennom-uslovii.html)

For_que 18.10.2020 14:35

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

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

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

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

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

Заранее спасибо за помощь!

laimas 18.10.2020 15:29

Opencart?

For_que 18.10.2020 17:49

Цитата:

Сообщение от laimas (Сообщение 529916)
Opencart?

Да, он самый.

laimas 18.10.2020 19:30

Цитата:

Сообщение от For_que
Да, он самый.

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

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

Учитывая все это и то, что JS тут боком, и это должно быть заботой сервера, нужно написать модификатор, который модифицирует контроллер, шаблон и языковый файл заказа, а ведь такие же цены будут отображаться и в корзине, поэтому и ее контроллер, шаблон и языковый файл нужно тоже модифицировать. После чего поместить файл модификатора в каталог system и обновить модификаторы в админке. Теперь все будет работать и ничему не мешать.

For_que 18.10.2020 20:27

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

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

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

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

Логика, в целом понятна, а вот знаний JS не хватает, чтобы это реализовать :(.

voraa 18.10.2020 20:59

Цитата:

Сообщение от 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>

laimas 18.10.2020 21:00

Цитата:

Сообщение от For_que
Код планируется вставить только в шаблон чекаута
Нам удалось это сделать с помощью php метода

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

Цитата:

Сообщение от For_que
Никаких модификаций больше с сайтом не планировалось.

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

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

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


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

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

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

laimas 18.10.2020 21:02

Цитата:

Сообщение от voraa
Ну если условие только такое, то в head поместить такой скрипт

Не поместите вы так скрипта, в этой CMS, как и в других подобных, есть справила добавления скриптов, а подобные самописки просто не выводятся на страницу.

laimas 18.10.2020 21:38

Файл модификатора, это обычный 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, следовательно и шаблон с этим же именем, и файл языка, будут. Проверьте.


Часовой пояс GMT +3, время: 01:12.