Урок 3. Точка входа компонента Joomla. Первый вид

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

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

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

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

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

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

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



Переходим в исходных файлах CMS Joomla на сервере (сейчас работаем уже с установленным компонентом). Переходим в каталог administrator (разработку начинаем с панели администратора компонента). Далее каталог component – это каталог, в котором установлены все компоненты панели администратора. И соответственно папка com_news. Это компонент, с которым мы работаем.

Открываем файл news.php - это точка входа в компонент новостей. Открываем тут <?php, и первым делом мы должны проверить, определена ли системная константа с именем _JEXEC, используя функцию defined:

defined('_JEXEC') or exit();

Данная константа нужна для предотвращения прямого доступа к файлам CMS Джумла, и данная проверка должна быть прописана в каждом PHP файле CMS Joomla. Константа _JEXEC определяется в точке входа в панель администратора, т.е. в файле index.php каталога administrator. Давайте откроем данный файл в текстовом редакторе, и на двадцать третьей строке вы увидите определение данной константы. То есть, если мы попытаемся обратиться к файлу news.php напрямую, если в браузере пропишем путь к данному файлу, то сразу же отработает данная строка: данная константа в данном файле не определяется, и сразу же будет выполнен выход из приложения. Если же мы обращаемся к компоненту, то в любом случае обращение к компоненту выполняется из главной точки входа из файла index.php, в котором данная константа определяется, а значит функция exit() не выполняется.

Дальше создаем временную переменную $controller, в которую мы запишем объект контроллера компонента новостей. Того контроллера, который и выполнит поставленную задачу. Для получения данного объекта мы обращаемся к родительскому классу JControllerLegacy - это родительский контроллер для всех контроллеров CMS Joomla. И вызываем у класса данного контроллера метод getInstance(). Данный метод реализует шаблон проектирования синглтон и возвращают в качестве результата объект класса, часть имени которого мы передаем данному методу. В качестве параметра я передаю часть имени строку News. То есть в этом случае метод getInstance() вернет объект класса news контроллер NewsController. Данный класс должен быть описан в файле controller.php.

То есть News - это имя контроллера, а соответственно добавочная приставка Controller, - это как бы общая часть, которая указывает принадлежность этого класса к классам контроллеров. Соответственно, если сейчас мы сохраним изменения и попытаемся используя функцию print_f() распечатать содержимое переменной $controller, то в браузере в компоненте новостей мы видим ошибку: «Неверный класс контроллера».

Потому, как метод getInstance() пытается найти данный класс в файле controller.php, а значит в данном файле мы должны описать указанный class. То есть сейчас мы из точки входа уже попадаем в контроллер. Мы получаем объект данного контроллера и создаем класс под названием NewsController. Если это контроллер, он должен наследовать функционал родительского класса JControllerLegacy. Таким образом мы создали объект главного контроллера компонента com_news.

И сейчас в панели администратора, если мы обновим информацию, то мы видим что ошибки нет, так как в переменную контроллер попал объект класса NewsController. Соответственно получив объект контроллера мы должны выполнить поставленную пользователем задачу, А значит обращаемся к переменной $controller и вызываем на исполнение метод execute()


Для того, чтобы полностью разобраться с тем, как создать компонент для CMS Joomla, а точнее, как реализовать точку входа, далее определить контроллер, который будет выполнять поставленные задачи, а также, как создать главную страницу расширения – «Менеджер новостей», в котором в будущем будут отображаться добавленный новости и о том, как создать панель управления в создаваемом компоненте, смотрите видео-урок канала WebForMySelf на YouTube:

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

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

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

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

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

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