Основной курс по Joomla

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

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

tora312

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

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

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, 14:05:58 от tora312 »

*

tora312

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

*

tora312

  • Осваиваюсь на форуме
  • ***
  • 92
  • 0

*

Aleks.Denezh

  • Практически профи
  • *******
  • 2787
  • 376
WHERE catid IN (10, 12, 13)
Мой  блог по разработке на Joomla CMS!
Хотите отблагодарить материально? Мой WMR: R861060179016

*

tora312

  • Осваиваюсь на форуме
  • ***
  • 92
  • 0
$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, 19:11:35 от tora312 »

*

fbr

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

В любом случае, посмотрите как там сделано :
modules/mod_articles_news/helper.php
modules/mod_articles_news/mod_articles_news.xml

*

tora312

  • Осваиваюсь на форуме
  • ***
  • 92
  • 0
Разница - в дальнейшей обработке. Я Хорошо знаю СSS, но плохо php. оч плохо. потому хочу получить данные, чтобы потом самой обработать.

*

fbr

  • Живу я здесь
  • ******
  • 1274
  • 140
Не понял логики.

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

Или я что-то упустил?

*

tora312

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

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

*

fbr

  • Живу я здесь
  • ******
  • 1274
  • 140

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

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

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

Почти все данные которые вам нужны - уже есть)

*

tora312

  • Осваиваюсь на форуме
  • ***
  • 92
  • 0
Крайний вопрос... если есть... есть где описание... или разбор mod_articles_news.php и helper.php

понимаю, глуп вопрос, а вдруг? это намного мне всё облегчит.)))

*

fbr

  • Живу я здесь
  • ******
  • 1274
  • 140
Почитайте здесь
и посмотрите остальные модули, они тоже на базе стандартного сделаны
Можно даже скачать и посмотреть как устроено