Помощь Поддержка или помощь c Prestashop - 2 часть

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

советую мини-книгу:
почитал книгу. неплохая . Но мне показалось по тексту первых глав что теперь программировать могут все . как то сам всплыл в сознание слоган "По колена в коде" ).
может там дальше что интересней по теме. . .
Хотя для юных умов это то что нужно , не надо столько экономистов и юристов с высшим образованием в Украине.
Но это только мое субъективное мнение и Offtop )
 
День добрый, а есть ли какое-нибудь решение или модуль, который позволяет товары, которые включены, но не доступны для покупки ставить в конец списка на странице категории вне зависимости от сортировки
Для просмотра ссылки Войди или Зарегистрируйся
 
как решить проблему с пагинацией для производителей? куда прописать rel=canonical?
 
День добрый! Есть возможность в престе на миниатюры категорий генерировать картинки-заглушки с надписью категории, если картинка не установлена? Вместо существующего "Нет фото".
 
Всем привет ребята:). помогите сменить иконку от шаблона "панда" может кто сталкивался? на моб: телефоне тоже эта иконка
 

Вложения

  • 2017-09-07_17-02-47.png
    2017-09-07_17-02-47.png
    15,9 KB · Просмотры: 11
  • 2017-09-07_17-09-00.png
    2017-09-07_17-09-00.png
    494,9 KB · Просмотры: 10
Всем привет ребята:). помогите сменить иконку от шаблона "панда" может кто сталкивался? на моб: телефоне тоже эта иконка
это картинки для и-ось, меняются в эдиторе темы
 
что именно не получается?
В Характеристиках товара внёс характеристику с названием "(filter) Мощность, кВт".
Задумка такая: заполнить характеристику в каждом товаре, но на странице товара её не показывать. Она будет выводиться только в Фильтре подбора в Категории.

Редактирую /classes/Product.php
В условии выборки WHERE добавляю AND fl.name NOT REGEXP ".*(filter).*", чтобы исключить все х-ки, содержащие (filter). Но она всё-равно выводится у товара. А если этот же запрос делаю напрямую в базе MySQL, то всё ок...

Не могу разобраться что я делаю не так?

PHP:
    public static function getFrontFeaturesStatic($id_lang, $id_product)
    {
        if (!Feature::isFeatureActive()) {
            return array();
        }
        if (!array_key_exists($id_product.'-'.$id_lang, self::$_frontFeaturesCache)) {
            self::$_frontFeaturesCache[$id_product.'-'.$id_lang] = Db::getInstance(_PS_USE_SQL_SLAVE_)->executeS('
                SELECT name, value, pf.id_feature
                FROM '._DB_PREFIX_.'feature_product pf
                LEFT JOIN '._DB_PREFIX_.'feature_lang fl ON (fl.id_feature = pf.id_feature AND fl.id_lang = '.(int)$id_lang.')
                LEFT JOIN '._DB_PREFIX_.'feature_value_lang fvl ON (fvl.id_feature_value = pf.id_feature_value AND fvl.id_lang = '.(int)$id_lang.')
                LEFT JOIN '._DB_PREFIX_.'feature f ON (f.id_feature = pf.id_feature AND fl.id_lang = '.(int)$id_lang.')
                '.Shop::addSqlAssociation('feature', 'f').'
                WHERE pf.id_product = '.(int)$id_product.' AND fl.name NOT REGEXP ".*(filter).*"
                ORDER BY f.position ASC'
            );
        }
        return self::$_frontFeaturesCache[$id_product.'-'.$id_lang];
    }
<-------------- добавлено через 11879 сек. -------------->
зачем лезть в ядро сайта, если такие проверки на уровне вывода в файле шаблона вполне эффективно решаются?

в данном случае так можно по примеру решить задачу:

Код:
{foreach from=$features item=feature}
{if !(isset($feature.name)&&($feature.name=='(filter) Мощность, кВт'))}
<tr class="{cycle values="odd,even"}">
{if isset($feature.value)}
<td>{$feature.name|escape:'html':'UTF-8'}</td>
<td>{$feature.value|escape:'html':'UTF-8'}</td>
{/if}
</tr>                  
{/if}                  
{/foreach}
На данном этапе я именно так и сделал. Но в примере я привёл 1 характеристику, а на самом деле их кол-во измеряется несколькими десятками.
Менеджер может добавить ещё несколько и забудет предупредить программиста...
Хотелось обойтись "малой кровью" и отфильтровать по маске на этапе выборки из базы и всё положить в /override/.
 
После очередного обновления возникла ошибка, на панели управления пульт перестал показывать реальные значения, живет своей жизнью, то меньше показывает значения, то больше.
Как можно восстановить нормальную работу пульта?
 

Вложения

  • screen 2017-09-09 в 16.47.33.jpg
    screen 2017-09-09 в 16.47.33.jpg
    55,5 KB · Просмотры: 13
Помогите! Уже который день бьюсь и безрезультатно. Ищу функцию в *.php , которая формирует массив для дальнейшего выводы в шаблоне


что именно не получается?

в Престе не идеальная, но вполне логичная для понимания модель используется:
Для просмотра ссылки Войди или Зарегистрируйся




в Престе 1.6 выборка из базы данных находится в соответствующем классе:

/classes/Product.php

public function getFrontFeatures($id_lang)
public static function getFrontFeaturesStatic($id_lang, $id_product)

и т.д.




формирование массива - в контроллере

/controllers/front/ProductController.php


public function initContent()
...
'features' => $this->product->getFrontFeatures($this->context->language->id),
...



соответственно можно или в функции править или прямо в контроллеле
<-------------- добавлено через 23632 сек. -------------->
В Характеристиках товара внёс характеристику с названием "(filter) Мощность, кВт".
Задумка такая: заполнить характеристику в каждом товаре, но на странице товара её не показывать. Она будет выводиться только в Фильтре подбора в Категории.

Редактирую /classes/Product.php
В условии выборки WHERE добавляю AND fl.name NOT REGEXP ".*(filter).*", чтобы исключить все х-ки, содержащие (filter). Но она всё-равно выводится у товара. А если этот же запрос делаю напрямую в базе MySQL, то всё ок...

Не могу разобраться что я делаю не так?

PHP:
    public static function getFrontFeaturesStatic($id_lang, $id_product)
    {
        if (!Feature::isFeatureActive()) {
            return array();
        }
        if (!array_key_exists($id_product.'-'.$id_lang, self::$_frontFeaturesCache)) {
            self::$_frontFeaturesCache[$id_product.'-'.$id_lang] = Db::getInstance(_PS_USE_SQL_SLAVE_)->executeS('
                SELECT name, value, pf.id_feature
                FROM '._DB_PREFIX_.'feature_product pf
                LEFT JOIN '._DB_PREFIX_.'feature_lang fl ON (fl.id_feature = pf.id_feature AND fl.id_lang = '.(int)$id_lang.')
                LEFT JOIN '._DB_PREFIX_.'feature_value_lang fvl ON (fvl.id_feature_value = pf.id_feature_value AND fvl.id_lang = '.(int)$id_lang.')
                LEFT JOIN '._DB_PREFIX_.'feature f ON (f.id_feature = pf.id_feature AND fl.id_lang = '.(int)$id_lang.')
                '.Shop::addSqlAssociation('feature', 'f').'
                WHERE pf.id_product = '.(int)$id_product.' AND fl.name NOT REGEXP ".*(filter).*"
                ORDER BY f.position ASC'
            );
        }
        return self::$_frontFeaturesCache[$id_product.'-'.$id_lang];
    }


зачем лезть в ядро сайта, если такие проверки на уровне вывода в файле шаблона вполне эффективно решаются?

в данном случае так можно по примеру решить задачу:

Код:
{foreach from=$features item=feature}
{if !(isset($feature.name)&&($feature.name=='(filter) Мощность, кВт'))}
<tr class="{cycle values="odd,even"}">
{if isset($feature.value)}
<td>{$feature.name|escape:'html':'UTF-8'}</td>
<td>{$feature.value|escape:'html':'UTF-8'}</td>
{/if}
</tr>                 
{/if}                 
{/foreach}
<-------------- добавлено через 35777 сек. -------------->
В Характеристиках товара внёс характеристику с названием "(filter) Мощность, кВт".
Задумка такая: заполнить характеристику в каждом товаре, но на странице товара её не показывать. Она будет выводиться только в Фильтре подбора в Категории.

Редактирую /classes/Product.php
В условии выборки WHERE добавляю AND fl.name NOT REGEXP ".*(filter).*", чтобы исключить все х-ки, содержащие (filter). Но она всё-равно выводится у товара. А если этот же запрос делаю напрямую в базе MySQL, то всё ок...

Не могу разобраться что я делаю не так?

PHP:
    public static function getFrontFeaturesStatic($id_lang, $id_product)
    {
        if (!Feature::isFeatureActive()) {
            return array();
        }
        if (!array_key_exists($id_product.'-'.$id_lang, self::$_frontFeaturesCache)) {
            self::$_frontFeaturesCache[$id_product.'-'.$id_lang] = Db::getInstance(_PS_USE_SQL_SLAVE_)->executeS('
                SELECT name, value, pf.id_feature
                FROM '._DB_PREFIX_.'feature_product pf
                LEFT JOIN '._DB_PREFIX_.'feature_lang fl ON (fl.id_feature = pf.id_feature AND fl.id_lang = '.(int)$id_lang.')
                LEFT JOIN '._DB_PREFIX_.'feature_value_lang fvl ON (fvl.id_feature_value = pf.id_feature_value AND fvl.id_lang = '.(int)$id_lang.')
                LEFT JOIN '._DB_PREFIX_.'feature f ON (f.id_feature = pf.id_feature AND fl.id_lang = '.(int)$id_lang.')
                '.Shop::addSqlAssociation('feature', 'f').'
                WHERE pf.id_product = '.(int)$id_product.' AND fl.name NOT REGEXP ".*(filter).*"
                ORDER BY f.position ASC'
            );
        }
        return self::$_frontFeaturesCache[$id_product.'-'.$id_lang];
    }
<-------------- добавлено через 11879 сек. -------------->

На данном этапе я именно так и сделал. Но в примере я привёл 1 характеристику, а на самом деле их кол-во измеряется несколькими десятками.
Менеджер может добавить ещё несколько и забудет предупредить программиста...
Хотелось обойтись "малой кровью" и отфильтровать по маске на этапе выборки из базы и всё положить в /override/.

первое правило работы с опенсорс CMS: если ты не разрабатываешь ядро - не трогай ядро, мало ли что в будущем туда напичкают или пофиксят разработчики

поэтому в 1.6 можно вполне функциями smarty Для просмотра ссылки Войди или Зарегистрируйся можно много чего полезного при выводе на экран сделать, в данном случае просто проверку на вхождение твоего "секретного" слова-ключа в название характеристики:

Код:
{foreach from=$features item=feature}
{if $feature.name|strpos:"(filter)" === false}
                    <tr class="{cycle values="odd,even"}">
                        {if isset($feature.value)}
                        <td>{$feature.name|escape:'html':'UTF-8'}</td>
                        <td>{$feature.value|escape:'html':'UTF-8'}</td>
                        {/if}
                    </tr>                 
{/if}                 
{/foreach}



можно и в запросе к базе выбирать то, что нужно, только регулярку лучше не использовать и нужно играться с кавычками
Код:
AND fl.name NOT LIKE '%(filter)%'
<-------------- добавлено через 26265 сек. -------------->
После очередного обновления возникла ошибка, на панели управления пульт перестал показывать реальные значения, живет своей жизнью, то меньше показывает значения, то больше.
Как можно восстановить нормальную работу пульта?

если разговор про
1.6.1.17
то там есть баги
Для просмотра ссылки Войди или Зарегистрируйся

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