Новости Joomla

0 Пользователей и 1 Гость просматривают эту тему.
  • 6 Ответов
  • 840 Просмотров
*

john.deff

  • Захожу иногда
  • 115
  • 0 / 0
Есть ссылка сформированная в нашем компоненте
Код: php
// здесь цикл foreach
$link = "index.php?view=object_list&alias_category=kommercheskaya-nedvizhimost&Itemid=140"; // Если указываем Itemid компонента, то значение option не нужно!
JRoute::_($link);
После получаем ЧПУ url: site.ru/nedvizhimost/kommercheskaya-nedvizhimost.html

Роутер у нас работает правильно за исключением одного НО,
Я хочу делать выборку объектов из БД по id категории, а не по алиасу.
Обойти это можно только дополнительными запросами к БД, но ведь чем меньше запросов тем производительнее система работает.
Прошу помощи в решении задачи:

Мой роутер
Код: php
function MycompBuildRoute( &$query )
{
    $segments = array();
    if( isset($query['view']) ){       unset($query['view']);}
    if( isset($query['task']) ){       $segments[] = $query['task'];        unset($query['task']); }
    if( isset($query['al_category']) ){$segments[] = $query['al_category']; unset($query['al_category']); }
    if( isset($query['id']) ){         $segments[] = $query['id'];          unset($query['id']); }
    if( isset($query['limitstart']) ){ unset($query['limitstart']); }
    return $segments;
}

function MycompParseRoute( $segments )
{
    $vars  = array();
    $count = count($segments);
    $menu  = JMenu::getInstance('site')->getActive();
    $view  = isset($menu->query['view'])? $menu->query['view'] : '';

if( $view === 'object_list' && $count == 1){// && $count == 1
        $vars['view'] = 'object_list';
        $vars['al_category'] = str_replace( ':', '-', $segments[0] );
        return $vars;
    }

    if( $view === 'object_list' && $count == 2 ){// && $count == 2
        $vars['view'] = 'object_view';
        $vars['al_category'] = str_replace( ':', '-', $segments[0] );
        $vars['id'] = $segments[1];
        return $vars;
    }
}

Моя сылка
Код: php
// здесь цикл foreach
$link = "index.php?view=object_list&id_category='.$cat->id.'&al_category='.$cat->alias.'&Itemid=140";
JRoute::_($link);

Результат работы ЧПУ site.ru/nedvizhimost/kommercheskaya-nedvizhimost.html?id_category=188
Возможно ли передать id_category в URL или как-то ещё, но без участия ?id_category=188
То есть замаскировать под kommercheskaya-nedvizhimost.html ??

Или может есть какие другие варианты решения данного вопроса?
так как уровень вложенности может быть и больше сайт.ру/статья/материал/новости/вовость и всё это хочется без
сайт.ру/12-статья/222-материал/134324-новости/3-вовость
*

zomby6888

  • Завсегдатай
  • 1473
  • 171 / 3
Не понимаю а что вам мешает выборку в модели делать по ид вместе алиаса?

Цитировать
Возможно ли передать id_category в URL или как-то ещё, но без участия ?id_category=188
То есть замаскировать под kommercheskaya-nedvizhimost.html ??

Привязать категорию к пункту меню

Цитировать
так как уровень вложенности может быть и больше сайт.ру/статья/материал/новости/вовость и всё это хочется без
сайт.ру/12-статья/222-материал/134324-новости/3-вовость

Для таких роутингов вам ваш 4-хстрочный роутер явно не подойдет. Тут надо думать как разруливать роутинг с таким кол-вом сегментов и вложенностью  
интернет-блог: http://websiteprog.ru
*

john.deff

  • Захожу иногда
  • 115
  • 0 / 0
Привязать категорию к пункту меню

категории создаются в моём компоненте, в моих таблицах по моим правилам.
Как задействовать взаимосвязи категорий со стандартным функционалом?
можно пример?


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

Это я понимаю..
*

zomby6888

  • Завсегдатай
  • 1473
  • 171 / 3
