0 Пользователей и 1 Гость просматривают эту тему.
  • 13 Ответов
  • 4051 Просмотров
*

autojoomla

  • Новичок
  • 7
  • 0 / 0
Привет всем. Хочу создать свой компонент, но пока слабо понимаю в MVC структуре.
При создании простого скрипта данные из БД выводил так:
Код: php
$host = "localhost";
$user = "user";
$pass = "pass";
$db = "db";
$connection = mysql_connect ($host, $user, $pass);
mysql_select_db($db);

$query = 'SELECT greeting FROM jos_firm';
$result = mysql_query($query);
$row = mysql_fetch_array($result);
do
$firm.= <<<HTML
{$row['name']} <br />
HTML;
while ($row = mysql_fetch_array($result));
echo $firm;
В результате получал в каждой строке название фирмы.
А как представить данный код в виде MVC структуры? Т.е. что должно быть в файле модели, в  файле вида и файле шаблона?
*

shprota

  • Давно я тут
  • 770
  • 53 / 1
  • Тружусь, не покладая рук
Re: Создание простого компонента
« Ответ #1 : 15.03.2009, 14:04:18 »
Не поленитесь посмотреть, как сделаны компоненты Joomla. Там все вобщем видно.
Еще очень помогает компонент EasyCreator - создает прототипы компонентов, модулей и плагинов для 1.5.
*

autojoomla

  • Новичок
  • 7
  • 0 / 0
Re: Создание простого компонента
« Ответ #2 : 15.03.2009, 14:18:30 »
Я не силен в английском, можно ссылку где скачать компонент EasyCreator
*

shprota

  • Давно я тут
  • 770
  • 53 / 1
  • Тружусь, не покладая рук
*

shprota

  • Давно я тут
  • 770
  • 53 / 1
  • Тружусь, не покладая рук
Re: Создание простого компонента
« Ответ #4 : 15.03.2009, 14:23:14 »
Только без минимальных знаний технического английского, заниматься разработкой будет крайне тяжело.
*

Виталик

  • Завсегдатай
  • 1244
  • 130 / 0
Re: Создание простого компонента
« Ответ #5 : 15.03.2009, 14:26:34 »
Только без минимальных знаний технического английского, заниматься разработкой будет крайне тяжело.
не надо так категорически
*

autojoomla

  • Новичок
  • 7
  • 0 / 0
Re: Создание простого компонента
« Ответ #6 : 15.03.2009, 14:31:11 »
Пытаюсь поставить EasyCreator на локольный сервер. Выдает ошибку.
Fatal error: Maximum execution time of 30 seconds exceeded in Z:\home\localhost\www\jom\libraries\joomla\filesystem\archive\zip.php on line 317
*

shprota

  • Давно я тут
  • 770
  • 53 / 1
  • Тружусь, не покладая рук
Re: Создание простого компонента
« Ответ #7 : 15.03.2009, 14:35:17 »
Пытаюсь поставить EasyCreator на локольный сервер. Выдает ошибку.
Fatal error: Maximum execution time of 30 seconds exceeded in Z:\home\localhost\www\jom\libraries\joomla\filesystem\archive\zip.php on line 317

Надо поставить опцию PHP max_execution_time во что-то вменяемое - например, минуты три.
*

autojoomla

  • Новичок
  • 7
  • 0 / 0
Re: Создание простого компонента
« Ответ #8 : 15.03.2009, 14:43:19 »
Спасибо. Установил. Буду разбираться
*

malus

  • Осваиваюсь на форуме
  • 49
  • 12 / 1
Re: Создание простого компонента
« Ответ #9 : 16.03.2009, 09:50:31 »
Цитировать
Не поленитесь посмотреть, как сделаны компоненты Joomla. Там все вобщем видно.
Я бы не советовал отсылать новичков обучаться по встроенным компонентам Joomla!, так как они все далеки от идеала. Максимум - изучить работу с конкретными

объектами CMS.

Цитировать
Хочу создать свой компонент, но пока слабо понимаю в MVC структуре.

Контроллер:
Структура, получающая команду (снаружи или изнутри), принимающая решение о дальнейших действиях, перенаправляющая цепочку логики скрипта.

Модель:
Структура которая извлекает данные, модифицирует их, структурирует, редактирует, сохраняет и т.д.

Представление:
Структура, которая подготавливает данные для вывода (форматирует) и выводит.
*

malus

  • Осваиваюсь на форуме
  • 49
  • 12 / 1
Re: Создание простого компонента
« Ответ #10 : 16.03.2009, 09:50:38 »
Вот простенький пример реализации MVC в контексте Joomla! 1.5.х

Компонент по имени My
Контроллер по имени MyCnt
выполняет задачу MyFunc

Точка входа:
Код
$controllerName	= 'MyController' . JString::ucfirst( JRequest::getWord( 'controller') );//собрали имя контроллера
$controller = new $classname();//создали контроллер
$controller -> execute( JRequest::getWord( 'task') );//запустили нужную задачу


