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

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

Модуль вывода новостей на несколько категорий

 (Прочитано 377 раз)
0 Пользователей и 1 Гость смотрят эту тему.
tora312
Осваиваюсь на форуме
***

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

Сообщений: 79


« : 04.11.2015, 12:44:15 »

Добрый день. Прошу помощи, тапки прошу не кидать, вопрос наверняка простой, я туповат, знаю. Просто помогите, коли можете.))) Спасиб.

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

PHP

Код:
// Принимаем переменные из админки - тут в массиве категории
$categs = $params->get('parent', array());
// Чистим ответ от скрипта
$id_parent = preg_replace('/[^0-9]/','', $_GET['id_parent']);

foreach ($categs as $categ)
{
// тут тупплю совсем, берёт последнюю выбранную категорию из массива
}

$db =& JFactory::getDbo();

// url к категории
$db->setQuery('SELECT path FROM #__categories WHERE id=\''.$categ.'\'');
$list = $db->loadObjectList();

foreach($list as $comp)
{
$path = $comp->path;
}

function expl_date ($date)
{
$date = explode(' ', $date); // В БД дата представлена в корявом виде. Сначала делим через пробел
$date = explode('-', $date[0]); // Потом делим через -
return $date = $date[2].'.'.$date[1].'.'.$date[0]; // Выставляем в привычном нам формате
}

function intro_text ($text)
{
// Уберём теги и оставим не более 175 символов
$text = strip_tags($text);
$text = trim ($text); // Удаляет из начала и конца оставшийся мусор
$text = mb_substr($text, 0, 175).'...';
return $text;
}

$query = 'SELECT id, title, alias, introtext, created FROM #__content WHERE catid=\''.$categ.'\' AND state=\'1\'';

// Рабочая часть

if($_GET['ajax'] == 'right') // Если придёт сообщение от js, что пользователь нажал вправо
{
$db->setQuery($query.'AND id<\''.$id_parent.'\' ORDER BY id DESC LIMIT 1');
$list = $db->loadObjectList();
foreach($list as $comp)
{
$id = $comp->id;
$date_aj = expl_date ($comp->created);
$title = $comp->title;
$alias = $comp->alias;
$introtext = intro_text ($comp->introtext);
preg_match_all('/<img[^>]*?src=\"(.*)\"/iU', $comp->introtext, $images); // Картинка
$trigger = 'da'; // Этот триггер нужен, чтобы когда дойдём до конца статей, начали сначала. Короче, всё по кругу.
}
if($trigger != 'da')
{
$db->setQuery($query.'ORDER BY id DESC LIMIT 1');
$list = $db->loadObjectList();
foreach($list as $comp)
{
$id = $comp->id;
$date_aj = expl_date ($comp->created);
$title = $comp->title;
$alias = $comp->alias;
$introtext = intro_text ($comp->introtext);
preg_match_all('/<img[^>]*?src=\"(.*)\"/iU', $comp->introtext, $images);
}
}
}
elseif($_GET['ajax'] == 'left') // Если придёт сообщение от js, что пользователь нажал влево
{
$db->setQuery($query.' AND id>\''.$id_parent.'\'ORDER BY id LIMIT 1');
$list = $db->loadObjectList();
foreach($list as $comp)
{
$id = $comp->id;
$date_aj = expl_date ($comp->created);
$title = $comp->title;
$alias = $comp->alias;
$introtext = intro_text ($comp->introtext);
preg_match_all('/<img[^>]*?src=\"(.*)\"/iU', $comp->introtext, $images); // Картинка
$trigger = 'da'; // Этот триггер нужен, чтобы когда дойдём до конца статей, начали сначала. Короче, всё по кругу.
}
if($trigger != 'da')
{
$db->setQuery($query.'ORDER BY id LIMIT 1'); // Открываем первый по списку материал
$list = $db->loadObjectList();
foreach($list as $comp)
{
$id = $comp->id;
$date_aj = expl_date ($comp->created);
$title = $comp->title;
$alias = $comp->alias;
$introtext = intro_text ($comp->introtext);
preg_match_all('/<img[^>]*?src=\"(.*)\"/iU', $comp->introtext, $images);
}
}
}
else // Если страница просто загружается впервые
{
$db->setQuery($query.'ORDER BY id LIMIT 1'); // Открываем первый по списку материал
$list = $db->loadObjectList();
foreach($list as $comp)
{
$id = $comp->id;
$date_aj = expl_date ($comp->created);
$title = $comp->title;
$alias = $comp->alias;
$introtext = intro_text ($comp->introtext);
preg_match_all('/<img[^>]*?src=\"(.*)\"/iU', $comp->introtext, $images); // Картинка
}
}

