Автор Тема: Префикс H1 в карточке товара для определенной категории  (Прочитано 722 раз)

31 Март 2018, 10:08:40
  • Новичок
  • *
  • Сообщений: 37
  • Репутация: +1/-0
  • Сообщество PrestaShop
    • Просмотр профиля
Здравствуйте!

Престашоп 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!
31 Март 2018, 13:21:11
Ответ #1
  • Ветеран
  • *****
  • Сообщений: 22125
  • Репутация: +25303/-1
  • Prestashop - просто и эффективно
    • Просмотр профиля
Добавить к названию товара можно какое-то значение, которое уже определено. Вот так добавить имя категории к названию
{$product.name} - {$product.category_name}
Эксперт Prestashop - решения всех проблем, написание модулей, создание тем для интернет-магазинов под Prestashop.
Эксперт Magento - создам сайт на Magento, программирование кастомных модулей для Magento, кастомизация тем Magento.
Лучшие цены!!!
31 Март 2018, 13:31:01
Ответ #2
  • Новичок
  • *
  • Сообщений: 37
  • Репутация: +1/-0
  • Сообщество PrestaShop
    • Просмотр профиля
Понятно, но ведь категория как правило - это множественное число, а требуется в единственном.
И еще момент - хотелось что бы и для подкатегорий выводился тот же самый префикс, например:
- Есть главная категория (Куртки кожанные) - и в ней куча подкатегорий (Летние, зимние, демесезонные и т.п.)
- При переходе в любую из них то есть и главную и подкатегорию: у товара к Н1 добавилась определенная мной фраза и на выходе получилось бы так - Куртка натуральная кожа + {$product.name}

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

upd: вот еще мысль пришла - если можно использовать какое то уже определенное значение - то мб можно упользовать что то из карточки товара, что уже есть но как правило не используется... типа ISBN или создать новое "состояние товара" и его уже как то зацепить в выводе Н1?
31 Март 2018, 13:36:11
Ответ #3
  • Ветеран
  • *****
  • Сообщений: 22125
  • Репутация: +25303/-1
  • Prestashop - просто и эффективно
    • Просмотр профиля
Чтобы для всей ветки категорий
// У категории "Куртки кожанные" id=7
{if $product.id_category_default == '7'}Куртка натуральная кожа{/if}
Эксперт Prestashop - решения всех проблем, написание модулей, создание тем для интернет-магазинов под Prestashop.
Эксперт Magento - создам сайт на Magento, программирование кастомных модулей для Magento, кастомизация тем Magento.
Лучшие цены!!!
31 Март 2018, 13:40:39
Ответ #4
  • Новичок
  • *
  • Сообщений: 37
  • Репутация: +1/-0
  • Сообщество PrestaShop
    • Просмотр профиля
а на такой подход как вы смотрите?
Цитировать
upd: вот еще мысль пришла - если можно использовать какое то уже определенное значение - то мб можно упользовать что то из карточки товара, что уже есть но как правило не используется... типа ISBN, UPS или создать новое "состояние товара" и его уже как то зацепить в выводе Н1?

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

Вот могу UPC задать, осталось только выяснить как его внедрить в Н1, и есть ли у него какая то валидация - которая может навредить в будующем.
31 Март 2018, 14:19:11
Ответ #5
  • Ветеран
  • *****
  • Сообщений: 22125
  • Репутация: +25303/-1
  • Prestashop - просто и эффективно
    • Просмотр профиля
Можно брать любое неиспользуемое поле у товара и в нем сохранять текст, потом эту переменную вывести в product.tpl.
Эксперт Prestashop - решения всех проблем, написание модулей, создание тем для интернет-магазинов под Prestashop.
Эксперт Magento - создам сайт на Magento, программирование кастомных модулей для Magento, кастомизация тем Magento.
Лучшие цены!!!
31 Март 2018, 14:54:41
Ответ #6
  • Новичок
  • *
  • Сообщений: 37
  • Репутация: +1/-0
  • Сообщество PrestaShop
    • Просмотр профиля
Подскажите пожалуйста - как переопределить валидацию поля 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);
    }*/

