Joomla 1.5 Помогите разобраться с написанием админской части компонента с использованием MVC

Тема в разделе "Создание расширений для Joomla", создана пользователем akute, 17.01.2011.

  1. akute
    Offline

    akute Недавно здесь

    Регистрация:
    24.12.2010
    Сообщения:
    2
    Симпатии:
    0
    Пол:
    Мужской
    Для начала приведу исходные коды уже написанных мной файлов, а потом задам вопрос.

    Файлы:

    com_authorpage/admin.authorpage.php

    Код (PHP):
    1. <?php
    2. defined('_JEXEC') or die('Restricted access');
    3. require_once (JPATH_COMPONENT_ADMINISTRATOR . DS . 'controller.php');
    4. $controller = new AuthorpageController();
    5. $controller->execute(JRequest::getVar('task', null, 'default', 'cmd'));
    6. $controller->redirect();
    7. ?>


    com_authorpage/controller.php

    Код (PHP):
    1. <?php
    2. defined('_JEXEC') or die('Restricted access');
    3. jimport('joomla.application.component.controller');
    4. class AuthorpageController extends JController
    5. {
    6.     function __construct()
    7.     {
    8.         parent::__construct();
    9.     }
    10.     public function display()
    11.     {
    12.         parent::display();
    13.     }
    14. }
    15. ?>


    com_authorpage/controllers/author.php

    Код (PHP):
    1. <?
    2. class AuthorpageControllerAuthor extends AuthorpageController {
    3.    
    4.     function __construct() {
    5.         parent::__construct();
    6.         $this->registerTask('saveauthor', 'saveauthor');
    7.     }
    8.  
    9.     function display() {
    10.         JRequest::setVar( 'view', 'author' );
    11.         JRequest::setVar( 'layout', 'default');
    12.         JRequest::setVar('hidemainmenu', 1);
    13.         parent::display();
    14.     }
    15.  
    16.     function saveauthor() {
    17.         $model = $this->getModel('author');
    18.         $id = $model->save();
    19.         $msg =  JText::_('msg');
    20.         $this->setRedirect('index.php?option=com_authorpage', $msg);
    21.     }
    22. }
    23. ?>


    com_authorpage\views\author\tmpl\default.php

    Код (PHP):
    1. <?php
    2. defined('_JEXEC') or die('Restricted access');
    3. $document = JFactory::getDocument();
    4. $document->addStyleSheet('components/com_authorpage/images/style.css');
    5. $initials = $this->initials;
    6. $id = $this->id;
    7.  
    8. JToolBarHelper :: custom( 'saveauthor', 'icon-32-save.png', 'icon-32-save.png', 'Сохранить', false, false );
    9. ?>
    10. <p><span class="AuthorEditSpan">Редактирование информации об авторе</span><span class="AuthorpageLink"> | <a href="index.php?option=com_authorpage">Все авторы &rarr;</a></span></p>
    11. <form name="adminForm" id="adminForm" action="index.php" method="POST">
    12. <table class="AuthorTable">
    13.     <tr>
    14.         <td>
    15.         Фамилия
    16.         </td>
    17.         <td>
    18.         <input type="text" value="<?php echo $initials->lname; ?>" name="lname" />
    19.         </td>
    20.     </tr>
    21.     <tr>
    22.         <td>
    23.         Имя
    24.         </td>
    25.         <td>
    26.         <input type="text" value="<?php echo $initials->fname; ?>" name="fname" />
    27.         </td>
    28.     </tr>
    29.     <tr>
    30.         <td>
    31.         Отчество
    32.         </td>
    33.         <td>
    34.         <input type="text" value="<?php echo $initials->sname; ?>" name="sname" />
    35.         </td>
    36.     </tr>
    37.     <tr>
    38.         <td valign="top">Биография
    39.         </td>
    40.         <td>
    41.             <textarea cols=100 rows=20 name="bio"><?php echo $this->bio; ?></textarea>
    42.         </td>
    43.     </tr>
    44.     <tr>
    45.         <td>
    46.         </td>
    47.         <td><!--input type="submit" value="Сохранить" name="submit" /-->
    48.         </td>
    49.     </tr>
    50.    
    51. </table>
    52.     <input type="hidden" name="task" value="" />
    53.     <input type="hidden" name="controller" value="author" />
    54.     <input type="hidden" name="option" value="com_authorpage" />
    55.     <input type="hidden" name="view" value="author" />
    56.     <input type="hidden" name="id" value="<?php echo $id; ?>" />
    57. </form>


    Вопрос такой: при нажатии на "Сохранить" просто сбрасывается форма и такое ощущение, что управление просто-напросто не передается в контроллер "Author", хотя в скрытом input-е он у меня указан. Либо управление передается но вот карта задач почему-то не связывает task saveauthor с методом saveauthor. Прогуглил кучу мануалов, все вроде правильно делаю.

    Не подскажете, уважаемые форумчане, в чем может быть загвоздка?

    С уважением, akute.
     
  2.  
  3. Offline

    botanist специалист

    Регистрация:
    15.02.2009
    Сообщения:
    461
    Симпатии:
    49
    Пол:
    Мужской
    А ты во входной файл глянь и скажи почему управление должно передаваться в другой контроллер, там же жестко - всегда и при всех обстоятельствах только $controller = new AuthorpageController();
     
  4. akute
    Offline

    akute Недавно здесь

    Регистрация:
    24.12.2010
    Сообщения:
    2
    Симпатии:
    0
    Пол:
    Мужской
    botanist, спасибо!

    вот как должен выглядеть входной файл, я переписал:

    Код (PHP):
    1. <?php
    2. defined('_JEXEC') or die('Restricted access');
    3. if($controller = JRequest::getWord('controller')) {
    4.     $path = JPATH_COMPONENT.DS.'controllers'.DS.$controller.'.php';
    5.     if (file_exists($path)) {
    6.         require_once $path;
    7.     } else {
    8.         $controller = '';
    9.     }
    10. } else {
    11.     require_once JPATH_COMPONENT.DS.'controller.php';
    12. }
    13. $classname    = 'AuthorpageController'.$controller;
    14. $controller   = new $classname( );
    15.  
    16. $controller->execute(JRequest::getVar('task', null, 'default', 'cmd'));
    17. $controller->redirect();
    18. ?>
     
    Последнее редактирование: 18.01.2011

Поделиться этой страницей

Загрузка...