Мы уже знаем что модель работает с базой данных, в следствии того что выбрал пользователь, контроллер передаёт указания модели, модель их исполняет. Вообще структура части сайта почти не отличается от joomla 2.5. В xml файле default.xml можно задать различные настройки и проверить их в компоненте, пример использования настроек можно взять с создания модуля. 

Открываем файл mycomponents.php в папке site/models и делаем такую структуру.

<?php
/* 
Модель компонента. Здесь делается запрос в бд, 
и выбирается что нужно вытащить, все данные из
таблицы или только какието конкретные.
MycomponentModelMycomponent
название файла модели после Model, при создании
ещё одной страницы создаётся опять новая модель
к примеру catid тогда class модели будет 
MycomponentModelCatid ну и соответственно другой запрос в другую
таблицу и другие переменные.
И на заметку что loadObjectlist это то как будут выводиться данные
в цикле или нет так как с loadResult вы не выведите цикл, он предназначен только
для одной строки.
*/

//Защита от прямого обращения к скрипту
defined('_JEXEC') or die;


//Название класса модели и название файла
class MycomponentsModelMycomponents extends JModelLegacy
{
	//Функция её мы будем выводит в виде.
	function getMycomponent()
	{
		//Подключение к бд joomla
		$db = $this->getDbo();
		
		//Выбираем из какой таблицы будем вытаскивать данные ORDER BY ordering это порядок отображения данных этим займёмся в админ панеле.
		$query = 'SELECT * FROM #__mycomponent ORDER BY ordering';
		$db->setQuery($query);
		$row = $db->loadObjectlist();
		//вернуть row	
		return $row;	
	
	}
	
}
?>

 

Структура для сайта сама по себе простая, тут мало кода, так как нам нужно только вытащить данные из таблицы и вывести их на сайт. Структура Joomla! (framework) устроенна таим образом, что контроллер автоматически загрузит модель в Представление, если Модель имеет то же название что и Представление.

Наименование моделей строятся следующим образом: название компонента, model, название модели.
В нашем случае это MycomponentsModelMycomponents.

В общем основная структура доступа к данным должна быть кратко описана в модели.

Таким способом, если обработку запроса данных необходимо изменить, Модель - единственный элемент, в который вносятся изменения , не затрагивая код Представления (View) или Контроллера (Controller).

Создаём вид, открываем файл части сайта view.html.php. Что происходит!? Вид это промежуточный этап между моделью и шаблоном. Так как мы используем loadObjectlist то мы указываем одну функцию. Если будет другой вид скажем loadResult то прийдётся указывать каждую функцию отдельно и в моделе для каждой строки которая нам нужна создавать новый запрос в бд, а модель будет одна для всех $model = $this->getModel();

<?php
/*
Вид это промежуточный этап между моделью и шаблоном.
Так как мы используем loadObjectlist то мы указываем 
одну функцию. Если будет другой вид скажем loadResult
то прийдётся указывать каждую функцию отдельно и в 
моделе для каждой строки которая нам нужна создавать 
новый запрос в бд а модель будет одна для всех 
$model = $this->getModel();.
*/

//Защита от прямого обращения к скрипту
defined('_JEXEC') or die;

class MycomponentsViewMycomponents extends JViewLegacy
{
	//Функция которая выводит данные из модели. function getMycomponent() 
	//это функция модели, а тут мы извлекаем её $rows = $model->getMycomponent();
	function display ($tpl = null)
	{
		$model = $this->getModel();
		$rows = $model->getMycomponent();
		$this->assignRef('rows',$rows);
		
		parent::display($tp1);
	}


}

?>

 

Осталось дело за малым создать шаблон. Шаблон это вывод данных которые сформированы через модель и вид. Здесь выводится через цикл, так должно быть echo $row->id; а не echo $this->id; id это просто то значение которое нужно вывести оно может быть любым в зависимости как называются ваши поля в таблице. Ну и естественно свои классы в joomla для оформления страницы. Откройте файл default.php в виде

<?php
/*
Шаблон это вывод данных которые сформированы через модель и вид.
Здесь выводится через цикл. так должно быть echo $row->id; 
а не echo $this->id; id это просто то значение которо нужно
вывести оно может быть любым в зависимости как называются ваши поля в таблице.
Ну и естественно свои классы в joomla для оформления страницы.
*/
//защита от прямого доступа
defined('_JEXEC') or die('Restricted access');
?>
<!--Подключаем css-->
<link rel="stylesheet" type="text/css" href="/components/com_mycomponents/css/mycomponent.css">
<!--Это код таблицы с круглыми краями-->
<div id="v1"> 
<div class="b1"><b></b></div><div class="b2"><b><i><q></q></i></b></div> 
<div class="b3"><b><i></i></b></div><div class="b4"><b></b></div><div class="b5"><b></b></div> 
<div class="text"> 
	<!--Это таблица где выводятся данные из базы-->
	<table class="tablica">

		<!--Первый цикл который выведет нам данные-->
		<?php foreach ($this->rows as $row ) { ?>
		<!--Проверка опубликован раздел или нет-->
		<?php 
		if($row->state==1)
			{
				echo '<tr class="cvet-razdel">
				<td class="cvet-razdela">'.$row->name.'</td>
				<td class="cvet-razdela">'.$row->opisanie.'</td>
				<td class="cvet-razdela">'.$row->adres.'</td>

				</tr>';
			}
		?> 

	</table>
</div> 
<div class="b5"><b></b></div>
<div class="b4"><b></b></div>
<div class="b3"><b><i></i></b></div> 
<div class="b2"><b><i><q></q></i></b></div>
<div class="b1"><b></b></div> 
</div>

 

В коде есть css его нужно написать откройте файл mycomponent.css и добавьте следующее.

/*
css главной страницы.
Первое это формирование таблицы с круглыми краями.
*/

#v1 {
	width: 100%;
	margin: 30px auto 15px;
}
#v3 {
	width: 180px;
	margin: 30px auto 15px;
}

