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

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

SEFlink или SEF ссылка на категорию с определенным производителем

 (Прочитано 417 раз)
0 Пользователей и 1 Гость смотрят эту тему.
thctps
Захожу иногда
**

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

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


Подпись под аватаром


« : 05.04.2017, 13:24:27 »

Доброго всем!

Может кто сталкивался или просто знает в чем дело...
Есть пункт меню JoomShopping > Категория > Category ID > Manufacturer ID. Системна ссылка выглядит так:

Код:
index.php?option=com_jshopping&view=category&layout=category&task=view&category_id=35&manufacturer_id=6

Результат с включеным SEF:

Код:
site.com/category/subcategory/brand

В шаблоне продукта создаю ссылку на категорию товара, но только с этим производителем.
Ссылка в шаблоне выглядит так:

Код:
<?php print SEFLink('index.php?option=com_jshopping&view=category&layout=category&task=view&category_id='.$this->category_id.'&manufacturer_id='.$this->product->product_manufacturer_id);?>

Результат:

Код:
site.com/category/subcategory?manufacturer_id=6

Вопрос: почему не /brand на конце?
Вопрос №2: как решить это?
« Последнее редактирование: 05.04.2017, 13:49:34 от thctps » Записан
thctps
Захожу иногда
**

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

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


Подпись под аватаром


« Ответ #1 : 05.04.2017, 13:49:15 »

Нет нужного результата и так...

Пункт меню JoomShopping > Список товаров > All > Category ID > Manufacturer ID. Системна ссылка:

Код:
index.php?option=com_jshopping&view=products&category_id=35&manufacturer_id=6

И в шаблоне:

Код:
<?php print SEFLink('index.php?option=com_jshopping&view=products&task=view&category_id='.$this->category_id.'&manufacturer_id='.$this->product->product_manufacturer_id);?>

Результат:

Код:
site.com/category/subcategory/products/view?category_id=35&manufacturer_id=6
Записан
thctps
Захожу иногда
**

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

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


Подпись под аватаром


« Ответ #2 : 05.04.2017, 13:52:49 »

Код:
<?php print SEFLink('index.php?option=com_jshopping&view=products&task=view&category_id='.$this->category_id.'&manufacturer_id='.$this->product->product_manufacturer_id);?>

Без task=view вообще 404
Записан
thctps
Захожу иногда
**

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

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


Подпись под аватаром


« Ответ #3 : 05.04.2017, 14:09:04 »

Документация говорит, если хочешь делать SEF для компонента, делай router.php:
https://docs.joomla.org/Supporting_SEF_URLs_in_your_component

И в самом деле, там вся эта хрень есть, но как править хотя бы это:

Код:
if ($controller=="category" && $query['task']=="view" && $query['category_id']){
    if (isset($categoryitemidlist[$query['category_id']])){
        $query['Itemid'] = $categoryitemidlist[$query['category_id']];
        unset($query['controller']);
        unset($query['category_id']);
        unset($query['task']);
    }else{
        $catalias = JSFactory::getAliasCategory();
        if (isset($catalias[$query['category_id']])){
            $segments[] = $catalias[$query['category_id']];
            unset($query['controller']);
            unset($query['task']);
            unset($query['category_id']);
        }
    }
}

Чтобы получилось то, что надо...


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

Репутация: +935/-6
Online Online

Сообщений: 9954



« Ответ #4 : 05.04.2017, 15:11:12 »

Вопрос: почему не /brand на конце?
а с чего в принципе там должен быть /brand на конце? brand - это алиас пункта меню. никакого отношения к ЖШ и к его SEFLink не имеет.

Вопрос №2: как решить это?
давать ссылку напрямую на пункт меню
Записан
thctps
Захожу иногда
**

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

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


Подпись под аватаром


« Ответ #5 : 05.04.2017, 15:16:37 »

а с чего в принципе там должен быть /brand на конце?
потому что у пункта меню с указанной системной ссылкой алиас например brand

давать ссылку напрямую на пункт меню
не самое простое решение для более чем 50 категорий и 30 брендов (1500 ссылок вручную), но все равно спасибо
Записан
dmitry_stas
Профи
********

Репутация: +935/-6
Online Online

Сообщений: 9954



« Ответ #6 : 05.04.2017, 15:21:22 »

потому что у пункта меню с указанной системной ссылкой алиас например brand
ну так я ж говорю - brand это алиас пункта меню. там может быть что угодно, любые составные параметры, откуда ЖШ знать, что это у вас именно производитель определенной категории, чтобы сопоставить это в роутере? это так не работает. хотя сделать конечно можно под определенные условия. но это не 2 строки
Записан
thctps
Захожу иногда
**

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

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


Подпись под аватаром


« Ответ #7 : 05.04.2017, 15:35:10 »

там может быть что угодно
что верно, то верно

откуда ЖШ знать, что это у вас именно производитель определенной категории
ну алиас «просто категории» (category id без manufacturer id в пункте меню JoomShopping > Категория) он же знает

это так не работает
есть мнение, что работает

хотя сделать конечно можно
как?
Записан
dmitry_stas
Профи
********

Репутация: +935/-6
Online Online

