Доброго времени суток. Помогите разобраться, стал недавно осваивать joomla. Пишу тестовый компонент (frontend). Создаю папку мой_сайт/components/com_test, в нем файл мой_сайт/components/com_test/test.php (точка входа в компонент) в этом файле просто написал "Hello world". При вызове компонента http://мой_сайт/?option=com_test выводит сообщения Cannot open URL (или как 404 ошибка) Joomla версия: 3.8.0 Зарание спасибо!
Ну правильно выводит. Должно быть так http://мой_сайт/index.phpi?option=com_test А вообще рекомендую сразу сделать первую view точка входа это пара и чтобы она не работала надо очень сильно постаратьсястрок. P.S все равно писать бекчасть придется так что лучше начинать с нее
http://мой_сайт/index.phpi?option=com_test = http://мой_сайт/?option=com_test Они полностью идентичны, апачь до нас додумывает. А по сути тоже не работает. Про view я тоже знаю. Нужно сначала разобраться почему точку входа не видит.
Создал пустой контроллер и представление но все так же. За ранее говорил что дела не в них а с точкой входа. Файловая структура: -com_test --views ---test ----tmpl -----default.php ----view.html.php --controller.php --test.php test.php Код (PHP): <?php defined('_JEXEC') or die('Not execute'); //Подключение контроллера jimport('joomla.application.component.controller'); //Test контроллер $controller = JControllerLegacy::getInstance('Test'); // Исполнение задачи (заданной переменной task) $input = JFactory::getApplication()->input; $controller->execute($input->getCmd('task')); $controller->redirect(); controller.php Код (PHP): <?php defined('_JEXEC') or die('Not execute'); class TestController extends JControllerLegacy{ } view.html.php Код (PHP): <?php defined('_JEXEC') or die('Not execute'); jimport('joomla.application.component.view'); class TestViewTest extends JViewLegacy{ protected $msg; public function display($tpl = null){ $this->msg = "Hello World"; parent::display($tpl); } } default.php Код (PHP): <?php defined('_JEXEC') or die('Restricted access'); ?> <h1><?php echo $this->msg; ?></h1>
Да вроде все верно. разве что дефолтная view в контролере не прописана. А сам компонент установился? И не стоят ли доп извращения вроде sh404SEF И файл манифеста покажи. P.S уже можно и даже нужно юзать namespaces чтобы потом меньше переписывать. Лови для примера это одна из моих последних поделок, права не закончена ещё и под конкретный сайт, но для примера подойдёт. https://github.com/Nerudas/com_board
Нет. Я с Joomla некогда не работал, а так я работаю с фреймворками Laravel, Zend и т. д. Друг попросил написать ему компонент. Документацию прочитал, но не слова чтобы их нужно устанавливать. А он установится если у меня только frontend будет описано? И как его установить?
Официальная документация. Первая часть =) Installing the Hello World! Component https://docs.joomla.org/J3.x:Developing_an_MVC_Component/Developing_a_Basic_Component
@Septdir Можно еще такой вопрос. В файле монифесте есть 2 тега установка и удаление, там указывается путь до 2 файлов sql. Я их указал, но запрос почему то не выполнился. То есть база не создалась.
Ну скорее всего, дело вот в чем. Указанные тэги выполняються именно при Установке(не обновлении) и Удалении Как-то вроде можно еще для обновления в манифесте писать, но я сделал проще прописал запуск в скрипте установки и все Код (PHP): /** * Method to fix tables * * @param string $path path to component directory * * @since 1.0.0 */ protected function fixTables($path) { $file = JPATH_ADMINISTRATOR . $path . '/sql/install.mysql.utf8.sql'; if (!empty($file)) { $sql = JFile::read($file); if (!empty($sql)) { $db = Factory::getDbo(); $queries = $db->splitSql($sql); foreach ($queries as $query) { $db->setQuery($db->convertUtf8mb4QueryToUtf8($query)); try { $db->execute(); } catch (JDataBaseExceptionExecuting $e) { JLog::add(Text::sprintf('JLIB_INSTALLER_ERROR_SQL_ERROR', $e->getMessage()), JLog::WARNING, 'jerror'); } } } } }