Разработчикам
Существует несколько способов настройки Вашей рабочей станции для разработок системы Joomla.
Некоторые рекомендации можно найти на вики по "'настройке рабочей станции для разработок системы Joomla"'.
Далее, Вы должны ознакомиться с "'рекомендациями по безопасному кодированию"' и с короткой статьей по "'лучшей практике разработки [системы] Joomla"'.
Документация по "'Joomla! API"' может помочь ознакомиться с основами кодовой базы [системы] Joomla!.
В заключение, если Вам нужна помощь или какие-либо решения, то существует много [других] ресурсов для разработчиков.
Изменение фавикона Вашего веб-сайта - это относительно легкая задача.
- Создайте изображение размером 16x16 пикселей. Вы можете для этого использовать какой-либо графический редактор, например, Photoshop, Gimp, Paint.net или Windows Paint. Альтернативно, Вы также можете использовать инструменты, находящиеся в интернете, такие как http://antifavicon.com.
- Конвертируйте [созданное Вами изображение] в формат ico, используя один из ниже приведенных бесплатных сайтов:
- http://converticon.com/
- http://www.favicongenerator.com/
- http://www.htmlkit.com/services/favicon/
- http://tools.dynamicdrive.com/favicon/
- http://www.favicon.cc/
- Созданный Вами таким образом файл будет иметь расширение .ico. Скопируйте этот файл в директорию /joomla/templates/<Вашего шаблона> и назовите его favicon.ico.
- Откройте какой-либо браузер. Вы видите свою новую иконку? Если да, то поздравляем. Если нет, то это не обязательно значит что Вы сделали что-либо неправильно. Браузеры спроектированы сводить траффик данных до минимума, так что они не обновляют фавикон при каждом показе веб-страницы. Даже обновление веб-страницы (F5) не поможет. Так что Вам нужно освежить [веб-страницу] более тщательно:
- [Для браузеров] Mozilla / Firefox / Safari: нажмите и удерживайте внизу клавишу Shift, щелкая в то же самое время на "Освежить" или нажмите на Ctrl-Shift-R (Cmd-Shift-R для Apple Mac);
- IE: удерживайте [клавишу] Ctrl, одновременно щелкая на "Освежить", или нажмите Ctrl-F5;
- Konqueror: просто щелкните на кнопку "Освежить" или нажмите [на клавишу] F5;
- Opera: пользователям возможно придется [провести] полную очистку кэша в Инструменты→Предпочтения.
- Chrome: Shift-F5
- Если это не сработает, то Вам будет нужно удалить временные файлы интернета и историю, а затем снова открыть свою веб-страницу.
Мой фавикон хранится в другом месте
Некоторые шаблоны содержат код, который перенаправляет браузер на другую директорию или другой файл фавикона. Для того чтобы определить, где должен храниться Ваш новый фавикон, исследуйте
<link rel="shortcut icon" href="http://Вашсайт.com/templates/Ваш_шаблон/icon/favicon.ico" />
Если Вы не желаете просто изменить файл favicon.ico в директории соответствующего шаблона, то Вы можете найти упоминание файла favicon.ico в документе html.php. Путь к нему: "........\libraries\joomla\document\html\html.php". Это предотвратит переключение этой иконки [на другую] когда Вы будете использовать
<link rel="shortcut icon" href="http://Вашсайт.com/templates/Ваш_шаблон/icon/youricon.ico" />
в html коде шаблона и [если] Вы не удалили [старый] файл favicon.ico (зачем вызывать эту иконку дважды?).
Из html.php
// Try to find a favicon by checking the template and root folder
$path = $directory . DS;
$dirs = array( $path, JPATH_BASE . DS );
foreach ($dirs as $dir )
{
$icon = $dir . 'favicon.ico';
if (file_exists( $icon ))
{
$path = str_replace( JPATH_BASE . DS, '', $dir );
$path = str_replace( '\\', '/', $path );
$this->addFavicon( JURI::base(true).'/'.$path . 'favicon.ico' );
break;''
Компонент - это вид расширения [системы] Joomla!. Компоненты являются главными функциональными единицами [системы] Joomla! и их можно рассматривать как мини-приложения. Простейшей аналогией будет [представить себе что] Joomla! - это операционная система и [ее] компоненты - это приложения рабочего стола. Создаваемое каким-либо компонентом содержимое обычно показано в центре главной части шаблона (в зависимости от самого шаблона).
Большинство компонентов состоят из двух частей: административной части и лицевой части. Лицевая часть - это то, что используется для предоставления веб-страниц Вашего вебсайта, когда [их] запрашивают во время обычной работы [с] сайтом. Административная часть предоставляет интерфейс для настройки и управления различных аспектов данного компонента и доступна [к нему] через административное приложение.
Joomla! поставляется с набором компонентов ядра [системы, такими] как система управления содержимым, контактные веб-формы и [система управления] веб-ссылками.
Во фреймворке Joomla! компонент может быть спроектирован с использованием простой модели (возвращая код HTML запрошенной веб-страницы) или в шаблоне [проектирования] 'Model-View-Controller' (здесь и далее упомянутой как MVC).
Вступление в MVC
MVC - это шаблон проектирования программного обеспечения, который может быть использован так, чтобы отделять друг от друга логику программного обеспечения и то, как оно выглядит. Основанием для такого подхода является то, что если логика программного обеспечения сгруппирована в своем разделе, то тогда интерфейс и взаимодействие с пользователями, которые включают в себя данные, могут быть пересмотрены и подстроены под индивидуальные требования без необходимости перепрограммирования деловой логики. Модель MVC была изначально разработана для связки задач ввода данных, их обработки и их вывода в логичную архитектуру графического интерфейса пользователя.
Модель
Данная модель является частью компонента, которая содержит данные самого приложения. Она часто предоставляет процедуры для существенного управления и манипулирования этими данными в дополнение к процедурам, которые извлекают эти данные из этой модели. В общем, лежащая в основании техника доступа к данным должна быть включена в такую модель. Таким образом, если приложение перемещается из системы, которая содержит информацию в обычном файле, в систему, которая использует [для этого] базу данных, то единственным элементом, который будет необходимо изменить, будет сама эта модель, а не данные представление или контроллер.
Представление
Представление это часть компонента, которая используется для отображения данных из модели в подходящем для взаимодействия с пользователем виде. Для веб-приложения, представление, как правило, будет HTML-страница, которая возвращается пользователю. Представление (вид) извлекает данные из модели (которая передается от контроллера) и передает данные в шаблон, который заполняется и показывается пользователю. Представление (вид) не вызывает данные, которые будут изменены в любом случае, оно только отображает данные полученные от модели.
Контроллер
Контроллер (controller) отвечает за операции пользователя. В случае с веб-приложением, операцией пользователя обычно является запрос страницы. Контроллер (controller) определит какой именно запрос был создан конкретным пользователем и соответственно ответит [на это] запустив [в работу] данную модель (model) для манипулирования нужных данных и передачи данной модели (model) надлежащему представлению (view). Сам контроллер (controller) не показывает данные в модели (model), - он только запускает [в работу] методы в модели, которая вносит изменения в данные, и затем передает эту модель в представление (view), которое показывыет эти данные.
Объяснение фреймворка компонента [системы] Joomla!
Модель
Во фреймворке Joomla модели отвечают за управление данными. Первой функцией, которая должна быть написана для какой-либо модели, является функция get. Она возвращает данные тому, что вызывает ее. Например, таким вызывателем может быть представление HelloWorldViewHelloWorld. По умолчанию, эта названная HelloWorldViewHelloWorld и обитающая в site/models/helloworld.php модель является главной моделью, связанной с этим представлением.
Так что давайте бросим беглый взгляд на пример с общепринятым наименованием, поскольку то, что приводит все в работу - это именно то, как Вы ведете свое наименование.
Класс HelloWorldViewHelloWorld обитает в site/views/helloworld/view.html.php и он будет использовать обитающий в site/models/helloworld.php класс HelloWorldModelHelloWorld.
Так что давайте предположим, что мы желаем использовать воображаемое представление fluffy. Тогда мы имеем:
Данный класс HelloWorldViewFluffy обитает в site/views/fluffy/view.html.php. Данное представление воспользуется HelloWorldModelFluffy в файле site/models/fluffy.php. Примечание: для того, чтобы этот пример сработал, требуется сам экран этого представления: site/views/fluffy/tmpl/default.php.
Нарушение этих выделенных жирным шрифтом наименований приведет к ошибкам или пустой веб-странице.
Вход в компонент системы Joomlaǃ
Сначала нам необходим доступ к платформе Joomla!, доступ к которой всегда осуществляется из одной точки. Пройдите в предпочитаемом Вами браузере по следующей ссылке URL:
1 | доступ пользователя | <ваш_вебсайт>/joomla/index.php |
2 |
доступ администратора |
<ваш_вебсайт>/joomla/administrator/index.php |
Пример Hello World!: localhost/joomla/index.php
Для того, чтобы пройти в компонент, Вы можете использовать эту URL ссылку компонента или Menu. В этой статье мы обсудим использование URL.
1 | доступ пользователя | <ваш_вебсайт>/joomla/index.php?option=com_<component_name> |
2 | доступ администратора | <ваш_вебсайт>/joomla/administrator/index.php?option=com_<component_name> |
Пример "Hello World!": localhost/joomla/index.php?option=com_helloworld
Начальная структура директории MVC
Компоненты содержатся внутри директории Вашей установки [системы] Joomla!, а именно в *htdocs/<путь_к_вашей_joomla>/components/com_<название_вашего_компонента>/ .
Наш компонент The Hello World! будет храниться в htdocs/<путь_к_joomla>/components/com_helloworld/.
Простой компонент будет содержать в своей директории следующие файлы:
- Это html файл, который нужен для безопасности, который содержит только цвет заднего фонаː index.html
- Это php файл, который представляет сам контроллерː
controller.php
- Это php файл, который загружает класс контроллераː
<название_компонента>.php
- Это php файл, который представляет саму модельː
models/<название_компонента>.php
- Еще один html файл для контроля цвета заднего фонаː
models/index.html
- Это php файл, содержащий представление (view) по умолчаниюː
views/<название_компонента>/tmpl/default.php
- Это xml файл для добавления типа пункта менюː
views/<название_компонента>/tmpl/default.xml
- Это еще одни html файл для контроля цвета заднего фонаː
views/<название_компонента>/tmpl/index.html
- Это еще один html файл для контроля цвета заднего фонаː
views/<название_компонента>/index.html
- Это php файл для показа представления (view)ː
views/<название_компонента>/view.html.php
JEXEC
Следующая строчка обычно присутствует в начале всех PHP файлов системы Joomla!:
<?php defined('_JEXEC') or die('Restricted Access');
Это входная точка безопасности в платформу Joomla!.
Уроки по проектированию компонента в MVC
Если Вы желаете научиться проектировать свой собственный компонент в модели MVC, то, пожалуйста, пройдите соответствующий урок по свой версии Joomla!.
- Joomla! 1.5
- Joomla! 2.5
- Joomla! 3.x
В данной статье мы рассмотрим, как добавить вид базового пакета Joomla! компонента. Для этого примера мы будем продолжать нашу работу на
Существует несколько способов обновления для Joomla! компонент. В этом уроке мы сосредоточимся на варианте 2.
1 | Вручную добавить файлы в <path_to_joomla>/ |
2 | Обновление при помощи Joomla! Менеджер расширений и оригинальный каталог, несжатый, используемые для установки компонента |
3 | Обновление при помощи Joomla! Менеджер расширений и |
Чтобы добавить представление вам нужно будет перейти к com_helloworld, что это оригинальный каталог мы сделали для нашего компонента. Используя ваш любимый файловый менеджер, создать или обновить следующие файлы; как создать или изменить файлы, добавить исходный код для каждого файла, который находится в
1 | Обновление: |
<path_to_com_helloworld>/site/helloworld.php |
2 | Создать: |
<path_to_com_helloworld>/site/controller.php |
3 | Создать: |
<path_to_com_helloworld>/site/views/index.html |
4 | Создать: |
|
<path_to_com_helloworld>/site/views/helloworld/index.html | ||
5 | Создать: |
|
<path_to_com_helloworld>/site/views/helloworld/view.html.php | ||
6 | Создать: |
|
<path_to_joomla>/components/com_helloworld/views/helloworld/tmpl/default.php | ||
7 | Создать: |
<path_to_com_helloworld> /site/views/helloworld/tmpl/index.html |
8 | Обновление: |
<path_to_com_helloworld/helloworld.xml |
Обновление Компонента Hello World!
Обновить Компонент Hello World! в Joomla! сайт, пожалуйста, выполните те же действия для
Файл Детали
site/helloworld.php
<?php/** * @package Joomla.Administrator * @subpackage com_helloworld * * @copyright Copyright (C) 2005 - 2016 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ // No direct access to this filedefined('_JEXEC') or die('Restricted access'); // Get an instance of the controller prefixed by HelloWorld$controller = JControllerLegacy::getInstance('HelloWorld'); // Perform the Request task$input = JFactory::getApplication()->input;$controller->execute($input->getCmd('task')); // Redirect if set by the controller$controller->redirect();
site/controller.php
<?php
/**
* @package Joomla.Administrator
* @subpackage com_helloworld
*
* @copyright Copyright (C) 2005 - 2016 Open Source Matters, Inc. All rights reserved.
* @license GNU General Public License version 2 or later; see LICENSE.txt
*/
// No direct access to this file
defined('_JEXEC') or die('Restricted access');
/**
* Hello World Component Controller
*
* @since 0.0.1
*/
class HelloWorldController extends JControllerLegacy
{
}
site/views/helloworld/view.html.php
<?php
/**
* @package Joomla.Administrator
* @subpackage com_helloworld
*
* @copyright Copyright (C) 2005 - 2016 Open Source Matters, Inc. All rights reserved.
* @license GNU General Public License version 2 or later; see LICENSE.txt
*/
// No direct access to this file
defined('_JEXEC') or die('Restricted access');
/**
* HTML View class for the HelloWorld Component
*
* @since 0.0.1
*/
class HelloWorldViewHelloWorld extends JViewLegacy
{
/**
* Display the Hello World view
*
* @param string $tpl The name of the template file to parse; automatically searches through the template paths.
*
* @return void
*/
function display($tpl = null)
{
// Assign data to the view
$this->msg = 'Hello World';
// Display the view
parent::display($tpl);
}
}
site/views/helloworld/tmpl/default.php
<?php /** * @package Joomla.Administrator * @subpackage com_helloworld * * @copyright Copyright (C) 2005 - 2016 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ // No direct access to this file defined('_JEXEC') or die('Restricted access'); ?> <h1><?php echo $this->msg; ?></h1>
index.html Примечание - один и тот же код используется для всех папок
<html><body bgcolor="#FFFFFF"></body></html>
helloworld.xml
<?xml version="1.0" encoding="utf-8"?> <extension type="component" version="3.2.0" method="upgrade"> <name>Hello World!</name> <!-- The following elements are optional and free of formatting constraints --> <creationDate>December 2013</creationDate> <author>John Doe</author> <authorEmail>john.doe@example.org</authorEmail> <authorUrl>http://www.example.org</authorUrl> <copyright>Copyright Info</copyright> <license>License Info</license> <!-- The version string is recorded in the components table --> <version>0.0.2</version> <!-- The description is optional and defaults to the name --> <description>Description of the Hello World component ...</description> <update> <!-- Runs on update; New since J2.5 --> <schemas> <schemapath type="mysql">sql/updates/mysql</schemapath> </schemas> </update> <!-- Site Main File Copy Section --> <!-- Note the folder attribute: This attribute describes the folder to copy FROM in the package to install therefore files copied in this section are copied from /site/ in the package --> <files folder="site"> <filename>index.html</filename> <filename>helloworld.php</filename> <filename>controller.php</filename> <folder>views</folder> </files> <administration> <!-- Administration Menu Section --> <menu link='index.php?option=com_helloworld'>Hello World!</menu> <!-- Administration Main File Copy Section --> <!-- Note the folder attribute: This attribute describes the folder to copy FROM in the package to install therefore files copied in this section are copied from /admin/ in the package --> <files folder="admin"> <!-- Admin Main File Copy Section --> <filename>index.html</filename> <filename>helloworld.php</filename> <!-- SQL files section --> <folder>sql</folder> </files> </administration> </extension>
Код Пояснения
В случае, если вам любопытно, почему это работает так, как он делает.
helloworld.php
defined('_JEXEC') or die('Restricted access');
Это позволяет для безопасной точки входа в интерфейс Joomla! Платформа. JEXEC содержится подробное объяснение.
$controller = JControllerLegacy::getInstance('HelloWorld');
"JControllerLegacy" является базовым классом для Joomla! Контроллер. Для того, чтобы наш сайт использовал контроллеры, мы должны расширить этот класс в нашем компоненте. В "getInstance" статический метод "JControllerLegacy" класса создадим контроллер. В коде, приведенном выше, это будет инстанцировать объект класса контроллера по имени "HelloWorldController". Joomla будет искать объявление этого класса в <path_to_joomla>/htdocs/components/com_helloworld/controller.php.
$input = JFactory::getApplication()->input; $controller->execute($input->getCmd('task'));
После того, как контроллер создан, мы инструктируем контроллер для выполнения задачи, как определено в URL: <yoursite>/joomla/index.php?option=com_helloworld&task=<task_name>. Если задача поставлена, задача по умолчанию 'display' будет принято. Когда дисплей не используется, 'view' переменная будет решать, что будет отображаться. Другими распространенными задачами являются save, edit, new и т. д.
$controller->redirect();
Контроллер может принять решение перенаправить страницу, обычно после того, как задание 'save' было завершено. Это последнее заявление заботится о фактическом перенаправлении.
Основные точки входа, helloworld.php, по сути, передает управление контроллеру, который обрабатывает задачу, которая была указана в запросе. Наш компонент конкретного контроллера больше ничего не делает, чем то, что делает родительский класс, потому наш класс контроллера пуст.
controller.php
class HelloWorldController extends JControllerLegacy { }
Когда ни одна задача не подается в запрос переменным, то будет выполнена задача по умолчанию. Сейчас это задача отображения по умолчанию. В JControllerLegacy классе есть такая задача. В нашем примере она будет показывать надпись с именем helloworld.
view.html.php
class HelloWorldViewHelloWorld extends JViewLegacy { function display($tpl = null) { // Assign data to the view $this->msg = 'Hello World'; // Display the view parent::display($tpl); } }
Представление задает текст для вывода и затем вызывает базовый класс дисплея.!Н!"JViewLegacy" является базовым классом для Joomla! View. В нашем случае этот метод будет отображать данные с использованием tmpl/default.php файла.
default.php
<h1><?php echo $this->msg; ?></h1>
Этот файл шаблона будет включен в JViewLegacy класс. Поэтому, здесь переменная $this имеет ввиду HelloWorldViewHelloWorld класса.
helloworld.xml
<version>0.0.2</version>
Обновляет номер версии.
<filename>controller.php</filename> <folder>views</folder>
Рассказывает установщик приложения добавить controller.php и мнения/каталог
Содержание Компонента
В этот момент ваш компонент должен содержать следующие файлы:
1 | это XML-файл (манифест) файл, который говорит Joomla! как установить наш компонент. | |
2 | это сайт точка входа для компонента Hello World! | |
3 | предотвращает листинг из веб-сервера содержимого директории | |
4 | файл, представляющий контроллер | |
5 | предотвращает листинг из веб-сервера содержимого директории | |
6 | предотвращает листинг из веб-сервера содержимого директории | |
7 | файл определяющий вид | |
8 | предотвращает листинг из веб-сервера содержимого директории | |
9 | представление по умолчанию | |
10 | предотвращает листинг из веб-сервера содержимого директории | |
11 | это точка входа администратора в компонент Hello World! | |
12 | предотвращает листинг из веб-сервера содержимого директории | |
13 | предотвращает листинг из веб-сервера содержимого директории | |
14 | предотвращает листинг из веб-сервера содержимого директории | |
15 | файл, позволяющий инициализировать версию схемы компонента com_helloworld. |