Разработчикам

Существует несколько способов настройки Вашей рабочей станции для разработок системы Joomla.

Некоторые рекомендации можно найти на вики по "'настройке рабочей станции для разработок системы Joomla"'.

Далее, Вы должны ознакомиться с "'рекомендациями по безопасному кодированию"' и с короткой статьей по "'лучшей практике разработки [системы] Joomla"'.

Документация по "'Joomla! API"' может помочь ознакомиться с основами кодовой базы [системы] Joomla!.

В заключение, если Вам нужна помощь или какие-либо решения, то существует много [других] ресурсов для разработчиков. 

в 24:02:2017 Joomla! Ukraine Editor
Был ли ответ полезен?

Изменение фавикона Вашего веб-сайта - это относительно легкая задача.

  1. Создайте изображение размером 16x16 пикселей. Вы можете для этого использовать какой-либо графический редактор, например, Photoshop, Gimp, Paint.net или Windows Paint. Альтернативно, Вы также можете использовать инструменты, находящиеся в интернете, такие как http://antifavicon.com.
  2. Конвертируйте [созданное Вами изображение] в формат ico, используя один из ниже приведенных бесплатных сайтов:
    • http://converticon.com/
    • http://www.favicongenerator.com/
    • http://www.htmlkit.com/services/favicon/
    • http://tools.dynamicdrive.com/favicon/
    • http://www.favicon.cc/
  3. Созданный Вами таким образом файл будет иметь расширение .ico. Скопируйте этот файл в директорию /joomla/templates/<Вашего шаблона> и назовите его favicon.ico.
  4. Откройте какой-либо браузер. Вы видите свою новую иконку? Если да, то поздравляем. Если нет, то это не обязательно значит что Вы сделали что-либо неправильно. Браузеры спроектированы сводить траффик данных до минимума, так что они не обновляют фавикон при каждом показе веб-страницы. Даже обновление веб-страницы (F5) не поможет. Так что Вам нужно освежить [веб-страницу] более тщательно:
    • [Для браузеров] Mozilla / Firefox / Safari: нажмите и удерживайте внизу клавишу Shift, щелкая в то же самое время на "Освежить" или нажмите на Ctrl-Shift-R (Cmd-Shift-R для Apple Mac);
    • IE: удерживайте [клавишу] Ctrl, одновременно щелкая на "Освежить", или нажмите Ctrl-F5;
    • Konqueror: просто щелкните на кнопку "Освежить" или нажмите [на клавишу] F5;
    • Opera: пользователям возможно придется [провести] полную очистку кэша в Инструменты→Предпочтения.
    • Chrome: Shift-F5
    • Если это не сработает, то Вам будет нужно удалить временные файлы интернета и историю, а затем снова открыть свою веб-страницу.

Мой фавикон хранится в другом месте

Некоторые шаблоны содержат код, который перенаправляет браузер на другую директорию или другой файл фавикона. Для того чтобы определить, где должен храниться Ваш новый фавикон, исследуйте http://yoursite.com/templates/Ваш_шаблон/index.php и поищите код, содержащий текст <link rel="shortcut icon". Там Вы найдете директорию и название нового файла фавикона. Скопируйте Ваш фавикон в это новое место и дайте ему то название, на которое указывает та ссылка (Вы возможно пожелаете создать резервную копию файла старого файла фавикона). Удостоверьтесь в том, что настройки безопасности Вашего веб-сервера разрешают его доступ к этому файлу. Взгляните на ниже следующие примеры.

<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;''
в 24:02:2017 Joomla! Ukraine Editor
Был ли ответ полезен?

Компонент - это вид расширения [системы] 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
в 24:02:2017 Joomla! Ukraine Editor
Был ли ответ полезен?

В данной статье мы рассмотрим, как добавить вид базового пакета Joomla! компонента. Для этого примера мы будем продолжать нашу работу на Hello World! компонент.

Существует несколько способов обновления для Joomla! компонент. В этом уроке мы сосредоточимся на варианте 2.

1 Вручную добавить файлы в <path_to_joomla>/
2 Обновление при помощи Joomla! Менеджер расширений и оригинальный каталог, несжатый, используемые для установки компонента
3 Обновление при помощи Joomla! Менеджер расширений и обновление сервера

Чтобы добавить представление вам нужно будет перейти к com_helloworld, что это оригинальный каталог мы сделали для нашего компонента. Используя ваш любимый файловый менеджер, создать или обновить следующие файлы; как создать или изменить файлы, добавить исходный код для каждого файла, который находится в подробности файла.

1 Обновление: helloworld.php <path_to_com_helloworld>/site/helloworld.php
2 Создать: controller.php <path_to_com_helloworld>/site/controller.php
3 Создать: index.html <path_to_com_helloworld>/site/views/index.html
4 Создать: index.html  
<path_to_com_helloworld>/site/views/helloworld/index.html
5 Создать: view.html.php

 

<path_to_com_helloworld>/site/views/helloworld/view.html.php
6 Создать: default.php

 

<path_to_joomla>/components/com_helloworld/views/helloworld/tmpl/default.php
7 Создать: index.html

<path_to_com_helloworld>

/site/views/helloworld/tmpl/index.html

8 Обновление: helloworld.xml <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 helloworld.xml это XML-файл (манифест) файл, который говорит Joomla! как установить наш компонент.
2 site/helloworld.php это сайт точка входа для компонента Hello World!
3 site/index.html предотвращает листинг из веб-сервера содержимого директории
4 site/controller.php файл, представляющий контроллер
5 site/views/index.html предотвращает листинг из веб-сервера содержимого директории
6 site/views/helloworld/index.html предотвращает листинг из веб-сервера содержимого директории
7 site/views/helloworld/view.html.php файл определяющий вид
8 site/views/helloworld/tmpl/index.html предотвращает листинг из веб-сервера содержимого директории
9 site/views/helloworld/tmpl/default.php представление по умолчанию
10 admin/index.html предотвращает листинг из веб-сервера содержимого директории
11 admin/helloworld.php это точка входа администратора в компонент Hello World!
12 admin/sql/index.html предотвращает листинг из веб-сервера содержимого директории
13 admin/sql/updates/index.html предотвращает листинг из веб-сервера содержимого директории
14 admin/sql/updates/mysql/index.html предотвращает листинг из веб-сервера содержимого директории
15 admin/sql/updates/mysql/0.0.1.sql файл, позволяющий инициализировать версию схемы компонента com_helloworld.
в 24:02:2017 Joomla! Ukraine Editor
Был ли ответ полезен?