Откомменченное

2009 27 февраля

Постраничная навигация в компоненте !Joomla 1.5

Всем известно, как добавлять постраничную навигацию в своем компоненте на базе Joomla 1.0.хх Теперь аналогично, но для версии 1.5, вместе с запросом из базы
1
23
45
67
89
1011
$db =& JFactory::getDBO();
$limit   = $mainframe->getUserStateFromRequest("$option.limit", 'limit', 14, 'int'); \\ количество на страницу$limistart  = JRequest::getVar('limitstart', 0, '', 'int'); \\откуда начинаем отсчет
jimport('joomla.html.pagination'); \\подключаем класс$db->setQuery(‘SELECT * FROM jos_content WHERE catid = '1' LIMIT limistart limit  );
$allcount = 'хх'; \\ общее количество записей из запроса$pageNav = new JPagination( $allcount, $limistart, $limit );
foreach($rL as $r) {//результат запроса
}echo $pageNav->getListFooter(  ); //постраничная навигация
Оригинал статьи и расширенные комментарии здесь $pageNav->getListFooter(); - все параметры постраничной навигации $pageNav->getPagesLinks(); - только ссылки туда\обратно и номера страниц echo $pageNav->getPagesCounter(); - страниц 1 из 4 echo $pageNav->getLimitBox(); - выпадающий список сортировки

Комментарии

