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

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

Порядковый номер статьи в менеждере

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

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

Сообщений: 79


« : 15.06.2016, 15:30:45 »

Здравствуйте.

У меня Joomla 3.

Мне понадобилось получить порядковый номер статьи так, как он указан в менеджере. Получить в файле blog_item.php.

Не знаю, как это сделать... Печёнкой чую, просто...

Например:

echo $this->item->id; - идентификатор статьи. А как узнать order? echo $this->item->order; - ниработает!(((

Максимум приблизился:

$this->state->def('list.ordering'); - указывает порядок сортировки... но мне нужен сам ордер статьи... чтобы выловить ту, у которой он -1...

Спасибо заранее.
Записан
Aleks.Denezh
Практически профи
*******

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

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



« Ответ #1 : 15.06.2016, 15:33:59 »

потому что нет поля `order` в таблице #__content, есть поле `ordering`!
Записан
tora312
Осваиваюсь на форуме
***

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

Сообщений: 79


« Ответ #2 : 15.06.2016, 15:39:33 »

потому что нет поля `order` в таблице #__content, есть поле `ordering`!

echo $this->item->ordering; тоже не работает. Не подскажите, как правильно написать?
Записан
tora312
Осваиваюсь на форуме
***

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

Сообщений: 79


« Ответ #3 : 15.06.2016, 16:26:46 »

Или как-то иначе идентифицировать статью с порядком -1.
Записан
NewUsers
Давно я тут
****

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

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


« Ответ #4 : 15.06.2016, 16:42:37 »

echo $this->item->ordering; тоже не работает. Не подскажите, как правильно написать?

Для начала сделай вот так
Код
<?php print_r($this->item); ?>
и посмотри какие данные выводятся....
Записан
tora312
Осваиваюсь на форуме
***

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

Сообщений: 79


« Ответ #5 : 15.06.2016, 16:54:18 »

Для начала сделай вот так
Код
<?php print_r($this->item); ?>
и посмотри какие данные выводятся....


Данные на пол страницы вывел. Среди них не увидел ордера со значением -1 для соответствующей страницы, у которой он -1... ахтунг, получается не получить так ордер? Где-то он же есть... нужен один только вот ордер и будет счастье!

Близкое... но, видеть, не то... кусок того "много", где есть "order" хоть в каком-то виде:

 [show_subcat_desc_cat] => 1 [show_cat_num_articles_cat] => 1 [num_leading_articles] => 1 [num_intro_articles] => 9 [num_columns] => 1 [num_links] => 0 [multi_column_] => 1 [show_subcategory_content] => -1 [show_pagination_limit] => 1 [filter_field] => hide [show_headings] => 1 [list_show_date] => 0 [date_format] => [list_show_hits] => 1 [list_show_author] => 1 [orderby_pri] => none [orderby_sec] => order [order_date] => published [show_pagination] => 2 [show_pagination_results] => 0 [show_featured] => show [show_feed_link] => 1 [feed_summary] => 0
Записан
zomby6888
Живу я здесь
******

Репутация: +168/-3
Offline Offline

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


« Ответ #6 : 15.06.2016, 16:59:59 »

В $this->item у вас судя по всему категория а не статья. Не ту переменную и не там где надо используете.
Записан
tora312
Осваиваюсь на форуме
***

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

Сообщений: 79


« Ответ #7 : 15.06.2016, 17:10:23 »

В $this->item у вас судя по всему категория а не статья. Не ту переменную и не там где надо используете.

Неа. Статья там. echo $this->item->id; даёт идентификатор статьи, а не категории. Там вместе данные и по блогу категорий... Но в блоге категории blog_item.php, хотя может и другая переменная нужна. ...но к результату это меня не приближает.
Записан
Aleks.Denezh
Практически профи
*******

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

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



« Ответ #8 : 15.06.2016, 17:12:09 »

echo $this->item->ordering; тоже не работает. Не подскажите, как правильно написать?
значит в запросе не получается это поле! Без хака ядра ничего не получится!
Записан
tora312
Осваиваюсь на форуме
***

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

Сообщений: 79


« Ответ #9 : 15.06.2016, 17:15:23 »

значит в запросе не получается это поле! Без хака ядра ничего не получится!
Да у меня и так хак ядра, правлю ж blog_item.php... собственно, там и нужен для условия. Мне нужна статья в блоге с ордером -1. Если есть, нужно по-особому вывести в блоге. Как вывести - знаю. Как выловить не знаю.(((

И blog.php уже перенаправил и изменил как надо. Вот на этой мелочи "ордер", ёлки, встал и всё тут.
« Последнее редактирование: 15.06.2016, 17:20:02 от tora312 » Записан
Aleks.Denezh
Практически профи
*******

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

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



« Ответ #10 : 15.06.2016, 17:18:11 »

Да у меня и так хак ядра, правлю ж blog_item.php... собственно, там и нужен для условия. Мне нужна статья в блоге с ордером -1. Если есть, нужно по особому вывести. Как вывести - знаю. Как выловить не знаю.(((
blog_item.php как бы можно в шаблоне переопределить:
ПЕРЕОПРЕДЕЛЕНИЕ ШАБЛОНОВ ВЫВОДА КОМПОНЕНТОВ И МОДУЛЕЙ

что не будет хаком ядра! А так придется модель хакать, и при обнове Joomla снова хакать!
Записан
tora312
Осваиваюсь на форуме
***

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

Сообщений: 79


« Ответ #11 : 15.06.2016, 17:21:27 »

blog_item.php как бы можно в шаблоне переопределить:
ПЕРЕОПРЕДЕЛЕНИЕ ШАБЛОНОВ ВЫВОДА КОМПОНЕНТОВ И МОДУЛЕЙ

что не будет хаком ядра! А так придется модель хакать, и при обнове Joomla снова хакать!

А... плохо. Я думал это одно значение получить можно. Вся задумка на том строилась. Вот же... пойду, напьюсь с горя. Хз что делать.
Записан
zomby6888
Живу я здесь
******

Репутация: +168/-3
Offline Offline

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


« Ответ #12 : 15.06.2016, 17:21:47 »

Ну можно просто отдельный запрос написать к базе. Зачем хакать то. Это конечно нехорошо, запрос в шаблоне, но что еще делать то? Там в модели на фронте действительно это поле не выбирается. Можно воспользоваться еще моделью из административной части
Записан
tora312
Осваиваюсь на форуме
***

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

Сообщений: 79


« Ответ #13 : 15.06.2016, 17:27:33 »

Ну можно просто отдельный запрос написать к базе. Зачем хакать то. Это конечно нехорошо, запрос в шаблоне, но что еще делать то? Там в модели на фронте действительно это поле не выбирается. Можно воспользоваться еще моделью из административной части

А как?) Желательно без запроса к БД.)
Записан
zomby6888
Живу я здесь
******

Репутация: +168/-3
Offline Offline

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


« Ответ #14 : 15.06.2016, 17:30:45 »

Ну самое простое

Код
$ordering = JFactory::getDBO()->setQuery('SELECT ordering FROM #__content WHERE id = ' . $this->item->id)->loadResult();
 

Цитировать
Желательно без запроса к БД.)

Там в любом случае будет запрос. Можно просто вызвать модель из административной части. Но в данном случае этоо только хуже в плане производительности. И так лишний запрос. А там еще куча лишних данных и методов фреймворка.
« Последнее редактирование: 15.06.2016, 17:53:45 от zomby6888 » Записан
tora312
Осваиваюсь на форуме
***

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

Сообщений: 79


« Ответ #15 : 15.06.2016, 17:33:19 »

Ну самое простое

Код
$ordering = JFactory::getDBO()->setQuery('SELECT ordering FROM #__content WHERE id = ' . $this->item->id);
 

как то так

Понятно.) Спс.
Записан
zomby6888
Живу я здесь
******

Репутация: +168/-3
Offline Offline

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


« Ответ #16 : 15.06.2016, 17:35:19 »

Хотя это тоже плохо для каждого айтема отдельный запрос. Лучше сделать один запрос и получить сортировку для всех айтемов сразу. Зависит от того сколько у вас там статей в блоге.
Записан
tora312
Осваиваюсь на форуме
***

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

Сообщений: 79


« Ответ #17 : 15.06.2016, 17:37:30 »

Хотя это тоже плохо для каждого айтема отдельный запрос. Лучше сделать один запрос и получить сортировку для всех айтемов сразу.

Ох... а как сие реализовать? Статей сколько будет - не знаю сам.)
Записан
zomby6888
Живу я здесь
******

Репутация: +168/-3
Offline Offline

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


« Ответ #18 : 15.06.2016, 17:39:43 »

Вы смотрите по производительности. Если у вас там 2-3 статьи в блоге то можно и отдельным запросом
Записан
zomby6888
Живу я здесь
******

Репутация: +168/-3
Offline Offline

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


« Ответ #19 : 15.06.2016, 17:44:31 »

В случае если статей много делаете запрос:
$items = JFactory::getDBO()->setQuery('SELECT ordering,id FROM #__content')->loadObjectList();

Дальше наверное придется пройти циклом по $items чтобы сформировать массив ключами которого будут идешники статей. Ну и выводить сортировку из этого массива.
Записан
tora312
Осваиваюсь на форуме
***

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

Сообщений: 79


« Ответ #20 : 16.06.2016, 09:00:32 »

В случае если статей много делаете запрос:
$items = JFactory::getDBO()->setQuery('SELECT ordering,id FROM #__content')->loadObjectList();

Дальше наверное придется пройти циклом по $items чтобы сформировать массив ключами которого будут идешники статей. Ну и выводить сортировку из этого массива.

Интересный вариант, но кажется, сложный и навороченный, что ли. Где-то же сидят эти ордеры, ведь в блоге они упорядоченно выходят, а не как попало... как-то блог понимает, что с ордером -1 надо сверху ставить всегда...

А какие ещё массивы уже есть и можно получить в blog_item.php кроме $items и state ?
« Последнее редактирование: 16.06.2016, 09:44:27 от tora312 » Записан
tora312
Осваиваюсь на форуме
***

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

Сообщений: 79


« Ответ #21 : 16.06.2016, 11:56:54 »

Короче, сделал. С помощью такой-то матери, ну как обычно это.

Кому интересно или нужно, вот на мой взгляд НАИБОЛЕЕ ОПТИМАЛЬНЫЙ вариант решения задачи. Задача: найти ID материала с порядком -1 (ordering=-1) в конкретном блоге категорий.

Перенаправляю в шаблон файлы blog.php и blog_item.php.

Добавляю в blog.php сразу после

Код:
defined('_JEXEC') or die;

JHtml::addIncludePath(JPATH_COMPONENT . '/helpers');

JHtml::_('behavior.caption');

минимизированный запрос к БД... оптимальнее запроса придумать не могу:

Код:
$id_order = array();
$id_order = JFactory::getDBO()->setQuery('SELECT `id` FROM #__content WHERE `catid`=\''.$this->category->id.
'\' AND `ordering`=\'-1\' LIMIT 1')->loadObjectList();

Далее в том же файле blog_item.php нахожу массив, перебирающий $this->intro_items as $key => &$item и перед обращением к blog.php правлю так (одна строчка добавляется $item->id_order = $id_order[0]->id;):

Код:
itemprop="blogPost" itemscope itemtype="https://schema.org/BlogPosting">
<?php
$item->id_order = $id_order[0]->id;
$this->item = & $item;
echo $this->loadTemplate('item');
?>

А потом уже в blog.php вызываю $this->item->id_order

Всо. Дальше делаю с нужной статьёй через условия что хочу. Если кто-то из гуру найдёт более оптимальное решение... хотя вряд ли даже искать будет. Всё равно я крут.) 2 дня думал, чтобы за 20 минут сделать.)))) Отдельное спасибо zomby6888. Всем удачи!
« Последнее редактирование: 16.06.2016, 13:37:34 от tora312 » Записан
Страниц: [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