Форум русской поддержки Joomla!® CMS
01.05.2017, 06:27:02 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
   
   Начало   Поиск Joomla 3.0 FAQ Joomla 2.5 FAQ Joomla 1.5 FAQ Правила форума Новости Joomla Реклама Войти Регистрация Помощь  
Страниц: [1]   Вниз
  Добавить закладку  |  Печать  
Автор

генерация ссылки по ID товара

 (Прочитано 150 раз)
0 Пользователей и 1 Гость смотрят эту тему.
effrit
Группа развития
*****

Репутация: +801/-7
Offline Offline

Пол: Мужской
Сообщений: 7440


effrit.com


« : 13.03.2017, 13:07:55 »

Всем привет!
Жестокая судьба столкнула с магазином на JoomShopping (но в целом, мне нравится  Grin), сейчас вот думаю, как упростить жизнь простым продавцам.

Для чего вывожу в карточке товара артикул=ID товара, в связи с чем понадобилось реализовать быстрый переход к товару, зная этот самый ID.

В связи с этим вопрос - как можно по красоте сделать такое, используя встроенные функции движка?
Корявый запрос к бд я могу сделать и потом соорудить не сеошную ссылку вида /index.php?option=com_jshopping&controller=product&task=view&category_id=69&product_id=987,
но хочется чего-то более утонченного Azn.

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

Спасибо.
Записан
dmitry_stas
Профи
********

Репутация: +884/-6
Offline Offline

Сообщений: 9122



« Ответ #1 : 13.03.2017, 13:10:59 »

а переход нужен откуда? из админки?
Записан
effrit
Группа развития
*****

Репутация: +801/-7
Offline Offline

Пол: Мужской
Сообщений: 7440


effrit.com


« Ответ #2 : 13.03.2017, 13:14:32 »

ну в админке же читерская ссылка - без ID категории, так что там задача автоматически решается Azn.
а вот со стороны сайта быстро глянуть, когда по телефону, скажем, артикул сообщат - вот тут грабля вылазит Azn
Записан
dmitry_stas
Профи
********

Репутация: +884/-6
Offline Offline

Сообщений: 9122



« Ответ #3 : 13.03.2017, 13:15:58 »

поиск будет ЖШ-шный или Жумловый+плагин ЖШ? ядро хакаем? может быть проще присвоить 1-м запросом артикул=ID, а по артикулу и так поиск ищет?
« Последнее редактирование: 13.03.2017, 13:20:59 от dmitry_stas » Записан
effrit
Группа развития
*****

Репутация: +801/-7
Offline Offline

Пол: Мужской
Сообщений: 7440


effrit.com


« Ответ #4 : 13.03.2017, 13:21:48 »

вот этот модуль стоит Jshopping Search.
как мне видится: перехватывается введенное значение, если это - число, то генерируем ссылку на товар.
если товара нет, то просто 404 вывалится.

ну или другой вариант, может в поиске уже предусмотрен режим передачи ID в каком-то виде.
Записан
dmitry_stas
Профи
********

Репутация: +884/-6
Offline Offline

Сообщений: 9122



« Ответ #5 : 13.03.2017, 13:33:33 »

имхо самый простой вариант - поиск по каким полям искать определяется в \components\com_jshopping\lib\default_config.php
Код:
$config->product_search_fields = ...
если хаки делаем, то добавляем в массив product_id прям тут, если не делаем, то создаем файл \components\com_jshopping\lib\user_config.php и там уже переопределяем $config->product_search_fields

а дальше просто надо убедиться, что product_id будет заведомо уникальный по отношению к другим полям, и достаточно длинный чтобы поиск сработал. и все Azn

Записан
effrit
Группа развития
*****

Репутация: +801/-7
Offline Offline

Пол: Мужской
Сообщений: 7440


effrit.com


« Ответ #6 : 13.03.2017, 13:42:41 »