Контроллер:
Код
class MyControllerMyCnt extends JController
{
public function myFunc()
{
$model =& $this -> getModel( 'MyModel' );//получили ссылку на модель
$model -> myFunc();//создали структуру данных myFunc

      $view =& $this -> getView();//получили ссылку на представление данных
      $view -> setModel( $model, true );//и познакомили представление с моделью
     
$view -> myFunc();//и вывели то, что для нас сделала модель
}
}

Модель:
Код
class MyModelMyFunc extends JModel
{
    public function myFunc()
    {
global $db;//зачеркнуто большим жирным крестом. глобальные переменные - способ развлечься поиском ошибок

$db =& JFactory::getDBO();//а вот это хорошо. получили ссылку на объект базы данных. если решим модифицировать - можем сделать это в любой

точке кода, а во всех остальных автоматически получим свежий объект

$sql = "select name from #__mytable";//запрос к базе. нужно получить из таблицы mytable все поля name
$db -> setQuery( $sql );//подготовили запрос

$result = $db -> loadObjectList();//все, что вернула база теперь в result. Это - структурированные данные.

//а теперь мы можем их модифициоровать
foreach( $result as &$row )//бежим по структуре данных
{
$row -> name .= '.';//добавляем точку в конец строки. теперь у нас модифицированные данные
}
    }

$this -> lists = $result;//сохранили полученные и модифицированные данные
}

Представление:
Код
class MyViewMyc extends JView
{
    public function myFunc()
    {
$model =& $this -> getModel( 'MyModel' );//получили ссылку на модель

//а вот тут мы можем уже форматировать данные
foreach( $model -> lists as &$row )//бежим по структуре данных
{
$row -> name = JString::touppear( $row -> name );//например сделать все буквы заглавными

$this -> assignRef( 'myData', $row -> name );//добавляем данные в шаблон
}

parent::display();//выдали готовые данные
}
}

Шаблон:
Код
<div align="center">$this -> myData</div>
*

malus

  • Осваиваюсь на форуме
  • 49
  • 12 / 1
Re: Создание простого компонента
« Ответ #11 : 16.03.2009, 09:50:52 »
Чем хорошо такое разделение?
например, нам нужно брать данные не из таблицы mytable, а из таблицы mytable2. Просто меняем используемую модель в контроллере:
Код
$model =& $this -> getModel( 'MyModel2' );//а эта другая модель смотрит в другую таблицу и работает с другими данными

А если нам нужно брать не только поле name, но и поле second name - просто меняем запрос в модели
Код
$sql = "select name, secondname from #__mytable";//

А если нам нужно выводить не все большие буквы, а только первую меняем в представлении форматирование
Код
$row -> name = JString::ucfirst( $row -> name );


А если нам нужно чтобы данные были выключены не по центру, а вправо меняем в шаблоне позиционирование контейнера
Код
<div align="right">$this -> myData</div>

А если нам нужно обработать ошибки - добавим в контроллер обработку:
Код
if( sizeof( $model -> errors ) )$mainframe -> redirect( 'index.php', 'Случилась страшная шляпа!!!' );//тоесть контроллер выполняет только смену логической 

цепочки!!! или завершил программу ошибкой или передал управление модели, виду или другому контроллеру. и он НИКОГДА не должен лазить в обработку данных

Таким образом любое телодвижение НИКАК не затрагивает все соседние блоки, и мы можем создавать очень гибкие приложения.
*

malus

  • Осваиваюсь на форуме
  • 49
  • 12 / 1
Re: Создание простого компонента
« Ответ #12 : 16.03.2009, 09:51:03 »
Что касается встроенных компонентов Joomla!, то там такая структура нарушена. Например, часто работа модели делается в контроллере и так далее. Понятно, что

разработчикам компонентов не нужно их расширять и в этом случае такой подход оправдан. Но с точки зрения именно ОБУЧЕНИЯ новичков - это полная шляпа. dixi.
*

Darkick

  • Завсегдатай
  • 1142
  • 239 / 1
Re: Создание простого компонента
« Ответ #13 : 16.03.2009, 11:59:39 »
Да уж, в исходниках Джумлы бардак, приходится мучиться.
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

[how to] Красота JHTML, или создание элементов формы с

Автор Professor

Ответов: 11
Просмотров: 22238
Последний ответ 27.12.2012, 18:14:38
от BaR
Как вы "въехали" в создание расширений?

Автор aanvale

Ответов: 4
Просмотров: 1991
Последний ответ 13.10.2012, 21:44:25
от passer
[Решено] Модификация стандартного компонента weblinks

Автор gdX

Ответов: 25
Просмотров: 7142
Последний ответ 19.03.2012, 15:32:29
от klenovskaja
Создание таблицы в БД при установке плагина

Автор mohax

Ответов: 2
Просмотров: 1749
Последний ответ 14.06.2011, 17:35:46
от mohax
Вывод компонента

Автор CTPZ

Ответов: 4
Просмотров: 1393
Последний ответ 13.06.2011, 18:27:13
от CTPZ