Префикс H1 в карточке товара для определенной категории

Автор mac, 31 марта 2018, 10:08:40

« назад - далее »

mac

Здравствуйте!

Престашоп 1.7
Требуется задать дополнение к названию товара в его карточке для определенной категории - каждой свое.
Сейчас строка вывода Н1 выглядит так:
<h1 {if $sttheme.google_rich_snippets} itemprop="name" {/if} class="product_name">{block name='page_title'}{$product.name}{/block}</h1>

Вот что хочется в итоге: Если категория 22 то добавить в начало Н1 фразу "Эликсир молодости" + стандартное название.

Еще момент - не знаю с какой стороны это рассматривать: либо жестко задать для всех товаров из этой категории как то, либо делать проверку у всех товаров в карточке. Это я думаю только о том, чтобы не плодить лишние запросы к БД (ну вернее - как их плодить правильно, с точки зрения моей задачи)

Напишите с примером пожалуйста, в коде не силен...
thx!

PrestaMan

Добавить к названию товара можно какое-то значение, которое уже определено. Вот так добавить имя категории к названию
{$product.name} - {$product.category_name}
Эксперт Prestashop - решения всех проблем, написание модулей, создание тем для интернет-магазинов под Prestashop.
Эксперт Magento - создам сайт на Magento, программирование кастомных модулей для Magento, кастомизация тем Magento.
Лучшие цены!!!

mac

#2
Понятно, но ведь категория как правило - это множественное число, а требуется в единственном.
И еще момент - хотелось что бы и для подкатегорий выводился тот же самый префикс, например:
- Есть главная категория (Куртки кожанные) - и в ней куча подкатегорий (Летние, зимние, демесезонные и т.п.)
- При переходе в любую из них то есть и главную и подкатегорию: у товара к Н1 добавилась определенная мной фраза и на выходе получилось бы так - Куртка натуральная кожа + {$product.name}

Но только в карточке товара, чтбы в листинге не схапать фильтр за переспам.

upd: вот еще мысль пришла - если можно использовать какое то уже определенное значение - то мб можно упользовать что то из карточки товара, что уже есть но как правило не используется... типа ISBN или создать новое "состояние товара" и его уже как то зацепить в выводе Н1?

PrestaMan

Чтобы для всей ветки категорий
// У категории "Куртки кожанные" id=7
{if $product.id_category_default == '7'}Куртка натуральная кожа{/if}
Эксперт Prestashop - решения всех проблем, написание модулей, создание тем для интернет-магазинов под Prestashop.
Эксперт Magento - создам сайт на Magento, программирование кастомных модулей для Magento, кастомизация тем Magento.
Лучшие цены!!!

mac

#4
а на такой подход как вы смотрите?
Цитироватьupd: вот еще мысль пришла - если можно использовать какое то уже определенное значение - то мб можно упользовать что то из карточки товара, что уже есть но как правило не используется... типа ISBN, UPS или создать новое "состояние товара" и его уже как то зацепить в выводе Н1?

Я думаю это более управляемое свойство товара и задать его можно массово для товаров которые нужны...

Вот могу UPC задать, осталось только выяснить как его внедрить в Н1, и есть ли у него какая то валидация - которая может навредить в будующем.

PrestaMan

Можно брать любое неиспользуемое поле у товара и в нем сохранять текст, потом эту переменную вывести в product.tpl.
Эксперт Prestashop - решения всех проблем, написание модулей, создание тем для интернет-магазинов под Prestashop.
Эксперт Magento - создам сайт на Magento, программирование кастомных модулей для Magento, кастомизация тем Magento.
Лучшие цены!!!

mac

#6
Подскажите пожалуйста - как переопределить валидацию поля UPC штрихкода. Потому что текстовое значение не хочет принимать.
И еще вопрос, массово я могу переопределить UPC и EAN - какой из них лучше задействовать для моего случая, чтобы в будущем не было мучительно больно. Например если вдруг потребуется штрихкодирование у товаров, например для 1С или других систем.

upd: по штрихкодам выяснил что EAN лучше оставить - он может быть востребованным. Осталось выяснить как снять валидацию с UPC.

нашел UPC в validate.php и закоментировал
/**
     * Check for barcode validity (UPC)
     *
     * @param string $upc Barcode to validate
     * @return bool Validity is ok or not
     */
    /*public static function isUpc($upc)
    {
        return !$upc || preg_match('/^[0-9]{0,12}$/', $upc);
    }*/


И все равно не дает вписать символы, не русским не английским...

PrestaMan

Комментировать метод нельзя, он используется при созранении товара. Измените значение, которое возвращает этот метод.
return true;
Эксперт Prestashop - решения всех проблем, написание модулей, создание тем для интернет-магазинов под Prestashop.
Эксперт Magento - создам сайт на Magento, программирование кастомных модулей для Magento, кастомизация тем Magento.
Лучшие цены!!!

