Меняем количество статей на странице в инстант 2

+25
4.25K
Актуально для всех версий и до тех пор, пока не введут в админке настройку "Выводить на странице по… статей" для каждого типа контента. На момент написания актуальная версия 2.2.1

Так как константа 15 прописана в файле движка, придется применить хак. Откроем файл /system/controllers/content/frontenf.php, и в 127 строке после

  1. $perpage = self::perpage;
добавим

  1. if($ctype['name']=='news') $perpage=100;//zau4man
Все, теперь при просмотре раздела Новости (по адресу ваш сайт/news) будет выводится по 100 записей на страницу. По аналогии можно сделать для любого типа контента.

1. При обновлении движка на новую версию хак скорее всего слетит, придется прописывать снова.
2. И ждем когда r2 введет такую опцию в типы контента.
0
Val Val 8 лет назад #
А почему бы в самом начале файла ../system/controllers/content/frontend.php просто не поменять значение const perpage = 15 на любое желаемое?
+1
Loadырь Loadырь 8 лет назад #
Val , наверное потому, что ваш вариант применит значение ко всем типам контента, а Zau4man показывает как это сделать только для новостей. И по аналогии можно применить для других типов контента, причём для каждого свои значения.
0
Val Val 8 лет назад #
Да, точно
Zau4man:
Так как константа 15 прописана в файле движка, придется применить хак.
это я не внимательно прочитал zst
Тогда другой вопрос))) - зачем делать разное количество записей для вывода в пределах одного сайта? Т.е. для единообразия, вроде как, лучше выводить одинаковое количество записей разных типов контента.
0
Zau4man Zau4man 8 лет назад #
Все верно. Если на сайте только статьи, то да. Новости я указал для примера. Мне, например, понадобилось для раздела сайты. Хочу сделать его одной страницей. Вот так

""


Может понадобиться в разделе справочник. 15 названий организаций, даже если с телефонами и адресами, на страницу будет маловато. Неудобно искать. И таких примеров может быть много.
0
Luxin Luxin 8 лет назад #
Создание одного компонента для всего контента, наверно самое слабое звено в данной цмс. Чем это обосновывается, не знаю? Хотя в целом движок хорош.
0
Zau4man Zau4man 8 лет назад #
Тогда и Битрикс, и Друпал тоже слабые цмс.
Шаблоны, поля у типов контента настраиваются очень гибко, можно сваять многое. А чего нельзя - можно написать свой компонент.
+1
Luxin Luxin 8 лет назад #
ЦМС хорошая, идея совместить весь контент в одном компоненте, неудачная. Если необходимо внести какие-то изменения только для одного контента, то добавляется много лишнего кода, а это дополнительные затраты времени на выполнение движка и вероятность появления лишних ошибок.
+2
r2 r2 8 лет назад #
добавляется много лишнего кода, а это дополнительные затраты времени на выполнение движка и вероятность появления лишних ошибок
Ага, то есть иметь кучу одинакового кода (просмотр категории, записи, фильтрация, создание, редактирование, удаление) для одинаковых типов контента, отличающихся, по сути, только набором полей, это не "много лишнего" получается? С лишними ошибками то же самое. Править ошибки в одной точке вроде бы проще, чем в десятке разных?
+1
Luxin Luxin 8 лет назад #
Частично Вы правы, если делать в лоб.
ООП помогает этого избежать. А дублирования в коде и так хватает.
Да хотя бы, то решение, что привели в данном блоге - это не дублирование?
0
r2 r2 8 лет назад #
То есть вас смущает что свою правку нужно обернуть в один IF чтобы она действовала только на нужный тип контента? И вы считаете что иметь отдельный компонент для каждого вида контента (на 98% целиком дублирующий все остальные) это более грамотно чем необходимость обернуть в IF?
0
Luxin Luxin 8 лет назад #
Таких "IF" хватает и в контроллерах и в шаблонах.
Из-за таких "IF" очень много возникает вопросов на форуме, потому что в одном месте учли, а в другом нет.
А дублировать я не предлагаю.
Я только уже писал:
ООП помогает этого избежать.
Расшифрую, если непонятно. Создается класс компонент, а все компоненты наследуются от данного класса, где и реализуется их различие без всяких "IF".
Давно хотел сделать ответвление ветки, но лицензия GPL и моя лень мне мешают. ;)
0
Luxin Luxin 8 лет назад #
Тот, кто знает хорошо php, думаю, что со мной согласятся. Во всяком случае я так реализовал бы, если бы был в команде разработчиков.
Дальше не вижу смысла спорить.
Успехов в развитии.
0
r2 r2 8 лет назад #
Создается класс компонент, а все компоненты наследуются от данного класса, где и реализуется их различие без всяких "IF"
Ну да, а когда обычному пользователю не-программисту захочется заиметь на сайте еще один каталог, отличающийся от статей или объявлений всего парой полей он будет сам создавать новый класс, наследовать, добавлять поля в коде, регистрировать в базе и т.д., вместо того чтобы сделать пару кликов в админке.
0
My-InstantCMS.Ru My-InstantCMS.Ru 8 лет назад #
Не понимаю из за чего спор smile но думаю решения очень простая
Добавить поле в настройках контента, допустим perpage (по умолчанию 15)
Потом в \system\controllers\content\frontend.php строку 127
Код PHP:
  1. $perpage = self::perpage;
