такой вопрос как можно сделать стилизацию сообщения когда того нет в наличии - что бы цвет текста был красным предзаказ - цвет текста был оранжевый catalog/view/theme/oct_feelmart/template/product/product.twig вот код который отвечает за вывод этих сообщений PHP: <li class="fm-product-left-top-info-item fm-product-left-info-item-stock{% if out_of_stock %} fm-out-of-stock{% endif %}">{{ text_stock }} <span class="fm-product-left-top-info-is">{{ stock }}</span></li> но в текстовых файлах не нашел подскажите как можно стилизовать и добавить перед текстом иконку если пред заказ то вот так вот выводить
Думаю использование псевдо элемента ::before это то, что вам поможет. Ссылка по теме: https://krasimirtsonev.com/blog/article/CSS-before-and-after-pseudo-elements-in-practice
получается эта строка кода - тянет названия из админки из Список состояния на складе. как можно это изменить?
Как можно изменить что? Если текст надписи - то лучше найти откуда она берется (языковые файлы или таблица в базе данных и там подправить). Конечно возможно поменять текст и в шаблоне используя функцию replace https://twig.symfony.com/doc/3.x/filters/replace.html. Но мне кажется это неправильный подход. Если оформление - то используйте возможности CSS. Если товара нет в наличии то у элемента будет стиль fm-out-of-stock.
посмотрите, выводится ли в контроллере переменная: Код: $data['stock_status_id'] = $product_info['stock_status_id']; если нет, то выведите где то в контексте PHP: if ($product_info) { потом подсмотрите в "Настрйки --> Локализация --> Состояние на складе" номер stock_status_id состояния "Нет в наличии" (обычно это 5) теперь в самом твиг файле, сделайте небольшое сравнение: HTML: <li class="fm-product-left-top-info-item fm-product-left-info-item-stock{% if stock_status_id == 5 %} fm-out-of-stock{% endif %}"> ну и стили соотв. добавьте для класса: Код: fm-out-of-stock
Полагаю, что в контроллере уже есть проверки на наличие товара на складе и даже вывод локализованной строки для соответствующего состояния наличия: Код: <li class="fm-product-left-top-info-item fm-product-left-info-item-stock{% if out_of_stock %} fm-out-of-stock{% endif %}">{{ text_stock }} <span class="fm-product-left-top-info-is">{{ stock }}</span></li> Если на на странице выводятся разные строки товаров, которые есть на складе и отсутствуют, то остается только подправить CSS для вывода соответствующей иконки и цвета надписи. А вот для статуса предзаказ вероятно потребуется модификация контроллера как предложил Васо.
в контроллере вот такой вот код есть Код: if ($product_info['quantity'] <= 0) { $data['stock'] = $product_info['stock_status']; } elseif ($this->config->get('config_stock_display')) { $data['stock'] = $product_info['quantity']; } else { $data['stock'] = $this->language->get('text_instock'); } но если я делаю так как вы написали то вообще ничего не происходит просто остается пустое поле
Этот фрагмент заполняет значение поля stock, которое в шаблоне тоже выводится: <span class="fm-product-left-top-info-is">{{ stock }}</span> В начале темы вы написали, что требуется стилизовать надписи и добавить иконки. Я правильно понимаю, что надписи "Нет в наличии" и "Предзаказ" на сайте у вас сейчас выводятся?
Выводятся и стилизуются надписи без вмешательства (в контроллер, текстовый файл и сам файл вывода) это "Нет в наличии" и "В наличии" --- Добавлено, 2 апр 2021 --- нашел вот такое вот решение вот такое вот в контроллере прописывать PHP: if ($product_info['quantity'] <= 0) { $data['stock'] = $this->language->get('text_outstock'); } elseif ($this->config->get('config_stock_display')) { $data['stock'] = $product_info['quantity']; } elseif ($product_info['quantity'] >= 1 AND $product_info['quantity'] <= 3) { $data['stock'] = $this->language->get('text_minstock'); } else { $data['stock'] = $this->language->get('text_instock'); } ниже в массиве: $data['products'][] = array( 'stock' => $data['stock'], еще такой вопрос можно ли прописать вот в этой строке что бы когда в поле колличество было число с минусом как пример ( -10 до -1000 ) то автоматически проставлялось "Предзаказ" но никак не могу разобраться с выводом HTML: <li class="fm-product-left-top-info-item fm-product-left-info-item-stock{% if out_of_stock %} fm-out-of-stock{% endif %}">{{ text_stock }} <span class="fm-product-left-top-info-is">{{ stock }}</span></li> что и как здесь прописать
алгоритм очень простой, просто следуй по всем шагам и получиш результат: 0. найдите метод в модели товара (catalog\model\catalog\product.php): PHP: public function getProduct($product_id) { 1. там находим фрагмент в коде: PHP: 'stock_status' => $query->row['stock_status'], 2. после него добавляем: PHP: 'stock_status_id' => $query->row['stock_status_id'], 3. сохраняем, закрываем. 4. в контроллере товара, находим участок кода (catalog\controller\product\product.php): PHP: if ($product_info['quantity'] <= 0) { 5. ПЕРЕД ним добавляем: PHP: $data['stock_status_id'] = $product_info['stock_status_id']; 6. сохраняем, закрываем. 7. открываем представление (въюшку) твиг-файла (catalog\view\theme\ВАША_ТЕМА\template\product\product.twig): 8. меняем этот код: HTML: <li class="fm-product-left-top-info-item fm-product-left-info-item-stock{% if out_of_stock %} fm-out-of-stock{% endif %}">{{ text_stock }} <span class="fm-product-left-top-info-is">{{ stock }}</span></li> на вот этот: HTML: <li class="fm-product-left-top-info-item fm-product-left-info-item-stock{% if stock_status_id == 5 %} fm-out-of-stock{% endif %}">{{ text_stock }} <span class="fm-product-left-top-info-is">{{ stock }}</span></li> 9. сохраняем, закрываем, наслаждаемся.
Спасибо за подробное описание. есть нюанс - сделал все как вы написали. но статус "В наличии" и "Нет в наличии" по стилям абсолютно одинаковы можете есть возможность прописать разные условия с добавление класса к примеру это - "Нет в наличии" {% if stock_status_id == 5 %} fm-out-of-stock есть "в наличии" {% if stock_status_id == 7 %} fm-in-stock если "предзаказ" {% if stock_status_id == 8 %} fm-pre-order-stock
есть, вы разве не экспериментировали ? на данный момент PHP: {% if out_of_stock %} зависит непосредственно от кол-ва товара, а нет от статуса товара. который вы к админке прикрутили, если вам нужно конкретно под кол-во сделать логическую операцию, тогда нужно в контроллере товара реализовать новый блок (или отредактировать со статусом): PHP: if ($product_info['quantity'] <= 0) { $data['stock_style'] = 'fm-out-of-stock'; } elseif ($product_info['stock_status_id'] == 8) { $data['stock_style'] = 'fm-pre-order-stock'; } else { $data['stock_style'] = 'fm-in-stock'; } а в твиг-файле вывести вместо: HTML: <li class="fm-product-left-top-info-item fm-product-left-info-item-stock{% if out_of_stock %} fm-out-of-stock{% endif %}">{{ text_stock }} <span class="fm-product-left-top-info-is">{{ stock }}</span></li> вот такую вот разметку с переменной: HTML: <li class="fm-product-left-top-info-item fm-product-left-info-item-stock {{ stock_style }}">{{ text_stock }} <span class="fm-product-left-top-info-is">{{ stock }}</span></li>
получилось реализовать данную задумку следующим образом (благодаря советам Baco ) получилась вот так catalog/controller/product/product.php вместо этого кода PHP: if ($product_info['quantity'] <= 0) { $data['stock'] = $product_info['stock_status']; } elseif ($this->config->get('config_stock_display')) { $data['stock'] = $product_info['quantity']; } else { $data['stock'] = $this->language->get('text_instock'); } вот этот PHP: if ($product_info['quantity'] == 0) { $data['stock'] = $this->language->get('text_outstock'); $data['stock_style'] = 'fm-outstock'; } elseif ($product_info['quantity'] == -100 AND $product_info['stock_status_id'] == 8) { $data['stock'] = $this->language->get('text_preorderstock'); $data['stock_style'] = 'fm-preorderstock'; } elseif ($this->config->get('config_stock_display')) { $data['stock'] = $product_info['quantity']; } else { $data['stock'] = $this->language->get('text_instock'); $data['stock_style'] = 'fm-instock';} catalog/language/ru-ru/product/product.php HTML: $_['text_instock'] = '<i class="far fa-check-circle"></i>В наличии'; $_['text_outstock'] = '<i class="far fa-times-circle"></i>Нет в наличии'; $_['text_preorderstock'] = '<i class="fas fa-truck-loading"></i>Предзаказ'; catalog/view/theme/*/template/product/product.twig заменил PHP: <li class="fm-product-left-top-info-item fm-product-left-info-item-stock{% if out_of_stock %} fm-out-of-stock{% endif %}">{{ text_stock }} <span class="fm-product-left-top-info-is">{{ stock }}</span></li> на PHP: <li class="fm-product-left-top-info-item fm-product-left-info-item-stock {{ stock_style }}">{{ text_stock }} <span class="fm-product-left-top-info-is">{{ stock }}</span></li>