Нормально работает, НО на одну категорию. Помогите... если сможете, как сделать, чтобы работало на любое количество ЗАДАННЫХ ПОЛЬЗОВАТЕЛЕМ В parent категорий. Устал, моск ничё не видит уже. Может вообще всё коряво.((( Может проще можно.(((
« Последнее редактирование: 04.11.2015, 13:05:58 от tora312 » Записан
tora312
Осваиваюсь на форуме
***

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

Сообщений: 79


« Ответ #1 : 04.11.2015, 12:54:52 »

Код:
$query = 'SELECT id, title, alias, introtext, created FROM #__content WHERE catid=\''.$categ.'\' AND state=\'1\'';
- вот тут выборка по категории $categ - а нужно, чтобы не одна категория была, а несколько. Не идёт чёт.
Записан
tora312
Осваиваюсь на форуме
***

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

Сообщений: 79


« Ответ #2 : 06.11.2015, 09:27:19 »

Блин...
Записан
Aleks.Denezh
Практически профи
*******

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

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



« Ответ #3 : 06.11.2015, 11:59:34 »

WHERE catid IN (10, 12, 13)
Записан
tora312
Осваиваюсь на форуме
***

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

Сообщений: 79


« Ответ #4 : 06.11.2015, 18:05:24 »

$categs = $params->get('parent', array()); - берём из админки Joomla перечень категорий, которые использовать для вывода. Тут пользователь задает желаемый диапазон.

из этой таблицы __content нужно взять информацию по нескольким строкам сразу, данные из столбцов `id`, `title`, `alias`, `introtext`, `created`, `catid`, `ordering` одним запросом.) но не переменные - а получить массивы... или как это сделать я не пойму, чтобы потом при формировании страницы вывести на странице запрошенную информацию, которая вот задаётся пользователем в $categs.

Например... отсортируем по id для $categs = [12, 2]
Потом надо взять первые например 4 статьи (строки) и получить из них данные

`id`! `title`! `alias`! `introtext`! `created`1 `catid`    !    `ordering`
1 !      имя1 ! алиас1 ! текст1 !        дата 1 ! категория 12   ! порядок 2
2 !      имя2 ! алиас2 ! текст2 !        дата 2 ! категория 2     ! порядок 3
3 !      имя3 ! алиас3 ! текст3 !        дата 3 ! категория 2     ! порядок 1
4 !      имя4 ! алиас4 ! текст4 !        дата 4 ! категория 12   ! порядок 4

Чтобы потом можно вывести например echo $title[1]; echo $catid[4];

Выведется имя2 категория 12

Дико туплю всегда в php и запросы в БД
« Последнее редактирование: 06.11.2015, 18:11:35 от tora312 » Записан
fbr
Живу я здесь
******

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

Сообщений: 1250


« Ответ #5 : 06.11.2015, 18:13:34 »

Не увидел разницы с функционалом стандартного модуля Материалы-новости ...

В любом случае, посмотрите как там сделано :
modules/mod_articles_news/helper.php
modules/mod_articles_news/mod_articles_news.xml
Записан
tora312
Осваиваюсь на форуме
***

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

Сообщений: 79


« Ответ #6 : 06.11.2015, 18:45:44 »

Разница - в дальнейшей обработке. Я Хорошо знаю СSS, но плохо php. оч плохо. потому хочу получить данные, чтобы потом самой обработать.
Записан
fbr
Живу я здесь
******

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

Сообщений: 1250


« Ответ #7 : 06.11.2015, 19:00:50 »

Не понял логики.

Ставите стандартный модуль и обрабатываете его стилями как хотите!
Он выводит все указанные вами данные, и не нужно их добывать, тем более что php не очень

Или я что-то упустил?
Записан
tora312
Осваиваюсь на форуме
***

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

Сообщений: 79


« Ответ #8 : 06.11.2015, 19:30:46 »

Не всё так просто.) Мне не нравится его функционал. Я хочу сама поставить нужный отбор и обработку... чтобы, например, при порядке -1 была ссылка не на материал, а на категорию, где материал всегда будет вверху. Потом картинки... дело не только в стилях.))) Много там.))) Например, привязать Jquery, и сделать анимацию со сменяемыми блоками запросом гет - $_GET['ajax'] == 'left'.))) Я это умею, не умею сделать запрос к БД, чтобы получить данные, причём запрос с наименьшей нагрузкой на хост. Как-то так.) Не знаю как наиболее оптимально получить данные: `id`, `title`, `alias`, `introtext`, `created`, `catid`, `ordering для заданного диапазона категорий в порядке убывания или возрастания даты или id, скажем первые 5 или 10 статей (количество задаётся из админки). Мне для полного счастья вот этой малости не хватает.))) Ну... ещё кое-где вообще рандомную выборку сделать... это тож не знаю. Наверное, много хочу, да?))) Вот как сделать рандомную выборку? Наверняка, это оч. просто делается, печёнкой чую.))) Блина... проще слайдер на кверти сделать мне.))) Только с готовыми картинками, из БД я их тож не умею скопом получать.(((

Можно было б взять стандартный и перекроить... но мне моска не хватит.(((
Записан
fbr
Живу я здесь
******

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

Сообщений: 1250


« Ответ #9 : 06.11.2015, 19:58:08 »


Можно было б взять стандартный и перекроить... но мне моска не хватит.(((
Azn
Берете стандартный модуль,
открываете файл mod_articles_news.xml
переименовываете все mod_articles_news -> mod_mymodule
соответственно переименовываете файлы
mod_articles_news.php -> mod_mymodule.php
mod_articles_news.xml -> mod_mymodule.xml

и стандартно через менеджер расширений устанавливаете!

Все. Делайте с ним что хотите!
- добавляйте поля
- подключайте скрипты
- выводите картинки (на форуме обсуждалось)
....

Почти все данные которые вам нужны - уже есть)
Записан
tora312
Осваиваюсь на форуме
***

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

Сообщений: 79


« Ответ #10 : 06.11.2015, 23:13:47 »

Крайний вопрос... если есть... есть где описание... или разбор mod_articles_news.php и helper.php

понимаю, глуп вопрос, а вдруг? это намного мне всё облегчит.)))
Записан
fbr
Живу я здесь
******

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

Сообщений: 1250


« Ответ #11 : 06.11.2015, 23:57:05 »

Почитайте здесь
и посмотрите остальные модули, они тоже на базе стандартного сделаны
Можно даже скачать и посмотреть как устроено
Записан
Страниц: [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