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

tora312

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

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

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

tora312

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

tora312

  • Захожу иногда
  • 110
  • 2 / 2
*

Aleks.Denezh

  • Живу я здесь
  • 3406
  • 428 / 4
WHERE catid IN (10, 12, 13)
*

tora312

  • Захожу иногда
  • 110
  • 2 / 2
$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, 17:11:35 от tora312 »
*

fbr

  • Завсегдатай
  • 1625
  • 189 / 7
Не увидел разницы с функционалом стандартного модуля Материалы-новости ...

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

tora312

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

fbr

  • Завсегдатай
  • 1625
  • 189 / 7
Не понял логики.

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

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

tora312

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

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

fbr

  • Завсегдатай
  • 1625
  • 189 / 7

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

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

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

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

tora312

  • Захожу иногда
  • 110
  • 2 / 2
Крайний вопрос... если есть... есть где описание... или разбор mod_articles_news.php и helper.php

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

fbr

  • Завсегдатай
  • 1625
  • 189 / 7
Почитайте здесь
и посмотрите остальные модули, они тоже на базе стандартного сделаны
Можно даже скачать и посмотреть как устроено
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

Отправка файлов через ajax в модуль Joomla

Автор hemicide

Ответов: 19
Просмотров: 1052
Последний ответ 11.04.2022, 08:44:33
от sivers
Избранное для меню и/или категорий

Автор platonische

Ответов: 3
Просмотров: 394
Последний ответ 19.10.2020, 12:34:12
от platonische
Переменная для вывода ссылки

Автор rubinded

Ответов: 3
Просмотров: 531
Последний ответ 03.03.2020, 08:28:13
от sivers
Модуль обратной связи. Как использовать свойство context в ajax запросе

Автор ushangi

Ответов: 0
Просмотров: 480
Последний ответ 15.02.2020, 22:08:12
от ushangi
Связать две таблицы с БД для дальнейшего вывода данных с них

Автор golinejj

Ответов: 16
Просмотров: 754
Последний ответ 06.02.2020, 15:40:58
от golinejj