Сообщений: 9954



« Ответ #8 : 05.04.2017, 15:43:25 »

Цитировать
ну алиас «просто категории» (category id без manufacturer id в пункте меню JoomShopping > Категория) он же знает
ну как знает... знает, потому что в роутере определен $categoryitemidlist, который содержит привязку пункта меню к категории. создайте 2 пункта меню на одну категорию - и все равно будет использован только один. вот и все знание.

Цитировать
есть мнение, что работает
Azn ну так тогда вопрос снят? все работает? Azn

Цитировать
как?
я вам уже ответил, это не 2 строки. чтобы ответить как надо взять и сделать. если хотите создайте тему в коммерческом разделе, может кто то возьмется.
Записан
thctps
Захожу иногда
**

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

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


Подпись под аватаром


« Ответ #9 : 05.04.2017, 15:53:01 »

это не 2 строки > в коммерческом разделе
я Вас понял
Записан
thctps
Захожу иногда
**

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

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


Подпись под аватаром


« Ответ #10 : 05.04.2017, 17:16:16 »

пусть пока костыль будет таким:

Это пункты меню:
- Категория
---Подкатегория1
------Бренд1 (алиас: brand1)
------Бренд2 (алиас: brand2)
------Бренд3 (алиас: brand3)
---Подкатегория1
------Бренд1 (алиас: brand1)
------Бренд2 (алиас: brand2)
------Бренд3 (алиас: brand3)

-Все бренды
---Бренд1 (алиас: brand1)
---Бренд2 (алиас: brand2)
---Бренд3 (алиас: brand3)

«Бренды» в «Подкатегориях», это те же «Подкатегории» только с прописанными Manufacturer ID
Пункт меню: JoomShopping > Категория > Category ID* > Manufacturer ID

ВАЖНО!
чтобы то, что будет предложено дальше заработало - алиасы брендов в «Подкатегории» должны полностью совпадать с алиасами брендов, прописанными в админке.

1. В файле components/com_jshopping/lib/factory.php в функции getAllManufacturer (строки 391-409) добавить вывод алиаса `".$lang->get('alias')."` as alias. Функция будет выглядеть как-то так:

Код:
public static function getAllManufacturer(){
static $rows;
    if (!is_array($rows)){
        $db = JFactory::getDBO();
        $lang = JSFactory::getLang();
        $dispatcher = JDispatcher::getInstance();
        $adv_result = "manufacturer_id as id, `".$lang->get('name')."` as name, manufacturer_logo, manufacturer_url, `".$lang->get('alias')."` as alias";
        $dispatcher->trigger('onBeforeQueryGetAllManufacturer', array(&$adv_result));
        $query = "select ".$adv_result." from #__jshopping_manufacturers where manufacturer_publish='1'";
        $db->setQuery($query);
        $_rows = $db->loadObjectList();
        $rows = array();
        foreach($_rows as $row){
            $rows[$row->id] = $row;
        }
        unset($_rows);
    }
return $rows;
}


А теперь в файле шаблона components/com_jshopping/templates/default/product/default.php в месте, где хотим выводит ссылку на товары из этой же категории и этого же бренда пишем:

Код:
<a href="<?php print SEFLink('index.php?option=com_jshopping&view=category&layout=category&task=view&category_id='.$this->category_id).'/'.$this->product->manufacturer_info->alias;?>">Все товары этой же категории и бренда</a>


ИТОГО 2 строки:

Код:
1. `".$lang->get('alias')."` as alias
2. <a href="<?php print SEFLink('index.php?option=com_jshopping&view=category&layout=category&task=view&category_id='.$this->category_id).'/'.$this->product->manufacturer_info->alias;?>">Все товары этой же категории и бренда</a>
Записан
dmitry_stas
Профи
********

Репутация: +935/-6
Online Online

Сообщений: 9954



« Ответ #11 : 05.04.2017, 17:59:52 »

если алиас производителя это всегда его транслитерированое название, то getAllManufacturer можно не менять, чтоб ядро так сказать не трогать. а в шаблоне просто использовать

Код:
JApplication::stringURLSafe($this->product->manufacturer_info->name)

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

Репутация: +935/-6
Online Online

Сообщений: 9954



« Ответ #12 : 05.04.2017, 18:01:39 »

и да, перенесите это кто-нибудь в JoomShopping пожалуйста.
Записан
thctps
Захожу иногда
**

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

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


Подпись под аватаром


« Ответ #13 : 05.04.2017, 18:22:07 »

Код:
JApplication::stringURLSafe($this->product->manufacturer_info->name)
Звучит заманчиво

HTML в конце ссылок не должно быть
Что Вы имеете ввиду?

ну и в итоге получилось...
не очень хорошо, просто не знаю как сделать лучше
Записан
dmitry_stas
Профи
********

Репутация: +935/-6
Online Online

Сообщений: 9954



« Ответ #14 : 05.04.2017, 18:44:47 »

имею в виду, что суффикс должен быть отключен в настройках Joomla, чтобы ссылки были вида /subcategory/brand, а не /subcategory/brand.html . иначе поломается немножко.
Записан
Страниц: [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