0 Виталий пишет нам 25.09.2009 14:54
Спасибо Именно это искал. Помогло
Цитировать Сообщить модератору
0 Александр пишет нам 21.11.2009 23:41
не подскажите почему страница имеет адрес скажем http//имя/имя/имя/имя/ а навигация делает так имя.html?start=10
Цитировать Сообщить модератору
0 Beliyadm отвечает 21.11.2009 23:53
Потому что автор галереи не написал по правилам файл роутера для организации SEF
Цитировать Сообщить модератору
0 Макс пишет нам 22.11.2009 21:22
Спасибо!
Цитировать Сообщить модератору
0 maxvolume пишет нам 25.11.2009 22:09
1. $db =& JFactory::getDBO(); 2. $limit = $mainframe->getUserStateFromRequest("$option.li mit", ‘limit’, 14, ‘int’); \\ количество на страницу 3. $limistart = JRequest::getVar(‘limitstart’, 0, », ‘int’); \\откуда начинаем отсчет 4. jimport(‘joomla.html.pagination’); \\подключаем класс 5. $db->setQuery(‘SELECT * FROM jos_content WHERE catid = ‘1′ LIMIT limistart limit ); 6. $allcount = ‘хх’; \\ общее количество записей из запроса 7. $pageNav = new JPagination( $allcount, $limistart, $limit ); 8. foreach($rL as $r) { 9. //результат запроса 10. } 11. echo $pageNav->getListFooter( ); //постраничная навигация куда это ставить?
Цитировать Сообщить модератору
0 Beliyadm отвечает 26.11.2009 00:21
В код вашего компонента
Цитировать Сообщить модератору
0 stashe пишет нам 03.12.2009 18:38
А как убрать вообще постраничную навигацию?
Цитировать Сообщить модератору
0 Beliyadm отвечает 03.12.2009 18:39
Отключить в настройках пункта меню, ведущего на данную страницу. Но если в режиме к примеру блога у вас в категории 30 материалов а настройками на одной странице показывается 10 - посетители не увидят остальные 20, потому подумайте - какой смысл ее отключать
Цитировать Сообщить модератору
0 Саша пишет нам 05.03.2010 16:24
Добрый день! а можно конкретный пример показать!??? а то у меня есть вывод из БД данных, но как дополнить мой код вашим я не понимаю...
Цитировать Сообщить модератору
0 Beliyadm отвечает 05.03.2010 16:31
Добрый. Пример чего - кода или работающего сайта? Возьмите любой стандартный компонент, к примеру в админке очень наглядно видно построение навигации
Цитировать Сообщить модератору
0 Саша пишет нам 05.03.2010 17:19
желательно полного кога! вот мой код вывода новостей (это не из стандартной компоненты, а я свою писал) if ($subm == 'news') { $query2 = "SELECT id FROM jos_sections WHERE title = '$subm' "; $db->setQuery($query2,0); $db->query(); $result2 = $db->loadObjectList(); foreach ($result2 as $row2) { $subm2 = $row2->id; } $query3 = "SELECT * FROM jos_content WHERE sectionid = '$subm2' ORDER BY created DESC"; $db->setQuery($query3,0); $db->query(); $result3 = $db->loadObjectList(); foreach ($result3 as $row3) { echo''; $subm3 = $row3->title; echo 'id.'" title="'.$row3->title.'">'.$subm3.''; echo ''.substr($row3->introtext,0,100).'...id.'" title="'.$row3->title.'">read more'; echo ''.$row3->created.''; echo ''; } } этот код выводит список всех новостей, а мне бы навигацию по 10...
Цитировать Сообщить модератору
0 Beliyadm отвечает 05.03.2010 17:25
Вот пример из одного моего компонента Код://подключаем класс и выставляем данные по умолчанию
jimport('joomla.html.pagination');
$limit = $ad_toplist;
$limitstart = JRequest::getVar('limitstart', 0, 'int');
$page_nav_links ='';
//получаем количество
$query = "SELECT count(*) AS count FROM #__joopic WHERE published=1 AND approved=1 ";
$db->setQuery($query);
$row = $db->LoadObject();
$total = $row->count;
$pageNav = new JPagination( $total, $limitstart, $limit );
$page_nav_links = $pageNav->getPagesLinks();
//сам запрос в базу с учетом данных пагинации
$query = 'SELECT a.*, c.*, a.id as aid,
CASE WHEN CHAR_LENGTH(a.imgalias) THEN CONCAT_WS(\':\', a.id, a.imgalias) ELSE a.id END as slug,
CASE WHEN CHAR_LENGTH(c.catailas) THEN CONCAT_WS(\':\', c.cid, c.catailas) ELSE c.cid END as catslug
FROM #__joopic AS a
LEFT JOIN #__joopic_catg AS c on c.cid=a.catid
WHERE a.published = 1 AND a.published=1 AND a.approved=1 AND c.published=1
ORDER BY a.id desc limit '.$limitstart.', '.$limit.'';
$db->setQuery($query);
//дальше уже обработка и вывод в цикле, в данном случае не актуально
Цитировать Сообщить модератору
0 Алексей отвечает 01.02.2011 19:05
А мне вот в этом месте: "//дальше уже обработка и вывод в цикле, в данном случае не актуально" очень даже актуально!)) Вот все делаю как у Вас в этом примере, но не работает и все! Вот после этой предпоследней строчки: "$db->setQuery($query);" каким образом посылать запрос? я уж и $rL=&$db->loadResult(); и $rL=&$db->LoadObject(); и $rL=&$db->loadObjectList(); и $rL=&$db->loadAssocList(); все перепробовал! и все равно выдает ошибку: "Warning: Invalid argument supplied for foreach()" Ну вот что я делаю не так?? Почему массив пустой?
Цитировать Сообщить модератору
0 Beliyadm отвечает 01.02.2011 19:12
Ну раз запись не одна, то соответственно нужно использовать что то вроде $rows = $db->loadObjectList(). Правильно понимаю, что это массив $rows у вас пустой? Раз так, значит ошибка в самом SQL запросе. Посмотрите еще оригинал статьи, там более подробно (правда. на английском).
Цитировать Сообщить модератору
0 Алексей отвечает 01.02.2011 19:33
Вот мой код: (только он уже написан по джумлапедии): //////////Begin ///// $db =& JFactory::getDBO(); $lim = $mainframe->getUserStateFromRequest("$option.li mit", 'limit', 14, 'int'); // Вот что это за переменная $option.limit ?? в любом случае даже если я просто ставлю, например 4, то все равно ошибка та же $lim0 = JRequest::getVar('limitstart', 0, '', 'int'); $db->setQuery("SELECT p.product_sku FROM #__{vm}_product AS p INNER JOIN #__{vm}_product_type_1 AS pt ON p.product_id = pt.product_id WHERE p.product_publish = 'Y' ORDER BY p.product_name ASC",$lim0, $lim); $rL=&$db->loadObjectList(); $d b->setQuery("SELECT COUNT(*) FROM #__{vm}_product AS p INNER JOIN #__{vm}_product_type_1 AS pt ON p.product_id = pt.product_id WHERE p.product_publish = 'Y'"); jimport('joomla.html.pagination'); $pageNav = new JPagination( $db->loadResult(), $lim0, $lim); foreach($rL as $r) { echo $r->product_sku; } echo $pageNav->getPagesLinks( ); //////////// End /////////// Все запросы рабочие, стабильно отображают то, что надо, до внедрения пагинации :) А еще, когда код срабатывал (я просто постояные правки вносил, пока гуглил, уже не уследить за ними), то отображался только getLimitBox() вместо getListFooter(), это я считаю очень странным. И LimitBox никуда ничего не отправлял, потому что в форму ничего не оборачивается при конечном выводе. Кстати да, надо ли самому весь этот код оборачивать в или все-таки класс пагинации сам должен это делать? Прошу помощи, добрый человек! И да, спасибо за столь быстрый отзыв!
Цитировать Сообщить модератору
0 Beliyadm отвечает 03.02.2011 20:54
Прошу простить, быстро глянув все достаточно корректно, надо разбираться детально. К сожалению в данный момент не имею такой возможности.
Цитировать Сообщить модератору
0 Саша пишет нам 05.03.2010 17:42
спасибо, попробую! но я так понял, что тут вывод ссылок происходит вверху, над выводимым материалом
Цитировать Сообщить модератору
0 Beliyadm отвечает 05.03.2010 17:50
Нет, с какой стати сверху? Мы в переменной $page_nav_links получили нашу навигацию, где мы ее будем выводить в каком месте данного файла (до цикла или после или везде) - дело совершенно наше, делаем echo $page_nav_links; и смотрим на результат Самое главное в данной задаче - не ошибиться с запросом в базу, все прочее весьма прозрачно
Цитировать Сообщить модератору
0 Саша пишет нам 15.03.2010 19:36
а в каких файлах надо смотреть, чтоб внести изменения в вывод навигации? к примеру: убрать знаки >> или подправить css все. нашел! статья супер! спасибо огромное!
Цитировать Сообщить модератору
0 Юрий пишет нам 18.03.2010 02:01
Спасибо, помогло)
Цитировать Сообщить модератору
0 Кирилл пишет нам 31.03.2010 21:58
Подскажите пожалуйста! Все сделал как написано, стали отображаться все страницы в навигации, но эта навигация не переносится на другую строчку когда заканчивается лист, а продолжается за пределами листа. Как это убрать?? Вот пример : http://rombk4.ru/index.php?option=com_content&view=article&id=21&Itemid=6
Цитировать Сообщить модератору
0 Beliyadm отвечает 31.03.2010 22:14
А это уже вопрос к вашей верстке, смотрите исходный код страницы (к примеру через firebug в мозилле очень удобно) на верстку этого куска и на соответствующие стили, в соответствии с этим и переделывайте.
Цитировать Сообщить модератору
0 Кирилл пишет нам 01.04.2010 13:30
Уже нашел какой стиль за это отвечает, добавил для этого стиля width: 100px; Но все равно вылазит. Т.е. все страницы в одну строчку пишутся. При чем у меня не один сайт на джумле, на другом сайте тоже пробывал добавить статью, разбил ее на много страниц, и исправил чтоб отображались все страницы в навигации (а не 10 как по умолчанию) И то же самое! Можете проверить. Прям не знаю чего делать то?
Цитировать Сообщить модератору
0 Admin пишет нам 14.04.2010 03:33
Круто канечно, еще бы разжевал для непонятливых учеников чего куда прописать ....
Цитировать Сообщить модератору
0 Beliyadm отвечает 14.04.2010 03:51
Странно конечно, но я думал, что люди пишущие свои компоненты в состянии разобраться что из этого кода куда работает
Цитировать Сообщить модератору
0 nikko пишет нам 16.01.2012 15:47
Описал способ "очеловечить" пагинацию, может кому интересно http://e-kzn.ru/rasshireniya/kak-izmenit-paginatsiiu-v-joomla-1-5.html
Цитировать Сообщить модератору
0 nik_neman пишет нам 24.02.2012 15:18
День добрый. Использую ads_manager.. но мне нужен другой вывод товаров.. товары вытаскиваю с помощью SQL-запроса.. сделал навигацию.. всё работает.. Но когда включил стандартное SEO - то получается следующие.. вывод разбивается на 4 страницы.. адрес первой страницы - price.loc/baseprice/148-evropeyskaya-santehnika/ .. при нажатии на 2 ссылку в навигации меня перекидывает на http://price.loc/baseprice/148-evropeyskaya-santehnika/page-1.html .. но товары не меняются.. при нажатии на 3 и 4 перехожу на http://price.loc/baseprice/148-evropeyskaya-santehnika/page-2.html .. но здесь пусто. Как быть?
Цитировать Сообщить модератору

Оставить коммент

Защитный код
Обновить

Откомменченное