Новости Joomla

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

artmasterpro

  • Осваиваюсь на форуме
  • 44
  • 9 / 0
Возможно глупые вопросы:
Вот прочитал линк http://joomla-book.ru/development/creating-component/mvc-joomla-1-5-step-1-fundamentals повторил, работает, вроде понял.

Но не пойму как мне сделать 2ю задачу в контроллере и вторую обработку в модели.
Например простенький компонент написать: на странице три кнопки, в зависимости от нажатой кнопки меняется переменная task в ссылке и выводиться разный текст на страницу.
« Последнее редактирование: 18.03.2011, 16:17:27 от artmasterpro »
*

shprota

  • Давно я тут
  • 770
  • 53 / 1
  • Тружусь, не покладая рук
Re: Первый компонент
« Ответ #1 : 18.03.2011, 16:16:53 »
в контроллере просто вызывается метод по имени переменной task.
а как менять переменную task на странице - посмотрите на почти любой компонент в админке - там по нажатию кнопок в тулбаре он меняется.
*

artmasterpro

  • Осваиваюсь на форуме
  • 44
  • 9 / 0
Re: Пишу первый в жизни MVC компонент
« Ответ #2 : 18.03.2011, 16:21:16 »
Разберемся с точкой входа и контроллером!

Точка входа:

Код
require_once( JPATH_COMPONENT.DS.'controller.php' );

// Require specific controller if requested
if($controller = JRequest::getVar( 'controller' )) {
require_once( JPATH_COMPONENT.DS.'controllers'.DS.$controller.'.php' );
}

// Create the controller
$classname    = 'HelloController'.$controller;
$controller   = new $classname( );
 
// Perform the Request task
$controller->execute(JRequest::getVar('task'));


// Redirect if set by the controller
$controller->redirect();

Контроллер:
Код
class HelloController extends JController
{
   
    function display()
    {
   parent::display();
    }

    function one()
    {
   // а что здесь ?
    }

    function two()
    {
   // а что здесь ?
    }

}

например у меня переменная task может принимать 3 значения: one , two , three

Как это должно выглядеть в контроллере ?
« Последнее редактирование: 18.03.2011, 16:30:13 от artmasterpro »
*

shprota

  • Давно я тут
  • 770
  • 53 / 1
  • Тружусь, не покладая рук
Re: Пишу первый в жизни MVC компонент
« Ответ #3 : 18.03.2011, 16:30:08 »
Код
class HelloController extends JController
{
    /**
     * Method to display the view
     *
     * @access    public
     */
    function display()
    {

    parent::display();
    }
    function one()
    {
    }
    function two()
    {
    }
    function three()
    {
    }
   

}
*

artmasterpro

  • Осваиваюсь на форуме
  • 44
  • 9 / 0
Re: Пишу первый в жизни MVC компонент
« Ответ #4 : 18.03.2011, 16:34:48 »
Это я уже понял а что пишем внутри этих функций чтобы вызвать обработку моделью ? И как связать названия функций контроллера с названиями функций модели?

Вот мой код модели:

Код

class HelloModelHello extends JModel
{
 

   function one()
    {
       $one = '111';
       return $one;
    }

  function two()
    {
       $two = '222';
       return $two;
    }
  function three()
    {
       $three = '333';
       return $three;
    }
}
« Последнее редактирование: 18.03.2011, 16:43:00 от artmasterpro »
*

icom

  • Давно я тут
  • 830
  • 202 / 4
Re: Пишу первый в жизни MVC компонент
« Ответ #5 : 18.03.2011, 16:54:47 »
примерно так

class HelloController extends JController
{
    /**
     * Method to display the view
     *
     * @access    public
     */
    function display()
    {
   
    parent::display();
    }
    function one()
    {
      global $mainframe;
      $model = $this->getModel('hello');
   
      if ($model->one() == '111') {
         $msg = $mainframe->enqueueMessage(JText::_('true'));
      }
      else {
         $msg = $mainframe->enqueueMessage(JText::_('false'), 'error');
      }
      
      $link = 'index.php?option=com_mycomponent&view=myview';
      $this->setRedirect($link, $msg);
    }
    function two()
    {
    }
    function three()
    {
    }
    

}
*

artmasterpro

  • Осваиваюсь на форуме
  • 44
  • 9 / 0
Re: Пишу первый в жизни MVC компонент
« Ответ #6 : 18.03.2011, 17:01:43 »
т.е. в контроллере достаточно оставить пустые функции? (а что в них обычно пишут?)

можно прокомментировать эту часть кода ?
Код
 if ($model->one() == '111') {
         $msg = $mainframe->enqueueMessage(JText::_('true'));
      }


Перейдем View:

вот мой код:
Код
  function search($tpl = null)
    {
   $model = $this->getModel();
one = $model->getOne();
        $this->assignRef( 'one', $one );

        parent::display($tpl);


    }
он не верный, а как должно быть?
*

icom

  • Давно я тут
  • 830
  • 202 / 4
Re: Пишу первый в жизни MVC компонент
« Ответ #7 : 18.03.2011, 17:22:19 »
в контроллере вызываем функции модели

 function one()
    {

      $model = $this->getModel('hello');
   
      if ($model->one() == '111') { // если функция модели возвращает 111, то все ок, если возвращает что-то другое то все плохо
         $msg = $mainframe->enqueueMessage(JText::_('true')); //в $msg записываем сообщение для пользователей
      }
      else {
         $msg = $mainframe->enqueueMessage(JText::_('false'), 'error');
      }
     
      $link = 'index.php?option=com_mycomponent&view=myview';
      $this->setRedirect($link, $msg); //переходим на ссылку $link и выводим сообщение $msg
    }

