Новости Joomla

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

zahar_92

  • Захожу иногда
  • 315
  • 8 / 0
Всем привет!
У меня стандартный модуль новостей выводит материалы из трех категорий. В нем есть сортировка по дате и по порядку. По дате меня не устраивает, а по порядку он выводит не так, как он (порядок) установлен в менеджере материалов. Особенно плохо то, что он выводит в перемешку материалы из разных категорий.
Хотелось бы подкорректировать вывод так, чтобы он сначала выводил материалы из одной категории, потом из второй, потом из третей.
Кто знает как это сделать?

Сам код сортировки очень маленький, но я не уверен, что дело в нем..
Код
// Set ordering
$ordering = $params->get('ordering', 'a.publish_up');
$model->setState('list.ordering', $ordering);

if (trim($ordering) === 'rand()')
{
$model->setState('list.ordering', JFactory::getDbo()->getQuery(true)->Rand());
}
else
{
$direction = $params->get('direction', 1)? 'DESC' : 'ASC';
$model->setState('list.direction', $direction);
$model->setState('list.ordering', $ordering);
}
*

beliyadm

  • Легенда
  • 9758
  • 1664 / 66
  • Севастополь, Россия
Стандартные модули новостей, увы, не умеют группировать по категориям (то есть нельзя сделать категория1 - список материалов, категория2 - список). Все идет в общий массив и сортируется уже там
Все истины, которые я хочу вам изложить, — бесстыдная ложь. Сделать всё хорошо
TLG: @Beliyadm
*

zahar_92

  • Захожу иногда
  • 315
  • 8 / 0
Хорошо, но он игнорирует сортировку по порядку менеджера материалов. В менеджере сортируешь одно,  а выводится другое.
*

beliyadm

  • Легенда
  • 9758
  • 1664 / 66
  • Севастополь, Россия
Какой именно модуль используете? Последних материалов или материалы категорий? У них разные настройки но вроде в каждом есть опция "сортировать по порядку ручному", просто она будет идти сквозная (сначала порядок одной категории потом другой, хотя могу ошибаться, давно не смотрел запрос)
Все истины, которые я хочу вам изложить, — бесстыдная ложь. Сделать всё хорошо
TLG: @Beliyadm
*

zahar_92

  • Захожу иногда
  • 315
  • 8 / 0
Модуль Новости, т.к. он выводит не просто список ссылок, а анонс. В нем есть сортировка по порядку, но как-то криво работает. В менеджере я расположил материалы в нужном порядке, но выводятся они не так.
*

zahar_92

  • Захожу иногда
  • 315
  • 8 / 0
Может тогда подскажите как выстраить материалы по возрастанию ID категории каждого материала?
По сути у каждого материала есть категория с ID, как выстроить материалы по этому числу?
*

zahar_92

  • Захожу иногда
  • 315
  • 8 / 0
Может тогда подскажете как выстроить материалы по возрастанию ID категории каждого материала?
По сути у каждого материала есть категория с ID, как выстроить материалы по этому числу?
*

zahar_92

  • Захожу иногда
  • 315
  • 8 / 0
Народ, подскажите, пожалуйста, как переписать вывод модуля так, чтобы материалы сортировались по ID категории?
Вот код вывода материала
Код
<?php for ($i = 0, $n = count($list); $i < $n; $i ++) : ?>
<?php $item = $list[$i]; ?>
<div class="item">
<?php require JModuleHelper::getLayoutPath('mod_articles_news', '_item'); ?>

<?php if ($n > 1 && (($i < $n - 1) || $params->get('showLastSeparator'))) : ?>
<span class="article-separator"> </span>
<?php endif; ?>
</div>
<?php endfor; ?>
Вот эта переменная содержит ID категории
Код
$item->catid
Google говорит нужно использовать функцию  Array(), но у меня не достаточно знаний!((
*

effrit

  • Легенда
  • 10132
  • 1118 / 13
  • effrit.com
https://myrusakov.ru/php-sort-marray.html
вот пример сортировки двумерного массива. пробуй.
сначала надо набить двумерный массив, чтобы был ключ ID категории.
Код
$array = array();
for ($i = 0, $n = count($list); $i < $n; $i ++) $array[] = array("cat" => $item->catid, "data" => $item);

далее, как в примере, потом пробуй вывести ещё через один цикл


хотя, наверно, логичнее было бы тупо свой модуль сделать, который средствами MySQL делает выборку уже с сортировкой, чтобы не извращаться )

*

zahar_92

  • Захожу иногда
  • 315
  • 8 / 0
За ответ, конечно, спасибо! Но если бы я разбирался в двумерных массивах, то не просил бы о помощи! К сожалению я не силен в этом. Все делаю с помощью Google..
*

beliyadm

  • Легенда
  • 9758
  • 1664 / 66
  • Севастополь, Россия
хотя, наверно, логичнее было бы тупо свой модуль сделать, который средствами MySQL делает выборку уже с сортировкой, чтобы не извращаться )
Именно так, но писать код и тестировать чтобы отдать здесь готовое решение у меня желания, к сожалению нет.
Все истины, которые я хочу вам изложить, — бесстыдная ложь. Сделать всё хорошо
TLG: @Beliyadm
*