Заменить на
Код PHP:
  1. $perpage = $ctype['perpage'];
Так у каждого типа контента будет свой perpage
+1
r2 r2 8 лет назад #
Это не спор, просто был вопрос "чем это обосновывается", я пытался донести. По теме поста - да, нужна опция и она обязательно будет.
0
Oleg_z75 Oleg_z75 8 лет назад #
Luxin # Я в шоке от ваших изречений! А Вы не заметили, что разработчики создали ЦМС (instant 2.х.х) равную платной, хорошей платной цмс по функционалу и я надеюсь, судя по разработкам форума и конструктора форм, что этим дело не закончится. Если Вы такой профи - значит Вы с лёгкостью сможете вырезать с кода, что, что Вам не нужна и написать свой "Нужный" компонент или что то вроде этого. Или я Вас не правильно понял. Поправьте...
0
Luxin Luxin 8 лет назад #
А я что утверждал обратное? То, что ЦМС хорошая, полностью согласен. Разработчики молодцы!
Не ошибается только тот, кто ничего не делает. Я только указал слабое место в этой ЦМС с моей точки зрения.
А соглашаться или нет, каждый решает сам.
0
Luxin Luxin 8 лет назад #
Я не пытаюсь обидеть разработчиков.
Вся критика в рамках улучшения ЦМС.
Для себя я и сам могу исправить.
0
Колян Колян 8 лет назад #
Почему нельзя сделать по уму? Без этих переходов постраничных, крутишь колесо и подгружаются превьюшки контента по мере прокрутки и не нужно вообще никаких количеств выставлять (про списки пользователей не забыть и мапс)
+1
Val Val 8 лет назад #
Вам сюда: http://instantcms.ru/blogs/bitblog/modul-avtopodgruzki-stranic-dlja-instantcms-2-x.html - один из вариантов решения joke
0
Колян Колян 8 лет назад #
Спасибо! Спасибок накоплю вышлю, а пока плюс.
0
lokanaft lokanaft 8 лет назад #
Можно было бы хуком сделать, но всё равно надо идти в файлы и добавлять в манифест строку...
0
My-InstantCMS.Ru My-InstantCMS.Ru 8 лет назад #
А можете подсказать, как с помощью хука, повлиять на запрос?
0
PIN PIN 8 лет назад #
не понял как собрались хукать. посмотрел, что формирование списка в
Код PHP:
  1. public function renderItemsList(...
начинается раньше штатно вложенного вызова хука
Код PHP:
  1. ...
  2. $this->model->limitPage($page, $perpage);
  3. list($ctype, $this->model) = cmsEventsManager::hook(...
0
lokanaft lokanaft 8 лет назад #
Посмотрите на приведённый вами же код и догадайтесь сами
0
PIN PIN 8 лет назад #
Странный разговор... Тогда догадайтесь что я вам сейчас ответил.

Ни каких хуков/хаков не нужно!
Сделать постраничный вывод списка контента с персональным для каждого типа количеством элементов на страницу можно и так. И не надо будет бояться очередного обновления.
+1
r2 r2 8 лет назад #
в хук передается $this->model, в котором можно переопределить лимит, т.к. непосредственно сам запрос происходит ниже
0
PIN PIN 8 лет назад #
заметил, поспешил, каюсь
0
PIN PIN 8 лет назад #
Для тех у кого кипит постраничный вывод с произвольным количеством записей.
Работаем со стилями вывода списка контента: /templates/{шаблон}/content/
далее берём любой стиль списка, например default_list_featured.tpl.php и делаем его копию с новым именем файла, например default_list_featured_43.tpl.php
В самом начале этого фала вставляем:
Код PHP:
  1. <?php
  2. $perpage = 43;
  3. $content_model = cmsCore::getModel('content');
  4. $content_model -> limitPage($page,$perpage);
  5. $items = $content_model->getContentItems($ctype['name']);
  6. ?>
Переходим в админку и в необходимом типе контента меняем стиль списка на default_list_featured_43. Конечно теперь будет ругаться на отсутствие LANG_CP_LISTVIEW_STYLE_FEATURED_43, а это вы и без меня знаете куда и что писать.
+1
maxisoft maxisoft 8 лет назад #
И это правильное решение? То есть 2 раза дергать базу на получение контента правильно? facepalm
0
PIN PIN 8 лет назад #
Разве разговор о правильности?! Вопрос избавить себя от рутины при обновлении. С другой стороны +1 повторный запрос на который потратится 0.0004 сек. что-то решает или чему-то мешает? на общем фоне запросов от 40 до 60-ти штук
+1
maxisoft maxisoft 8 лет назад #
Честный и открыты подход разработчика, просто откуда взялась цифра 0.0004 сек, откуда взялся 1 запрос, если кол-во запросов будет равно кол-во пользователей, НУ ДА ВСЕХ спасет кеш.

Просто это очередной костыль для решения простой задачи которая и так должна быть в системе. R2 правильно сказал что ее нужно будет сделать по умолчанию, поэтому чем Ваше решение круче предложенного lokanaft - его решение тоже не зависит от обновления системы.
+1
PIN PIN 8 лет назад #
) "Для тех у кого кипит..." - начало данной ветки, должно было что-то сказать. Или так все пишут когда находят самое правильное решение?!

Сообщение от R2 видел. Давно просили и он подтвердил что это будет реализовано. Просто отлично.

Не ужели выше представленное решение вы противопоставили ... !? shock



хотя я не понял зачем пользователей приплели, ну если надо.. то тогда на фоне суток посмотрим
1 запрос * 1000 пользователей в минуту * 24 часа = 576 сек. в сутки))
0
Loadырь Loadырь 8 лет назад #
PIN:
С другой стороны +1 повторный запрос на который потратится 0.0004 сек. что-то решает или чему-то мешает? на общем фоне запросов от 40 до 60-ти штук
Когда на фоне 40-60 запросов, поневоле задумываешься, где их можно сократить, а про добавление очередного дважды приходится подумать, стоит ли оно того. Ваш код действительно спасает от некоторой "рутины при обновлениях". Однако при смене шаблона придётся делать не только новую вёрстку, но и восстанавливать, тот алгоритм который прописан в файлах шаблонов. А представьте, если это будет делать другой человек. Поэтому лучшее решение будет от r2, но на данный момент мне больше нравится вариант от lokanaft.
0
PIN PIN 8 лет назад #
сам постоянно кошусь на это число, а особенно когда еще и виджеты особо активны. 72 видел как-то.
У R2 все карты. И я за внедрение функции в коробку.
Заплатка есть заплатка. Хотя... каждому шаблону своя длина контента ))), ура!
0
PIN PIN 8 лет назад #
а самое лучшее решение, если на то пошло, у Zau4man, вставил строчку и без сторонних запросов и переходов все нормально отрабатывает
0
Loadырь Loadырь 8 лет назад #
PIN:
если на то пошло, у Zau4man, вставил строчку и без сторонних запросов
точно, я его и имел в виду когда писал слово lokanaft laugh
0
PIN PIN 8 лет назад #
))
0
Luxin Luxin 8 лет назад #
В системе мало хуков. Было бы больше, многое можно было бы реализовать.
Но хуки такая штука, что на все случаи не предусмотришь. :(
+2
PIN PIN 8 лет назад #
с хуками надо быть аккуратным, как бы нокаута не получить
если вносишь изменения, есть шанс что другой компонент это не съест.
+1
Luxin Luxin 8 лет назад #
Да, это их недостаток.
0
Старый балбес Старый балбес 8 лет назад #
Решений много, столько будет и толкований.
Не проще считать в конфигурации опций контроллера "content" ключ массива [лимит выборки] для типа контента ?
Ни одного лишнего запроса, нет правок шаблонов, не зависит от обновления,
Для каждого нового типа контента создается - редактируется своя настройка perpage!

Еще от автора

Готовый сайт лендинг компании по подбору персонала
Делал два года назад. Заказчик сменил профиль и сайт не пригодился.
Выведем контент группы в списке полей группы
Поле позволяет в списке полей группы вывести последний контент этой группы.
Чиним реферальные ссылки биллинга при закрытом сайте
Проблема такая: если сайт закрыт, то при переходе по реферальной ссылке типа /r/1 пользователя перехватывает компонент Авторизация, и хук биллинга, ко
Используя этот сайт, вы соглашаетесь с тем, что мы используем файлы cookie.