Урок 7. Отображение списка добавленных новостей

Приветствую следующем уроке мини-курса по созданию собственного несложного компонента для системы управления контентом Joomla. На прошлом уроке мы реализовали механизм сохранения и редактирования новостей. Сейчас необходимо отобразить добавленные новости на странице вида Менеджера новостей.

Старт! Честный VDS/VPS, на котором «Лунная База» живет уже 20+ лет

Задумываетесь о том, чтобы поднять свой pet-проект, сайт клиента или настроить окружение для разработки? Уже пора подумать, где арендовать железо.

Лунная База хостится на FirstVDS более 20 лет. Мыслей о том, чтобы перебраться на другой хостинг, не было ни разу (хотя опыт работы с другими вариантами, конечно, есть).

Бывали разные ситуации, но они бывают на любом железе. Главное, что нужно понять: здесь нет маркетинговой шелухи и сказок про «мы всё сделаем за вас». Если вы берете VDS — вам дают полный root, возможность накатить любую ОС и не лезут в ваши конфиги.

Если в саппорт написать с вопросом по вашему коду и получить ответ: «Читайте документацию и разбирайтесь сами» или «Обратитесь к профильному специалисту» — это не повод обижаться. Это повод углубить свои знания в DevOps и сайтостроении! Бегите от тех, кто пообещает: «Мы всё чиним и настраиваем абсолютно бесплатно!». Никто никогда не работает «по доброте душевной» в ущерб себе, а бесплатный сыр в администрировании обычно заканчивается сломанной базой данных.

Что по факту: Гибкое масштабирование ядер и RAM, экономия по сравнению с физическими серверами и адекватная панель ispmanager, если она вам нужна.



Переходим в исходник компонента новостей, в каталог views, нас интересует вид news. Открываем файл view.html.php в текстовом редакторе. В методе display() мы обращаемся к свойству items с объектом данного вида. Данное свойство мы здесь же и опишем protect $items. Соответственно, в данное свойство сохраним массив объектов с информацией по новостям, которые добавлены в базу данных. При этом данный массив сформирует метод модели get('Iterms'). Пэтому обращаемся к методу посреднику get, который позволяет нам получить доступ к методам модели и вызываем на исполнение метод get('Iterms'). То есть здесь мы обращаемся к методу модели getIterms. Непосредственно из вида мы обращаемся к модели.

Также здесь мы с вами обратимся к свойству pagination. В данное свойство мы сохраняем объект постраничной навигации. Потому что, если мы отображаем на экран некий список элементов, значит обязательно необходимо использовать постраничную навигацию для того, чтобы порционно отображать на экран определенное количество элементов. Соответственно метод, который вернет объект постраничной навигации это метод моделей get('Pagination'). То есть вы данной строке мы обращаемся к методу getPagination. Сохраняем изменения.

Сейчас нам необходимо перейти в модель, а значит переходим в исходники компонента com_news, далее models, далее создаем модель news.php. Напоминаю: имя модели совпадает с именем вида. Мы работаем с видом news, а значит и модель необходимо формировать в файле news.php.

Проверяем, определена ли системная константа, далее формируем класс будущей модели. То есть class: дальше имя компонента News, дальше ключевое слово Model, которое указывает, что данный класс принадлежит к моделям, и соответственно имя модели News. Данный класс наследует функционал от родительского класса JModelList. Это еще один родительский класс модели, который используется для работы со списком элементов. То есть нам необходимо отобразить несколько новостей, то есть те новости, которые добавлены в базу данных. Это список, а значит, для работы со списком мы используем родительский класс JModelList.

В данном классе уже описан метод getItems и уже описан метод getPagination. Метод getItems работает с неким SQL-запросом, который должен вернуть метод getListQuery. Соответственно изначально данный метод пуст, и мы должны переопределить данный метод, дабы сформировать sql-запрос, который будет выполнен для выборки необходимых элементов и необходимых таблиц. То есть по сути в родительской модели в методе в классе JModelList описана заготовка метода get('Iterms'). Его функционал полностью определен, но работает он с определенным запросом, который мы должны сформировать. Значит в модели мы формируем закрытый метод protected function getListQuery, который должен вернуть SQL-запрос, который впоследствии будет выполнен методом get('Iterms'). Таким образом будет осуществлена выборка данных из базы данных.

Как сформировать SQL-запрос? Во первых мы создаем временную переменную $db, и в данную переменную мы должны сохранить объект драйвера по работе с базой данных. Для получения объекта драйвера, мы обращаемся классу JFactory (конструктор объектов) и вызываем на исполнение метод getDbo()


Для того, чтобы полностью разобраться, как обеспечить функционал панели администратора разрабатываемого компонента, а именно, отобразить на главной странице компонента список ранее сохраненных новостей. При этом Вы узнаете, как получить данные, используя модель, как сформировать запрос для выборки записей из базы данных, как вывести данные, используя макет, а также, как реализовать механизм изменения состояния новостей. Для этого смотрите видео-урок канала WebForMySelf на YouTube:

Продолжение → «Урок 8. Список новостей пользовательской части»
Ссылка на оглавление со списком всех уроков мини-курса WebForMySelf «Создание компонента для Joomla 3 за два вечера»

Самый честный хостинг за 20+ лет существования Лунной Базы

Задумываешься о том, чтобы поднять свой сайт в Интернете? Уже пора подумать о том, какой хостинг выбрать?

Лунная База хостится 20+ лет на firstDVS. При этом, мыслей о том, чтобы перебраться на другой хостинг не было. (Но, при этом есть опыт работы с другими вариантами.)

Бывали с firstDVS разные ситуации, но, они бывают на всех хостингах. Единственное, что тут важно понять, - это то, что никто ничего тебе не будет впаривать... Но, и работать за тебя тоже никто не станет. Если в саппорт ответили: «Читайте по ссылке и разбирайтесь сами...» или вообще «Обратитесь за помощью к специалисту», - это повод углубить свои знания в области сайтостроения, а не бежать к тем, что пообещают: «Мы всё чиним и всё делаем за своих клиентов абсолютно бесплатно!» Никто никогда ничего ни за кого "по доброте душевной" не делал, не делает и не будет делать!

Старт! Горячий старт на просторы интернета
Старт! Горячий старт на просторы интернета
Старт! Меню