И все равно не дает вписать символы, не русским не английским...
31 Март 2018, 18:18:34
Ответ #7
  • Ветеран
  • *****
  • Сообщений: 22125
  • Репутация: +25303/-1
  • Prestashop - просто и эффективно
    • Просмотр профиля
Комментировать метод нельзя, он используется при созранении товара. Измените значение, которое возвращает этот метод.
return true;
Эксперт Prestashop - решения всех проблем, написание модулей, создание тем для интернет-магазинов под Prestashop.
Эксперт Magento - создам сайт на Magento, программирование кастомных модулей для Magento, кастомизация тем Magento.
Лучшие цены!!!
31 Март 2018, 18:31:23
Ответ #8
  • Новичок
  • *
  • Сообщений: 37
  • Репутация: +1/-0
  • Сообщество PrestaShop
    • Просмотр профиля
Извините за нубские вопросы )) но я чтобы уж на 100%
заменить эту строку целиком:
return !$upc || preg_match('/^[0-9]{0,12}$/', $upc);на эту:
return true;Верно?
И как потом использовать эту переменную в H1 для подстановки.
upd: поменял строки как написал я - в итоге: This value is not valid.
31 Март 2018, 19:52:36
Ответ #9
  • Ветеран
  • *****
  • Сообщений: 22125
  • Репутация: +25303/-1
  • Prestashop - просто и эффективно
    • Просмотр профиля
1 верно, заменить строчку
2 {if $product.id_category_default == '7'}{$product.upc}{/if}
Эксперт Prestashop - решения всех проблем, написание модулей, создание тем для интернет-магазинов под Prestashop.
Эксперт Magento - создам сайт на Magento, программирование кастомных модулей для Magento, кастомизация тем Magento.
Лучшие цены!!!
01 Апрель 2018, 02:15:26
Ответ #10
  • Новичок
  • *
  • Сообщений: 37
  • Репутация: +1/-0
  • Сообщество PrestaShop
    • Просмотр профиля
со вторым пунктом все пучком - подставляет в Н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, на этом я сдался... время третий час ночи ))

Подскажите куда еще капнуть или что почитать, голова уже не варит.
01 Апрель 2018, 11:22:08
Ответ #11
  • Ветеран
  • *****
  • Сообщений: 22125
  • Репутация: +25303/-1
  • Prestashop - просто и эффективно
    • Просмотр профиля
Вам бы сначало теорию почитать, хотя бы начальные знания по php. Потом легче будет что-то сделать. Учится php на prestashop сложно.
1. return true работает, проверка пропускает любые символы
Это изменение только для проверки вводимых символов.
2. Ограничения по количесву символов задаются в других файлах и в базе данных.
Если уж меняете varchar, то ставьте 64 или 128.
Все правильно пишут, менять нужно в базе данных, в классе, в контроллере, в шаблоне и в javascript (некоторые поля проверяются в javascript функциях)
Эксперт Prestashop - решения всех проблем, написание модулей, создание тем для интернет-магазинов под Prestashop.
Эксперт Magento - создам сайт на Magento, программирование кастомных модулей для Magento, кастомизация тем Magento.
Лучшие цены!!!
01 Апрель 2018, 15:00:16
Ответ #12
  • Новичок
  • *
  • Сообщений: 37
  • Репутация: +1/-0
  • Сообщество PrestaShop
    • Просмотр профиля
Вам бы сначало теорию почитать, хотя бы начальные знания по 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
Спасибо
02 Апрель 2018, 11:58:51
Ответ #13
  • Ветеран
  • *****
  • Сообщений: 1285
  • Репутация: +13/-1
  • Сообщество PrestaShop
    • Просмотр профиля
Проверка еще и в контроллере AdminProductsController.php, тоже нужно удалить
'upc' => 'isUpc'
04 Апрель 2018, 16:29:17
Ответ #14
  • Новичок
  • *
  • Сообщений: 37
  • Репутация: +1/-0
  • Сообщество PrestaShop
    • Просмотр профиля
Проверка еще и в контроллере AdminProductsController.php, тоже нужно удалить
'upc' => 'isUpc'

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