mac

#8
Извините за нубские вопросы )) но я чтобы уж на 100%
заменить эту строку целиком:
return !$upc || preg_match('/^[0-9]{0,12}$/', $upc);
на эту:
return true;
Верно?
И как потом использовать эту переменную в H1 для подстановки.
upd: поменял строки как написал я - в итоге: This value is not valid.

PrestaMan

1 верно, заменить строчку
2 {if $product.id_category_default == '7'}{$product.upc}{/if}
Эксперт Prestashop - решения всех проблем, написание модулей, создание тем для интернет-магазинов под Prestashop.
Эксперт Magento - создам сайт на Magento, программирование кастомных модулей для Magento, кастомизация тем Magento.
Лучшие цены!!!

mac

#10
со вторым пунктом все пучком - подставляет в Н1 значение переменной даже без условия, потому что переменная принадлежит товару.

а вот с валидацией всю голову сломал уже, уже и на бурж форумах почитал и сам документацию порыл, понимаю что близко, но не хватает знаний - чтобы заработало.

Итак, вот какая бяка:
Не работает отмена валидации для это UPC (или мб она есть где то еще, но найти пока не удалось) (или у меня не весь кэш вычищен - а где его искать я не пойму)

Вот что я уже сделал:
1. Пробовал ваш вариант с заменой строки на - return true; (после чистил кеш смарти через админку, при этом кеш отключен и включена принудительная перекомпиляция) - не работает, можно написать в поле только цифры и только 12
2. Пробовал вот такой вариант регулярного выражения - return !$upc || preg_match('/^[а-яА-ЯёЁa-zA-Z0-9]{0,40}$/', $upc);  - тоже самое, не хочет и опять только цифры и только 12

3. На бурже нарыл как добавить символов в бд. сделал - теперь (11 upc varchar(40) utf8_general_ci Да NULL) значение 40, как видно добавил символов и в регулярке тоже в validate.php
4. Нашел так же что еще в одном месте требуется добавить символов - теперь ('upc' =>  array('type' => self::TYPE_STRING, 'validate' => 'isUpc', 'size' => 40), в /classes/Product.php
5. Пишут что задать размер нужно еще в /www/admin/themes/default/template/controllers/products/informations.tpl - но в 1.7 я такого файла не нашел

После всех моих поползновений так ничего пока и не вышло - по прежнему можно ввести только цифры и только 12, на этом я сдался... время третий час ночи ))

Подскажите куда еще капнуть или что почитать, голова уже не варит.

PrestaMan

Вам бы сначало теорию почитать, хотя бы начальные знания по php. Потом легче будет что-то сделать. Учится php на prestashop сложно.
1. return true работает, проверка пропускает любые символы
Это изменение только для проверки вводимых символов.
2. Ограничения по количесву символов задаются в других файлах и в базе данных.
Если уж меняете varchar, то ставьте 64 или 128.
Все правильно пишут, менять нужно в базе данных, в классе, в контроллере, в шаблоне и в javascript (некоторые поля проверяются в javascript функциях)
Эксперт Prestashop - решения всех проблем, написание модулей, создание тем для интернет-магазинов под Prestashop.
Эксперт Magento - создам сайт на Magento, программирование кастомных модулей для Magento, кастомизация тем Magento.
Лучшие цены!!!

mac

Цитата: PrestaMan от 01 апреля 2018, 11:22:08
Вам бы сначало теорию почитать, хотя бы начальные знания по php. Потом легче будет что-то сделать. Учится php на prestashop сложно.
1. return true работает, проверка пропускает любые символы
Это изменение только для проверки вводимых символов.
2. Ограничения по количесву символов задаются в других файлах и в базе данных.
Если уж меняете varchar, то ставьте 64 или 128.
Все правильно пишут, менять нужно в базе данных, в классе, в контроллере, в шаблоне и в javascript (некоторые поля проверяются в javascript функциях)

Да уж, на престашопе точно не научишся))

1. Может быть я не так что то делаю?? Но вот не заводится у меня ;(
вот скрин моего validate.php
http://prntscr.com/iz9epr

Сделал все как вы сказали, но в итоге в админке все равно ошибка при заполнении поля буквами - http://prntscr.com/iz9ffj

2. Значение 40 везде поменял на 64
Спасибо

tigran

Проверка еще и в контроллере AdminProductsController.php, тоже нужно удалить
'upc' => 'isUpc'

mac

Цитата: tigran от 02 апреля 2018, 11:58:51
Проверка еще и в контроллере AdminProductsController.php, тоже нужно удалить
'upc' => 'isUpc'

Благодарю Тигран!
Теперь тему как мануал можно использовать по управлению составными Заголовками ))
Работает отменно и управляется массово. Никакого тебе переспама ключами в листингах и настраиваемый заголовок Н1 для любых товаров из админки.
Прям то что доктор прописал.
Большое всем спасибо!