аналогично для других функций, только $model->two(), $model->three()...

можно проще

 function one()
    {

      $model = $this->getModel('hello');
   
      $model->one();
     
      $this->setRedirect('index.php?option=com_mycomponent&view=myview');
    }
*

artmasterpro

  • Осваиваюсь на форуме
  • 44
  • 9 / 0
Re: Пишу первый в жизни MVC компонент
« Ответ #8 : 18.03.2011, 17:29:01 »
Код
 
function one()
    {

      $model = $this->getModel('hello');.. ..это вызов модели?
   
      $model->one(); // ..это говорим какая функция нам нужна ?
     
      $this->setRedirect('index.php?option=com_mycomponent&view=myview'); // это адресация на вывод?
    }

тогда получатеся код модели будет такой :

Код
function one()
    { $text='Один'
}


и еще вопрос, почему мы пропускаем View ?
*

Виталик

  • Завсегдатай
  • 1244
  • 130 / 0
Re: Пишу первый в жизни MVC компонент
« Ответ #9 : 18.03.2011, 18:21:53 »
надо как бы пропускать контроллер, если нужен просто вывод
*

artmasterpro

  • Осваиваюсь на форуме
  • 44
  • 9 / 0
Re: Пишу первый в жизни MVC компонент
« Ответ #10 : 22.03.2011, 16:53:03 »
ВОт код моей модели:

почему в модели на работает условие выбора, наверное потому что не получена переменная search. Почему переменная не создаеться    $search = JRequest::getVar('search'); ?

Почему она чудено создаеться когда return $search;

и не могу передать $_data для обработки запроса в view.html.php тоже пустая

Код
defined('_JEXEC') or die('Restricted access');

jimport('joomla.application.component.model');

class HelloModelHello extends JModel {

     var $_data;
   
     function getData() {
 
    $search = JRequest::getVar('search');
       
     $db =& JFactory::getDBO();
 
       if (($search == '111 ') )
         
     {
    $query ="SELECT * FROM #__comprofiler;";
       } else {
       $query ="SELECT * FROM #__jcomments;";
        }

        $db->setQuery($query);
             
 
  $_data=$db->loadObjectList();
          return  $_data;
 
    }
}   
*

artmasterpro

  • Осваиваюсь на форуме
  • 44
  • 9 / 0
Re: Пишу первый в жизни MVC компонент
« Ответ #11 : 23.03.2011, 10:32:36 »
Люди я замахался, дайте пример компонента, с выводом таблицы из БД.
Суть такая в компоненте форма, в зависимости от выбора поля select меняется запрос к БД.

Низкий поклон всем кто уделит время !
*

Виталик

  • Завсегдатай
  • 1244
  • 130 / 0
*

artmasterpro

  • Осваиваюсь на форуме
  • 44
  • 9 / 0
Re: Пишу первый в жизни MVC компонент
« Ответ #13 : 24.03.2011, 09:20:37 »
могу дать пример для Joomla 1.6

выложите тут я думаю всем пригодиться
*

artmasterpro

  • Осваиваюсь на форуме
  • 44
  • 9 / 0
Re: Пишу первый в жизни MVC компонент
« Ответ #14 : 24.03.2011, 09:26:39 »
Вакладываю код файлов компонента для 1.5

controller

Код
class HelloController extends JController
{
    /**
     * Method to display the view
     *
     * @access    public
     */
    function display()
    {

    parent::display();
    }

Model

Код
<?php
defined('_JEXEC') or die('Restricted access');

jimport('joomla.application.component.model');

class HelloModelHello extends JModel {

var $_data;

function getData() {


$search = JRequest::getVar('search');
 $db =& JFactory::getDBO();
           $query = "SELECT name FROM #__users WHERE id>'".$search."';";
         $db->setQuery($query);
         $this->_data = $db->loadObjectList();

         return $this->_data;
    }
}

view.html.php

Код
defined('_JEXEC') or die('Restricted access');

jimport('joomla.application.component.view');

class HelloViewHello extends JView {
   
    function display($tpl = null) {

     $items =& $this->get('Data');
 
        $this->assignRef('items', $items);
 

 



        parent::display($tpl);
    }
}

default.php

Цитировать
<?php // no direct access
defined('_JEXEC') or die('Restricted access'); ?>


<form id="Form" name="Form" method="post" action="<?php echo "http://".$_SERVER['SERVER_NAME'].$_SERVER['REQUEST_URI']; ?>">
<input name="search" type="text" />
 
<input name="" type="submit" />
 
<input type="hidden" name="view" value="hello" />
<input type="hidden" name="option" value="com_hello" />
 
</form>

<?php   

print_r ($this->items);

 

?>
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

Надо переделать готовый компонент Генератор Купонов J2.5 на J1.5

Автор mkoff

Ответов: 3
Просмотров: 1923
Последний ответ 18.12.2014, 10:22:04
от assa1988
Компонент вывода информации из внешней базы данных

Автор rambeer

Ответов: 33
Просмотров: 10435
Последний ответ 12.09.2014, 05:01:34
от Mad_Doc
Модифицировать компонент

Автор karabert

Ответов: 0
Просмотров: 1207
Последний ответ 28.11.2011, 22:39:04
от karabert
Новый компонент. Реализация поиска/фильтрации таблицы в админке.

Автор passat

Ответов: 6
Просмотров: 3521
Последний ответ 26.03.2011, 12:21:45
от yunoshev
Шаблонизация компонентов в Joomla1.5. Первый взгляд.

Автор userxp

Ответов: 29
Просмотров: 24118
Последний ответ 30.01.2011, 23:56:42
от shprota