effrit

  • Легенда
  • 10132
  • 1118 / 13
  • effrit.com
вот пример для стандартного шаблона (default)

Код

defined('_JEXEC') or die;
$array = array();
foreach ($list as $item) $array[] = array("cat" => $item->catid, "data" => $item);

  usort($array, "compare"); // Вызываем пользовательскую сортировку
  function compare ($v1, $v2) {
    /* Сравниваем значение по ключу cat */
    if ($v1["cat"] == $v2["cat"]) return 0;
    return ($v1["cat"] < $v2["cat"])? -1: 1;
  }

?>

<div class="newsflash<?php echo $moduleclass_sfx; ?>">
<?php foreach ($array as $it) : ?>
<?php
$item=$it[data];
//var_dump($item);
require JModuleHelper::getLayoutPath('mod_articles_news', '_item'); ?>
<?php endforeach; ?>
</div>
*

robert

  • Живу я здесь
  • 4974
  • 457 / 20
Попробуйте так: откройте файл XML модуля, найдите поле ordering, измените значение default  с "a.publish_up" на "a.catid, a.alias" и добавьте еще 1 option (вместо alias можете поставить другое поле)
Код
				<field
name="ordering"
type="list"
label="MOD_ARTICLES_NEWS_FIELD_ORDERING_LABEL"
description="MOD_ARTICLES_NEWS_FIELD_ORDERING_DESC"
default="a.catid, a.alias"
>
<option value="a.publish_up">MOD_ARTICLES_NEWS_FIELD_ORDERING_PUBLISHED_DATE</option>
...
<option value="a.catid, a.alias">MOD_ARTICLES_NEWS_FIELD_ORDERING_CAT_THEN_ALIAS</option>
</field>
В админке модуля выберите вариант по умолчанию или последний вариант.
« Последнее редактирование: 05.03.2018, 22:31:05 от robert »
Не будь паразитом, сделай что-нибудь самостоятельно!
*

zahar_92

  • Захожу иногда
  • 315
  • 8 / 0
вот пример для стандартного шаблона (default)

Код

defined('_JEXEC') or die;
$array = array();
foreach ($list as $item) $array[] = array("cat" => $item->catid, "data" => $item);

  usort($array, "compare"); // Вызываем пользовательскую сортировку
  function compare ($v1, $v2) {
    /* Сравниваем значение по ключу cat */
    if ($v1["cat"] == $v2["cat"]) return 0;
    return ($v1["cat"] < $v2["cat"])? -1: 1;
  }

?>

<div class="newsflash<?php echo $moduleclass_sfx; ?>">
<?php foreach ($array as $it) : ?>
<?php
$item=$it[data];
//var_dump($item);
require JModuleHelper::getLayoutPath('mod_articles_news', '_item'); ?>
<?php endforeach; ?>
</div>
Ты волшебник! Спасибо! Работает так, как нужно! :D
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

Модуль вывода похожих материалов с картинками

Автор Besa

Ответов: 3
Просмотров: 973
Последний ответ 20.04.2023, 20:25:50
от beliyadm
В админке не отображаются стили при редактировании материалов

Автор Аня

Ответов: 0
Просмотров: 429
Последний ответ 28.11.2022, 15:33:14
от Аня
Вывод материалов блогом с фильтром по меткам

Автор muzzy76

Ответов: 7
Просмотров: 649
Последний ответ 06.10.2022, 13:57:56
от muzzy76
Добавление поля в категорию материалов - Yootheme Pro

Автор Missile

Ответов: 3
Просмотров: 614
Последний ответ 14.04.2021, 02:20:20
от Alex Revo
Вывод материалов каатегории в модуль на первую страницу

Автор SynergyIT

Ответов: 3
Просмотров: 495
Последний ответ 07.04.2021, 10:46:32
от SynergyIT