Вам что нужно чтобы категорию можно было и по алиасу определять и по ид? Ну сделайте тогда просто в модели проверку если category_id число тогда выборку делайте по ид, если строка то по алиасу в чем проблема то? Чтобы убрать ид из URL его нужно привязать к какому то другому параметру, использовать алиас категории или пункта меню или любой другой параметр который с этой категорией так или иначе связан, иначе никак.

Когда вы пункт меню создаете для компонента вы указываете там параметры для полей которые указаны в XML файле в разделе request вроде бы. Я уже сейчас точно не помню но это как раз те параметры которые можно получить из запроса при этом их в самом запросе как таковом не указывая. Таким образом вы можете к пункту меню привязать id категории, статьи и вообще чего угодно а в URL вам достаточно будет указать алиас или ид этого пункта меню. Вы например можете создать пункт меню к которому не только ид категории но и ид статьи привязать. Чтобы попасть на эту конкретную статью в этой конкретной категории вам не нужно будет прописывать ни ид/алиас категории ни ид/алиас статьи так как ваш роутер будет передавать/получать только алиас пункта меню а ваша модель будет выбирать категорию и статью которая к этому конкретному пункту меню привязана.

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

Надеюсь я ясно излагаюсь.
« Последнее редактирование: 15.09.2016, 00:16:03 от zomby6888 »
интернет-блог: http://websiteprog.ru
*

john.deff

  • Захожу иногда
  • 115
  • 0 / 0
Вам что нужно чтобы категорию можно было и по алиасу определять и по ид? Ну сделайте тогда просто в модели проверку если category_id число тогда выборку делайте по ид, если строка то по алиасу в чем проблема то? Чтобы убрать ид из URL его нужно привязать к какому то другому параметру, использовать алиас категории или пункта меню или любой другой параметр который с этой категорией так или иначе связан, иначе никак.

Когда вы пункт меню создаете для компонента вы указываете там параметры для полей которые указаны в XML файле в разделе request вроде бы. Я уже сейчас точно не помню но это как раз те параметры которые можно получить из запроса при этом их в самом запросе как таковом не указывая. Таким образом вы можете к пункту меню привязать id категории, статьи и вообще чего угодно а в URL вам достаточно будет указать алиас или ид этого пункта меню. Вы например можете создать пункт меню к которому не только ид категории но и ид статьи привязать. Чтобы попасть на эту конкретную статью в этой конкретной категории вам не нужно будет прописывать ни ид/алиас категории ни ид/алиас статьи так как ваш роутер будет передавать/получать только алиас пункта меню а ваша модель будет выбирать категорию и статью которая к этому конкретному пункту меню привязана.

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

Надеюсь я ясно излагаюсь.

Лучше примеры живого кода, конструкций API Joomla 3 и на этом делать разбор!
иначе рассказывать можно что угодно, но без кода все равно ни вправо ни влево..
*

Septdir

  • Живу я здесь
  • 3370
  • 168 / 4
Честно не стал читываться текст, увидел, что нужны примеры и т.д Могу посоветовать вскрыть k2 у него роут самый адовый(и в хорошем и прохом смыле) и в нем чего того нет и чисто по id и чисто по алиасу и по алиасу и ид, думаю найдете что нужно, так конечно реализация хромая, но идею уловить можно.
P.S Личное мнение солидарен со сказанным где-то в начале, немного перефразирую 1 категория = 1 пункт меню(тут в гет идет), особенно если это комопнент не для массового распоранения. Ну да даже для масового. Один фиг так всегда надежнее.
P.S и не забудьте про канонический линк иначе грош цена вашему роуту
Не можете справиться с задачей сами пишите, решу ее за вас, не бесплатно*.
*Интересная задача, Деньги или Бартер. Натурой не беру!
CodersRank | Контакты | Мой GitHub | Workshop
*

Aleks.Denezh

  • Живу я здесь
  • 3406
  • 428 / 4
я бы вам посоветовал не морочить себе голову и сделать два лишних запроса, которые вы можете прокешировать..
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться