Формирование ЧПУ для своего компонента

  • 35 Ответов
  • 1168 Просмотров

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

*

john.deff

  • Осваиваюсь на форуме
  • ***
  • 116
  • 0
Приветстввую!
не могу самостоятельно разобраться как формируются ЧПУ на стороне пользовательской части.
компонент у меня простой, имеется страница с выводом альбомов
Код
www.site.ru/index.php?option=com_gallery&view=albom_list&Itemid=133 // если включить режим ЧПУ, отображается ссылка вида:
www.site.ru/galereya.html
Есть и вторая страница, страница когда мы заходим в альбом
Код
www.site.ru/index.php?option=com_gallery&view=albom_view&id=3&Itemid=133 // Промпотр альбома
// надо сделать вид отображения типа:
www.site.ru/galereya/ИМЯ-АЛЬБОМА.html
Прошу помощи господа!
хочу знать..

*

Aleks.Denezh

  • Практически профи
  • *******
  • 2785
  • 376
в роутере что?
Мой  блог по разработке на Joomla CMS!
Хотите отблагодарить материально? Мой WMR: R861060179016

*

john.deff

  • Осваиваюсь на форуме
  • ***
  • 116
  • 0
в роутере что?

Код
<? defined( '_JEXEC' ) or die;

function GalleryBuildRoute( &$query )
{
$segments = array();
if ( isset( $query['view'] ) ) {
$segments[] = $query['view'];
unset( $query['view'] );
}
if ( isset( $query['task'] ) ) {
$segments[] = $query['task'];
unset( $query['task'] );
}
if ( isset( $query['id'] ) ) {
$segments[] = $query['id'];
unset( $query['id'] );
}
if ( isset( $query['limitstart'] ) ) {
unset( $query['limitstart'] );
}
return $segments;
}

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


/**
* Примеры роутинга с удаленным $segments[] = $query['view']; в  BuildRoute
* Пример 1 - запуска задачи activate в контроллере по умолчанию, вид ссылки site.ru/menu-name/activate
if ( isset( $segments[0] ) && $segments[0] === 'activate' ) {
$vars['task'] = 'activate';
return $vars;
}
* Пример 2 - запуска задачи getFile в контроллере по умолчанию и передача id, вид ссылки site.ru/menu-name/getFile/1
if ( isset( $segments[0] ) && $segments[0] === 'getFile' ) {
$vars['task'] = 'getFile';
$vars['id'] = $segments[1];
return $vars;
}
* Пример 3 - если текущий пункт меню связан с видом  category и количество сегментов строки = 1 то выводим вид article
* в поле id будет id записи
* Например ссылка site.ru/menu-name/ откроет вид category (при условии что menu-name это пункт меню связанный с видом category)
* site.ru/menu-name/1-page-alias.html - откроет вид article в который будет передано в качестве id строка 1-page-alias
if ( $view === 'category' && $count == 1 ) {
$vars['view'] = 'article';
$vars['id'] = $segments[0];
return $vars;
}*/

if ( $count == 1 ) {
$vars['view'] = $segments[0];
}
if ( $count == 2 ) {
$vars['view'] = $segments[0];
if ( strpos( $segments[1], ':' )!== false || is_numeric( $segments[1] ) ) {
$vars['id'] = $segments[1];
} else {
$vars['task'] = $segments[1];
}
}
if ( $count == 3 ) {
$vars['view'] = $segments[0];
$vars['task'] = $segments[1];
$vars['id'] = $segments[2];
}
return $vars;
}

Читал и Вашу статью
http://inet-reklama.com/blog/joomla/routing-v-joomla-jroute.html

мо настолько всё мудрёно, что применить к своему компоненту решение не могу!
хочу знать..

*

Aleks.Denezh

  • Практически профи
  • *******
  • 2785
  • 376
Там же все в роутере даже расписано как делать )

Код: php
function GalleryBuildRoute( &$query )
{
$segments = array();
if ( isset( $query['view'] ) ) {
unset( $query['view'] );
}
if ( isset( $query['task'] ) ) {
$segments[] = $query['task'];
unset( $query['task'] );
}
if ( isset( $query['id'] ) ) {
$segments[] = $query['id'];
unset( $query['id'] );
}
if ( isset( $query['limitstart'] ) ) {
unset( $query['limitstart'] );
}
return $segments;
}
function GalleryParseRoute( $segments )
{
$vars = array();
$count = count( $segments );
$menu = JMenu::getInstance( 'site' )->getActive();
$view = isset( $menu->query['view'] )? $menu->query['view'] : '';
if ( $view === 'albom_list' && $count == 1 ) {
$vars['view'] = 'albom_view';
$vars['id'] = $segments[0];
return $vars;
}
}

ссылку на альбом формировать так: index.php?id=3&Itemid=133
Мой  блог по разработке на Joomla CMS!
Хотите отблагодарить материально? Мой WMR: R861060179016

*

john.deff

  • Осваиваюсь на форуме
  • ***
  • 116
  • 0
Там же все в роутере даже расписано как делать )

Код: php
function GalleryBuildRoute( &$query )
{
$segments = array();
if ( isset( $query['view'] ) ) {
unset( $query['view'] );
}
if ( isset( $query['task'] ) ) {
$segments[] = $query['task'];
unset( $query['task'] );
}
if ( isset( $query['id'] ) ) {
$segments[] = $query['id'];
unset( $query['id'] );
}
if ( isset( $query['limitstart'] ) ) {
unset( $query['limitstart'] );
}
return $segments;
}
function GalleryParseRoute( $segments )
{
$vars = array();
$count = count( $segments );
$menu = JMenu::getInstance( 'site' )->getActive();
$view = isset( $menu->query['view'] )? $menu->query['view'] : '';
if ( $view === 'albom_list' && $count == 1 ) {
$vars['view'] = 'albom_view';
$vars['id'] = $segments[0];
return $vars;
}
}

ссылку на альбом формировать так: index.php?id=3&Itemid=133

Вот это вообще не понял: ссылку на альбом формировать так: index.php?id=3&Itemid=133

данный код формирует такого вида ссылки:
Код
www.site.ru/galereya/4.html
а надо: www.site.ru/galereya/ИМЯ-АЛЬБОМА.html
не могу понять где подтянуть имя "алиас" альбома? точнее куда его вставить
хочу знать..

*

dmitry_stas

  • Профи
  • ********
  • 9665
  • 930
В $segments. вместо
Код
$segments[] = $query['id'];
вставляйте алиас альбома, предварительно получив его по id. А в ParseRoute соответственно наоборот, по алиасу получайте id
Тут дарят бакс просто за регистрацию! Успей получить!
Все советы на форуме раздаю бесплатно, то есть даром. Индивидуально бесплатно консультирую только по вопросам стоимости индивидуальных консультаций

*

Aleks.Denezh

  • Практически профи
  • *******
  • 2785
  • 376
я всего лишь взял кусок вашего роутера где у вас: www.site.ru/index.php?option=com_gallery&view=albom_view&id=3&Itemid=133
Хотите передавать не ID, а имя альбома, так передавайте его
например: echo JRoute::_('index.php?id='.$item->alias.'&Itemid=133');
Только в модели уже вам придется искать запись не по ID, а по alias!
роутер остается тот же что я писал выше!
Мой  блог по разработке на Joomla CMS!
Хотите отблагодарить материально? Мой WMR: R861060179016

*

john.deff

  • Осваиваюсь на форуме
  • ***
  • 116
  • 0
я всего лишь взял кусок вашего роутера где у вас: www.site.ru/index.php?option=com_gallery&view=albom_view&id=3&Itemid=133
Хотите передавать не ID, а имя альбома, так передавайте его
например: echo JRoute::_('index.php?id='.$item->alias.'&Itemid=133');
Только в модели уже вам придется искать запись не по ID, а по alias!
роутер остается тот же что я писал выше!

А если сделать запрос к БД в файле router.php? хотя это глупо!
сделал в echo
Код
JRoute::_('index.php?alias='.$item->alias.'&id='.$item->id.'&Itemid=133'); 
в файле route.php добавил
Код
if( isset($query['alias']) ){      
     unset($query['alias']);
}
чтоб в УРЛ не вставлялся, вопрос как подменить id на alias, вот не могу понять принцип работы роутера
« Последнее редактирование: 21.05.2016, 12:48:22 от john.deff »
хочу знать..

*

dmitry_stas

  • Профи
  • ********
  • 9665
  • 930
так делайте, почему нет? чем глупо? создайте статическую переменную, загрузите в нее 1 раз массив id=>alias, и берите каждый раз алиас по ид.

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

если будете передавать id, то сделав ссылку не /galereya/ИМЯ-АЛЬБОМА.html, а /galereya/ИМЯ-АЛЬБОМА-ID.html, уйдете еще от одного запроса определения ID при парсинге ссылки. но тогда учитывайте возможные дубли, проверяйте после load($id) соответствие ИМЯ-АЛЬБОМА алиасу, и в случае несовпадения отдавайте 404.
Тут дарят бакс просто за регистрацию! Успей получить!
Все советы на форуме раздаю бесплатно, то есть даром. Индивидуально бесплатно консультирую только по вопросам стоимости индивидуальных консультаций

*

Aleks.Denezh

  • Практически профи
  • *******
  • 2785
  • 376
А если сделать запрос к БД в файле router.php? хотя это глупо!
А зачем делать в роутере запрос к БД что бы получить ID который потом передать роутером в модель, если можно сразу сделать в модели запрос по alias!

чтоб в УРЛ не вставлялся, вопрос как подменить id на alias, вот не могу понять принцип работы роутера
я же вам уже конкретно выше написал код  как правильно делать!
Вы же зачем то написали это: JRoute::_('index.php?alias='.$item->alias.'&id='.$item->id.'&Itemid=133');
Ещё раз!
Формирование ссылки:  JRoute::_('index.php?id='.$item->alias .'&Itemid=133'); Все больше ничего не надо!
В модели:
Код: php
public function getItem(  )
{
$input = JFactory::getApplication()->input;
$alias = str_replace( ':', '-', $input->getString( 'id' ) );
$db = JFactory::getDbo();
$query = $db->getQuery( true )
->select( '*' )
->from( '#__table' )
->where( 'alias=' . $db->q( $alias ) );
$item = $db->setQuery( $query )->loadObject();
return $item;
}
Все!

Вы почему то зациклились на переменной ID забудьте про неё, это не системная переменная, в ней не обязательно передавать только ID, можете что угодно в ней передавать!
Мой  блог по разработке на Joomla CMS!
Хотите отблагодарить материально? Мой WMR: R861060179016

*

Aleks.Denezh

  • Практически профи
  • *******
  • 2785
  • 376
если алиас не будет меняться после создания, то лучше сделать как написал Istaan, сразу передавать алиас. уйдете от лишнего запроса. если же будет, то в таком случае придется передавать ид, чтобы при смене алиаса не приходилось пересохранять пункты меню.
Вы хотя бы тему прочли внимательно? Вы сейчас запутаете человека! Какие  алисы и смены алиасов?
Есть категория на которую завязан пункт меню, в ней есть записи, они с меню не связаны!
Из категории нужно перейти в записи! Все!

если будете передавать id, то сделав ссылку не /galereya/ИМЯ-АЛЬБОМА.html, а /galereya/ИМЯ-АЛЬБОМА-ID.html, уйдете еще от одного запроса определения ID при парсинге ссылки. но тогда учитывайте возможные дубли, проверяйте после load($id) соответствие ИМЯ-АЛЬБОМА алиасу, и в случае несовпадения отдавайте 404.
Зачем определять ещё вторым запросом ID? почему не сделать запрос по alias, как в примере что я написал выше?!

Единственное что  john.deff вам придется следить за alias ибо если будут одинаковые название то попадать юзер будет только в одну галерею.. скорее всего ввести надо будет в админке при сохранении функционал для на проверку или такой alias уже есть в таблице! либо передавать JRoute::_('index.php?id='$item->id.':'.$item->alias .'&Itemid=133');
« Последнее редактирование: 21.05.2016, 13:32:45 от Istaan »
Мой  блог по разработке на Joomla CMS!
Хотите отблагодарить материально? Мой WMR: R861060179016

*

dmitry_stas

  • Профи
  • ********
  • 9665
  • 930
Вы хотя бы тему прочли внимательно?
вроде бы прочел. еще раз прочел :) нигде не сказано, связаны они с меню или нет. а если даже сейчас не связаны, то в будущем это исключено? если да - то вопросов нет, передавайте алиас. а если предполагается меню, то имхо неправильно передавать алиас.

Зачем определять ещё вторым запросом ID? почему не сделать запрос по alias, как в примере что я написал выше?!
да пожалуйста, делайте. только ведь это будет лишний запрос при парсинге ссылки. почему бы ссылку сразу не сформировать с ид?
Тут дарят бакс просто за регистрацию! Успей получить!
Все советы на форуме раздаю бесплатно, то есть даром. Индивидуально бесплатно консультирую только по вопросам стоимости индивидуальных консультаций

*

dmitry_stas

  • Профи
  • ********
  • 9665
  • 930
А зачем делать в роутере запрос к БД что бы получить ID который потом передать роутером в модель, если можно сразу сделать в модели запрос по alias!
тут согласен. поскольку в модели все равно будет запрос на выборку, то правильнее выбрать в модели, а в роутер просто передать его.
Тут дарят бакс просто за регистрацию! Успей получить!
Все советы на форуме раздаю бесплатно, то есть даром. Индивидуально бесплатно консультирую только по вопросам стоимости индивидуальных консультаций

*

dmitry_stas

  • Профи
  • ********
  • 9665
  • 930
Зачем определять ещё вторым запросом ID? почему не сделать запрос по alias, как в примере что я написал выше?!
перечитал еще раз. понял о чем вы. не о том подумал изначально, не о той выборке. после того как прочел о уникальности алиаса, понял что имеется в виду. да, вы правы, нет смысла в id. все так и есть, сразу выбирать по алиасу, при условии уникальности алиаса.
Тут дарят бакс просто за регистрацию! Успей получить!
Все советы на форуме раздаю бесплатно, то есть даром. Индивидуально бесплатно консультирую только по вопросам стоимости индивидуальных консультаций

*

Aleks.Denezh

  • Практически профи
  • *******
  • 2785
  • 376
вроде бы прочел. еще раз прочел :) нигде не сказано, связаны они с меню или нет. а если даже сейчас не связаны, то в будущем это исключено?
Ссылка на список: www.site.ru/index.php?option=com_gallery&view=albom_list&Itemid=133
ссылка на альбом: www.site.ru/index.php?option=com_gallery&view=albom_view&id=3&Itemid=133
Дальше думаю объяснять не нужно )
Тем не менее если не исключено нужно использовать другие механизмы, определение или запись с этим id не в пункте меню, и тогда ссылка становится просто index.php?Itemid=ид_пункта_меню, иначе ссылка с алиасом!
Мой  блог по разработке на Joomla CMS!
Хотите отблагодарить материально? Мой WMR: R861060179016

*

john.deff

  • Осваиваюсь на форуме
  • ***
  • 116
  • 0
А зачем делать в роутере запрос к БД что бы получить ID который потом передать роутером в модель, если можно сразу сделать в модели запрос по alias!
я же вам уже конкретно выше написал код  как правильно делать!
Вы же зачем то написали это: JRoute::_('index.php?alias='.$item->alias.'&id='.$item->id.'&Itemid=133');
Ещё раз!
Формирование ссылки:  JRoute::_('index.php?id='.$item->alias .'&Itemid=133'); Все больше ничего не надо!
В модели:
Код: php
public function getItem(  )
{
$input = JFactory::getApplication()->input;
$alias = str_replace( ':', '-', $input->getString( 'id' ) );
$db = JFactory::getDbo();
$query = $db->getQuery( true )
->select( '*' )
->from( '#__table' )
->where( 'alias=' . $db->q( $alias ) );
$item = $db->setQuery( $query )->loadObject();
return $item;
}
Все!

Вы почему то зациклились на переменной ID забудьте про неё, это не системная переменная, в ней не обязательно передавать только ID, можете что угодно в ней передавать!

Я сделал как вы указали изначально, но у меня выборка в модели идет по ID, следовательно подставляя alias вместо ID выдаётся ошибка вывода данных.
Сижу вот думаю, если я буду делать выборку из БД по алиасу, как это отразится в будущем на выводе.. это не есть хорошо!

Что если выборку делать по ID в модели, а сам алиас отдавать в УРЛ, и уже на уровне РОУТЕРА как-то всё это дело обрабатывать?
в роутер передавать что-то типа слуга ID:ALIAS, ведь значения ID и ALIASa у нас есть при первоначальном запросе, так почему бы их не использовать на уровне РОУТЕРА!

перечитал статью http://inet-reklama.com/blog/joomla/routing-v-joomla-jroute.html ещё раз, там нет описания того как использовать ALIAS "категории/новости/статьи.html" и т.д.
« Последнее редактирование: 21.05.2016, 17:30:39 от john.deff »
хочу знать..

*

Aleks.Denezh

  • Практически профи
  • *******
  • 2785
  • 376
Я сделал как вы указали изначально, но у меня выборка в модели идет по ID, следовательно подставляя alias вместо ID выдаётся ошибка вывода данных.
Да вот сдался вам этот id! Я же вам даже код привел как метод getItem() в модели переделать что бы он получал запись по alias, а не по id!

Сижу вот думаю, если я буду делать выборку из БД по алиасу, как это отразится в будущем на выводе.. это не есть хорошо!
Да никак это не отразится на вводе, базе данных глубоко наплевать по какому полю вы делаете выборку! Тем более базе данных глубоко пофиг на вывод, она в ней не участвует!
Есть таблица:
id| alias| title
--------------
1 | test | lalal
---------------
Сделав запрос SELECT * FROM table WHERE id=1 или сделав запрос в базу SELECT * FROM table WHERE alias='test' вы получите одну и туже запись!

Что если выборку делать по ID в модели, а сам алиас отдавать в УРЛ, и уже на уровне РОУТЕРА как-то всё это дело обрабатывать?
А ещё можно масло мазать на масло, для большей маслянистости!
Вы понимаете что вы вместо одного запроса будете делать два ОДИНАКОВЫХ, первым запросом вы выберите запись SELECT id FROM table WHERE alias='test' что бы получить ID, передать его в модель в которпой выполнить SELECT * FROM table WHERE id=1, это же бред!

в роутер передавать что-то типа слуга ID:ALIAS, ведь значения ID и ALIASa у нас есть при первоначальном запросе, так почему бы их не использовать на уровне РОУТЕРА!
Вообще роутер ничего не знает ни про ID, ни про алиас, ни про слуг, ни про что! Он только переделывает 1:lalala в 1-lalal, а что вы ему передадите ему все равно!
echo  JRoute::_('index.php?id=lala:lala'); выдаст ни что иное как site.ru/lala-lala.html

перечитал статью http://inet-reklama.com/blog/joomla/routing-v-joomla-jroute.html ещё раз, там нет описания того как использовать ALIAS "категории/новости/статьи.html" и т.д.
Там много чего нет, там написаны основы, и статье уже четыре года почти, за это время мой стиль кода в Joomla 5 раз изменился!
Мой  блог по разработке на Joomla CMS!
Хотите отблагодарить материально? Мой WMR: R861060179016

*

john.deff

  • Осваиваюсь на форуме
  • ***
  • 116
  • 0
Да вот сдался вам этот id! Я же вам даже код привел как метод getItem() в модели переделать что бы он получал запись по alias, а не по id!
Да никак это не отразится на вводе, базе данных глубоко наплевать по какому полю вы делаете выборку! Тем более базе данных глубоко пофиг на вывод, она в ней не участвует!
Есть таблица:
id| alias| title
--------------
1 | test | lalal
---------------
Сделав запрос SELECT * FROM table WHERE id=1 или сделав запрос в базу SELECT * FROM table WHERE alias='test' вы получите одну и туже запись!
А ещё можно масло мазать на масло, для большей маслянистости!
Вы понимаете что вы вместо одного запроса будете делать два ОДИНАКОВЫХ, первым запросом вы выберите запись SELECT id FROM table WHERE alias='test' что бы получить ID, передать его в модель в которпой выполнить SELECT * FROM table WHERE id=1, это же бред!
Вообще роутер ничего не знает ни про ID, ни про алиас, ни про слуг, ни про что! Он только переделывает 1:lalala в 1-lalal, а что вы ему передадите ему все равно!
echo  JRoute::_('index.php?id=lala:lala'); выдаст ни что иное как site.ru/lala-lala.html
Там много чего нет, там написаны основы, и статье уже четыре года почти, за это время мой стиль кода в Joomla 5 раз изменился!

смотрите, у меня есть категория/альбом в БД у него есть уникальный ID и ALIAS, в этот альбом я добавляю фотографии, соответственно в отдельной таблице я храню уникальный ID фотографии и ID_parent категории/альбома к которому привязана фотография. Вот и получается что, не могу я по алиасу делать выборку, так как выборка фоток происходит по ID альбома, ведь у каждой фотографии есть ID родителя.

Могу конечно при добавлении фотографий в БД сохранять у каждой фото алиас альбома для выборки, но что если надо будет поменять алиас?
это дополнительные методы для изменения всех алиасов у фотографии.
если уж от ID в урл никак не избавиться, то можно сделать /galereya/ИМЯ-АЛЬБОМА-ID.html
« Последнее редактирование: 22.05.2016, 16:24:42 от john.deff »
хочу знать..

*

Aleks.Denezh

  • Практически профи
  • *******
  • 2785
  • 376
смотрите, у меня есть категория/альбом в БД у него есть уникальный ID и ALIAS, в этот альбом я добавляю фотографии, соответственно в отдельной таблице я храню уникальный ID фотографии и ID_parent категории/альбома к которому привязана фотография. Вот и получается что, не могу я по алиасу делать выборку, так как выборка фоток происходит по ID альбома, ведь у каждой фотографии есть ID родителя.

Могу конечно при добавлении фотографий в БД сохранять у каждой фото алиас альбома для выборки, но что если надо будет поменять алиас?
это дополнительные методы для изменения всех алиасов у фотографии.
если уж от ID в URL никак не избавиться, то можно сделать /galereya/ИМЯ-АЛЬБОМА-ID.html
что за чушь!
Вы в любом случае делаете два запроса!
1 запрос: SELECT * FROM album WHERE id=1
2 запрос: SELECT * FROM albium_images WHERE album_id=1
А теперь какая разница вы сделаете так:

Спойлер
[свернуть]

Или так?!
Спойлер
[свернуть]

Вообщем я даже не знаю как дальше аргументировать, либо вам ваши знания мешают понять всю картину, либо вы не хотите читать и воспринимать!
У меня есть куча реализаций подобных компонентов, в которых я по такому способу как вам выше предоставил избавляюсь от чего угодно в ссылке, и присоединяется у меня не одна табличка потом с записями, а десятки!
Делайте как получится..
Мой  блог по разработке на Joomla CMS!
Хотите отблагодарить материально? Мой WMR: R861060179016

*

john.deff

  • Осваиваюсь на форуме
  • ***
  • 116
  • 0
что за чушь!
Вы в любом случае делаете два запроса!
1 запрос: SELECT * FROM album WHERE id=1
2 запрос: SELECT * FROM albium_images WHERE album_id=1


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

*

Aleks.Denezh

  • Практически профи
  • *******
  • 2785
  • 376
эм... нет.. я делаю один запрос.
когда я захожу в альбом у меня в URL есть id_albom
одним запросом я делаю выборку из таблицы всех фотографий что есть у данного альбома по id_albom!
а вот по Вашему методу мне надо делать два запроса, что не хотелось бы
И каким макаром вы делаете один запрос на список фото, для одиночной записи?
А тайтл альбома, а если описание понадобится то вы как выводите и откуда? или тупо фотки без оглавления страницы и все?
А если такого альбома нет, или снят с публикации как определите и отдадите 404 ошибку?!
« Последнее редактирование: 23.05.2016, 13:26:50 от Istaan »
Мой  блог по разработке на Joomla CMS!
Хотите отблагодарить материально? Мой WMR: R861060179016

*

john.deff

  • Осваиваюсь на форуме
  • ***
  • 116
  • 0
И каким макаром вы делаете один запрос на список фото, для одиночной записи?
А тайтл альбома, а если описание понадобится то вы как выводите и откуда? или тупо фотки без оглавления страницы и все?

в БД у меня 2 таблицы:
- gallery_albom - id | name | desc | alias
- gallery_photo - id | id_albom

Первая страница вывод альбомов:
Код
$query->select('*')->from('gallery_albom')->where('state=1');
здесь формирум URL в котором у нас есть ID альбома

Вторая страница, вывод фотографий. Отлавливаем из URL id альбома и делаем по нему выборку. Здесь фото отображаются списком, просмотр реализован лайтбоксом:
Код
$q->select('id, id_albom, type')->from('gallery_photos')->where('id_albom=1');

По поводу тайтла альбома - Вы Правы!
но тогда лучше объединить запросы из двух таблиц в один, надо подумать только как
« Последнее редактирование: 23.05.2016, 13:37:54 от john.deff »
хочу знать..

*

Aleks.Denezh

  • Практически профи
  • *******
  • 2785
  • 376
ну вот название альбома на странице списка фото вы как выводите? Описание альбома то что в desc как выводите? А метаданные для альбома?!
А если альбом снят с публикации? Все равно же выведется страница с фото, а если удален? ошибки никакой не будет, как и не будет ошибки если id альбома не существует!
Про дубли я уже молчу..
Мой  блог по разработке на Joomla CMS!
Хотите отблагодарить материально? Мой WMR: R861060179016