h6 {
	font-size: 16px;
	font-weight: normal;
	text-align: center;
	padding: 0px 0px 0px 0px;
	margin: 0px 0px 0px 0px;
}

#v3 h6 {color: #FF0000;}
.text {
	font-size: 12px;
	background: #FCFCFC;
	border: 1px solid #B0BCC2;
	border-width: 0 1px;
	padding: 5px 12px;
}

 
/* углы со сглаживанием */
.b1, .b2, .b3, .b4, .b5,
.b1 i, .b2 i, .b3 i, .b4 i, .b5 i,
.b1 b, .b2 b, .b3 b, .b4 b, .b5 b,
.b1 q, .b2 q, .b3 q, .b4 q, .b5 q {
	height: 1px;
	font-size: 1px;
	overflow: hidden;
	border-style: solid;
	border-width: 0 1px;
	display: block;
	background: #FCFCFC;
}
.b1 {
  margin: 0 2px;
	background: #EBEEF0;
	border: none;
}
.b1 b {
 margin: 0 1px;
 background: #B8C3C8;
 border-color: #CBD3D7;
}
.b2 {margin: 0 1px;	border-color: #D6DCDF;}
.b2 b {border-color: #B8C3C8;}
.b2 i {border-color: #E4E8EA;}
.b2 q {border-color: #F7F8F9;}
.b3 {border-color: #EBEEEF;}
.b3 b {border-color: #BCC6CB;}
.b3 i {border-color: #F9FAFB;}
.b4 {border-color: #CAD2D6;}
.b4 b {border-color: #E5E9EB;}
.b5 {border-color: #B5C0C6;}
.b5 b {border-color: #FAFBFB;}
/* углы со сглаживанием конец */

/*Таблица где размещаются данный раздел категорию товары или услуги*/
.tablica {
	width: 100%; 
	height: 100%;
}
.cvet-razdela{
	font-size: 12px; 
	height: 35px; 
	text-shadow: black 3px 3px 5px; 
	background: #caffaf; 
	padding: 10px;
}

 

Сохраните запакуйте в архив и установите компонент. Данные у нас заносятся по умолчанию, из за того что мы устанавливали компонент, то появятся 2 записи, в этом нет ничего страшного. После установки создайте ссылку на компонент через меню, запомните адрес и набери в адресной строке вашу ссылку. Вы увидите данные которые мы вывели из бд. Помните в модели мы писали такую строчку BY ordering это сортировка её можно и щас проверить, зайдите в вашу бд и выберите талицу компонента ваш префикс_mycomponent выберите одну из записей, если запись одна добавьте ещё одну. Нажмите на редактирование и в поле ordering поставьте значение 2 это и будет сортировка, эта запись будет отображаться последней. Если поставить в state 0 то данная запись отображена не будет а там где стоит 1 будет. Вот и вся хитрость, поздравляю с первой частью, написания компонента! С частью сайта мы закончили, к ней возвращаться не будем, теперь мы приступаем к созданию административной части сайта, она довольно тяжёлая, но увлекательная. Она позволяет управлять вашим компонентом, создавать, удалять редактировать, публиковать, сортировать, вообщем в админке делаются все рычаги управления компонентом.

Важный момент без которого ничего работать не будет! это файл default.xml нужен он для создания меню ссылки в административной части, там же можно создать настройки. Посмотрите на языковой код COM_MYCOMPONENT_RAZDEL он отобразит в меню гостиницы, что бы мы его с лёгкостью нашли. Он уже есть в архиве, и вообще советую тут код просто смотреть изучать что к чему и как работает. А архив брать как правильный и верный источник, а то мало ли что то не дописали или я ошибся.

<?xml version="1.0" encoding="utf-8"?>
<metadata>
	<layout title="COM_MYCOMPONENT_RAZDEL">
		<message>COM_MYCOMPONENT_RAZDEL</message>
	</layout>
</metadata>

 

P.S Языковой файл ru-RU.com_mycomponents.ini можете использовать уже сами. Из следующих уроков про административную часть вы узнаете как это делать.

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