ммм. думается, этот метод даст побочные продукты поиска Azn
типа, товар с ID = 10 вытащит 101, 1000. а уж что будет, если удастся через поиск протащить однозначное число... Azn

наверно, надежнее все же будет гененрировать ссылку, а то тут подводные камни сразу повсплывали )
Записан
dmitry_stas
Профи
********

Репутация: +884/-6
Offline Offline

Сообщений: 9122



« Ответ #7 : 13.03.2017, 13:46:54 »

так сделать ID
надо убедиться, что product_id будет заведомо уникальный по отношению к другим полям, и достаточно длинный чтобы поиск сработал
Azn делаем старт ID товаров от 888800000 например. тогда первый ID будет 888800001 и так далее. и никаких совпадений Azn если товаров предполагается больше чем 100К то соответственно нулей больше в конце сразу делаем
Записан
effrit
Группа развития
*****

Репутация: +801/-7
Offline Offline

Пол: Мужской
Сообщений: 7440


effrit.com


« Ответ #8 : 13.03.2017, 13:48:41 »

это вполне вариант, но - для нового магаза Azn
а для старого с 300 товаров и старте с единицы - это диверсия будет, думается ))
Записан
effrit
Группа развития
*****

Репутация: +801/-7
Offline Offline

Пол: Мужской
Сообщений: 7440


effrit.com


« Ответ #9 : 13.03.2017, 13:50:24 »

к тому же, артикул в 6 и более знаков не облегчает жизнь манагерам и покупателям. Azn
Записан
dmitry_stas
Профи
********

Репутация: +884/-6
Offline Offline

Сообщений: 9122



« Ответ #10 : 13.03.2017, 14:01:51 »

ох уже эти менеджеры Azn выводить можно и без 8888, обрезать их Azn а вбивать уже с ними. ну и изменить то ид можно в базе запросами.

ну а если ссылку, то надо тогда ловить плагином или хаком в контроллере \components\com_jshopping\controllers\search.php ввод юзера, проверять на число, если число, то выбирать product_id, если нашли, то делать запрос по этому product_id определять первую категорию (методы уже есть готовые в JTable продукта, надо просто load() и потом getCategory()), и редиректить на SEFLink('index.php?option=com_jshopping&controller=product&task=view&category_id=69&product_id=987')
Записан
effrit
Группа развития
*****

Репутация: +801/-7
Offline Offline

Пол: Мужской
Сообщений: 7440


effrit.com


« Ответ #11 : 13.03.2017, 14:09:12 »

не, чем больше креатива на предмет "выводить можно и без 8888", тем менее мне хочется думать в эту сторону уже Azn.

а вот по второму - можно пример load() и потом getCategory() для гуманитариев Azn?
Записан
dmitry_stas
Профи
********

Репутация: +884/-6
Offline Offline

Сообщений: 9122



« Ответ #12 : 13.03.2017, 14:17:16 »

Код:
$product_id =  ... ;
$tProduct = JTable::getInstance('Product','jshop');
$tProduct->load($product_id);
if ($tProduct->product_id) {
    $tProduct->getCategory();
    JFactory::getApplication()->redirect(SEFLink('index.php?option=com_jshopping&controller=product&task=view&category_id='.$tProduct->product_id.'&product_id='.$tProduct->category_id));
}
Записан
effrit
Группа развития
*****

Репутация: +801/-7
Offline Offline

Пол: Мужской
Сообщений: 7440


effrit.com


« Ответ #13 : 13.03.2017, 14:22:03 »

гуманитарии довольны, большое аригато! Azn
Записан
dmitry_stas
Профи
********

Репутация: +884/-6
Offline Offline

Сообщений: 9122



« Ответ #14 : 13.03.2017, 14:44:58 »

ахаха Azn гуманитарии Azn
Записан
effrit
Группа развития
*****

Репутация: +801/-7
Offline Offline

Пол: Мужской
Сообщений: 7440


effrit.com


« Ответ #15 : 13.03.2017, 14:54:34 »

вот тебе смешно, а это все - правда!
тем более, это удобно, когда тебя пытаются заставит программировать.
типа "вы знаете, вот если бы вы стих попросили сочинить ... , а программирование - не мое" Azn
Записан
effrit
Группа развития
*****

Репутация: +801/-7
Offline Offline

Пол: Мужской
Сообщений: 7440


effrit.com


« Ответ #16 : 13.03.2017, 19:05:05 »

в общем, ленивые гуманитарии репу почесали и пошли своим кривым, но гордым путем Azn
на сайте имеются мультикатегории, так что решено было воспользоваться этим делом для оправдания собственной лени и нежелания хакать ядро Azn.
в итоге в карточке товара выводим артикул вида:
1093-25
где первое число - ID товара, второе - ID категории.
в шаблоне создаем папку
mod_jshopping_search
в нее переносим default.php из модуля и там слегка правим JS часть, благо уже есть перехватчик, который проверяет ввод на пустоту.
почти изящно вписываем в него регулярку с проверкой и редирект на нужную страницу.
alert не дает выйти из скрипта раньше времени и перейти на поиск.
профит Azn

Код:
function isEmptyValue(value){
    
regexp = /^([\d]*)-([\d]*)/g;
str = value;
var maches = regexp.exec(str);
if(maches){
url = '/index.php?option=com_jshopping&controller=product&task=view&category_id='+maches[2]+'&product_id='+maches[1];
window.location.href = url;
alert("введен артикул");
}
var pattern = /\S/;
return ret = (pattern.test(value))? (true) : (false);

}
Записан
dmitry_stas
Профи
********

Репутация: +884/-6
Offline Offline

Сообщений: 9122



« Ответ #17 : 13.03.2017, 20:17:03 »

а урлы просто закрыть от индексации такие или каноникал прописать? ну че, норм решение. просто и со вкусом.
Записан
effrit
Группа развития
*****

Репутация: +801/-7
Offline Offline

Пол: Мужской
Сообщений: 7440


effrit.com


« Ответ #18 : 13.03.2017, 20:21:54 »

каноничный URL прописан плагином, скачал где-то бесплатный (не навигеновский, без перекидывания). а урлы страшные, естессно, закрыты сразу как только ставиться галочка "сеошные ссылки" Azn.
кстати, можно закрепить тему, наверно. вполне годных 2 решения есть.

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

« Последнее редактирование: 13.03.2017, 20:25:43 от effrit » Записан
effrit
Группа развития
*****

Репутация: +801/-7
Offline Offline

Пол: Мужской
Сообщений: 7440


effrit.com


« Ответ #19 : 13.03.2017, 20:57:23 »

да, проверил var_dump'ом содержание объекта product - там нет указания текущей категории, они там все перечислены в массиве.
так что если кому надо вывести в артикул текущую - выколупываем отсель
Код:
$_SERVER["HTTP_HOST"].'/index.php?' . http_build_query($_REQUEST);
/спасибо дяде Федору за наше счастливое детство Azn /
Записан
dmitry_stas
Профи
********

Репутация: +884/-6
Offline Offline

Сообщений: 9122



« Ответ #20 : 13.03.2017, 23:59:11 »

в карточке товара $this->category_id содержит id текущей категории
Записан
effrit
Группа развития
*****

Репутация: +801/-7
Offline Offline

Пол: Мужской
Сообщений: 7440


effrit.com


« Ответ #21 : 14.03.2017, 00:23:46 »

точно. ну теперь совсем по красоте.
аригато-2 Azn
Записан
Страниц: [1]   Вверх
  Добавить закладку  |  Печать  
 
Перейти в:  

Powered by SMF 1.1.21 | SMF © 2006, Simple Machines

Joomlaforum.ru is not affiliated with or endorsed by the Joomla! Project or Open Source Matters.
The Joomla! name and logo is used under a limited license granted by Open Source Matters
the trademark holder in the United States and other countries.

LiveInternet