*

dmitry_stas

  • Профи
  • ********
  • 9665
  • 930
Istaan опередил :)

ТС, вы же все равно на этой второй странице наверняка делаете запрос к gallery_albom? типа
Код
$query->select('*')->from('gallery_albom')->where('id=1');
Делаете?
Тут дарят бакс просто за регистрацию! Успей получить!
Все советы на форуме раздаю бесплатно, то есть даром. Индивидуально бесплатно консультирую только по вопросам стоимости индивидуальных консультаций

*

john.deff

  • Осваиваюсь на форуме
  • ***
  • 116
  • 0
Istaan опередил :)

ТС, вы же все равно на этой второй странице наверняка делаете запрос к gallery_albom? типа
Код
$query->select('*')->from('gallery_albom')->where('id=1');
Делаете?

да, я выше написал
Код
$q->select('id, id_albom, type')->from('gallery_photos')->where('id_albom=1');

Istaan прав, я не догнал с первого раза..
хочу знать..

*

dmitry_stas

  • Профи
  • ********
  • 9665
  • 930
Вы выше написали не то. Вы пишите о 'gallery_photos', а я о 'gallery_albom'. Но на странице gallery_photos. Делаете такой запрос? Если да, то какая разница по чем его делать - по id или по алиасу? Делайте по алиасу, и ид после запроса уже будет у вас. А gallery_photos отбирайте уже по ид, как и сейчас
Тут дарят бакс просто за регистрацию! Успей получить!
Все советы на форуме раздаю бесплатно, то есть даром. Индивидуально бесплатно консультирую только по вопросам стоимости индивидуальных консультаций

*

john.deff

  • Осваиваюсь на форуме
  • ***
  • 116
  • 0
Вы выше написали не то. Вы пишите о 'gallery_photos', а я о 'gallery_albom'. Но на странице gallery_photos. Делаете такой запрос? Если да, то какая разница по чем его делать - по id или по алиасу? Делайте по алиасу, и ид после запроса уже будет у вас. А gallery_photos отбирайте уже по ид, как и сейчас

вопрос решен!
по алиасу выборку из БД не делаю, просто URL формирую такой на конкретный альбом на странице списка альбомов:
Код
index.php?option=com_gallery&view=albom_view&id='.$item->id.":".$item->alias
а роутер от Istaan уже делает такую ссылку: site.ru/gallery/ID-имяальбома.html
хочу знать..

*

dmitry_stas

  • Профи
  • ********
  • 9665
  • 930
понятно :)
Тут дарят бакс просто за регистрацию! Успей получить!
Все советы на форуме раздаю бесплатно, то есть даром. Индивидуально бесплатно консультирую только по вопросам стоимости индивидуальных консультаций

*

john.deff

  • Осваиваюсь на форуме
  • ***
  • 116
  • 0
Однако! в продолжение темы!
вот есть 2 таких URL
Код
site.ru/index.php?view=object_list&id_category=kakaya-to-kategoryya
site.ru/index.php?view=object_view&id_category=kakaya-to-kategoryya&id=21:imya-obyekta
надо чтоб ссылка была в таком виде:
site.ru/mycomp/kakaya-to-kategoryya.html
site.ru/mycomp/kakaya-to-kategoryya/21-imya-obyekta.html

Роутер не работает:
Код
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['id_category']) ){$segments[] = $query['id_category']; unset($query['id_category']); }
    if( isset($query['id']) ){         $segments[] = $query['id'];          unset($query['id']); }
    if( isset($query['limitstart']) ){ unset($query['limitstart']); }

    //echo "<pre>"; print_r($segments); echo "</pre>";
    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 ){
        $vars['view'] = 'object_view';
        //$vars['id_category'] = $segments[0];
        $vars['id'] = $segments[0];
        return $vars;
        //echo "<pre>"; print_r($vars); echo "</pre>";
    }

}

и даже отследить ошибки-то невозможно  :(
хочу знать..

*

dmitry_stas

  • Профи
  • ********
  • 9665
  • 930
что подразумевается под "Роутер не работает"? фатальная ошибка? или не получает управление?
Тут дарят бакс просто за регистрацию! Успей получить!
Все советы на форуме раздаю бесплатно, то есть даром. Индивидуально бесплатно консультирую только по вопросам стоимости индивидуальных консультаций