Joomla 1.5 Работа с компонентой

Тема в разделе "Программирование", создана пользователем deadheart, 09.10.2009.

  1. Offline

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

    Регистрация:
    07.09.2009
    Сообщения:
    69
    Симпатии:
    0
    Пол:
    Мужской
    Итак.....пишу свою компненту....суть в чем ...есть страничка на которой выводится список преподов. Потом мы допустим кликаем на ссылку и переходим на другую страницу с передачей в GET id препода для вывода подробной информации. В связи с этим возникаются 2 вопроса.

    1) как это реализовать? делать 2 вида или 2 шаблона ...мне говорили так и так. Но как лучше?
    2) какой вид должна иметь ссылка перехода на другую страницу...чтобы мы смогли передать id и каким обарзов его потом можно получить ?

    чесно говоря я вообще сложно себе все это представляю...если можна расскажите поподробней..или может у кого есть похожие примеры..
     
  2.  
  3. omfgpanda
    Offline

    omfgpanda Недавно здесь => Cпециалист <=

    Регистрация:
    22.01.2008
    Сообщения:
    673
    Симпатии:
    53
    Пол:
    Мужской
    Добрый день

    Начнем с того, что вы пишите КОМПОНЕНТ, а не компоненту - это первое, второе - что значит два вида? фас/профиль? или как ? ))) о каких шаблонах идет речь?

    Формулируйте мыслю правильно....

    Итак

    Код (PHP):
    1. defined( '_JEXEC' ) or die( 'Restricted access' );
    2. function prepodList()
    3. {
    4.    echo "   <a href=\"index.php?option=com_xxx&p_id=1\">Prepod1</a>
    5.               <a href=\"index.php?option=com_xxx&p_id=2\">Prepod2</a>
    6.           ";
    7. }
    8.  
    9. function fullPrepod($id)
    10. {
    11.       // тут по ИД делаете выборку из БД или что Вам угодно и выводите данные
    12. }
    13.  
    14. $pID = JRequest::getInt('p_id');
    15. $pID > 0 ? fullPrepod($pID) : prepodList();


    таким образом, если вы передаете параметр p_id то выполняется функция fullPrepod, если параметра нет значит выводится список преподов.

    Если Вам необходимо обработать большое число параметров , рекомендую использовать swich вместо if'a и ООП вместо функционального.
     
  4. Offline

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

    Регистрация:
    07.09.2009
    Сообщения:
    69
    Симпатии:
    0
    Пол:
    Мужской
    ну под видом понималось представление.... а под шаблоном - шаблон вывода данных. Ну я похоже перемудрил сильно.

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

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

    Я понимаю, что мы можем просто организовать поиск по общему списку, но все же....

    Ну подпустим
    Код (PHP):
    1. defined('_JEXEC') or die('Restricted access');
    2.  
    3. jimport('joomla.application.component.model');
    4.  
    5. class BiografyModelBiografy extends JModel {
    6.  
    7.     function __construct() {
    8.         parent::__construct();
    9.     }
    10.  
    11. function getInfo($id)
    12.     {
    13.         if (empty($this->info))
    14.         {
    15.  
    16.             $db =& JFactory::getDBO();
    17.             $query="select * from #__biografy where id=".$id;
    18.             $db->setQuery( $query );
    19.             $info = $db->loadObjectList();
    20.             return $info;
    21.         }
    22.     }
    23. }


    Код (PHP):
    1. defined('_JEXEC') or die('Restricted access');
    2.  
    3. jimport( 'joomla.application.component.view');
    4.  
    5. class BiografyViewBiografy extends JView {
    6.    
    7.     function display($tpl = null) {
    8.         $model=& $this->getModel();
    9.         $info=$model->getInfo($id);
    10.         $this->assignRef( 'info',   $info );
    11.         parent::display($tpl);
    12.     }
    13. }


    Так вот как этот $id передать представлению?
     
  5. omfgpanda
    Offline

    omfgpanda Недавно здесь => Cпециалист <=

    Регистрация:
    22.01.2008
    Сообщения:
    673
    Симпатии:
    53
    Пол:
    Мужской
    Внимательнее читаем доки по МВЦ:

    Код (PHP):
    1. class BiografyViewBiografy extends JModel
    2. {
    3.  
    4.     private $_id;
    5.  
    6.     private $_biografy;
    7.  
    8.     function __construct(){
    9.         parent::__construct();
    10.             $cid = JRequest::getVar('cid', false, 'DEFAULT', 'array'); //получаем cid массив из дефолтного хэша запроса
    11.         if ($cid)
    12.         {
    13.             $id = $cid[0];
    14.         }
    15.         else
    16.         {
    17.             $id = JRequest::getVar('id', 0);
    18.         }
    19.         $this->_setId($id);
    20.     }
    21.  
    22.     private function _setId($id=0)
    23.     {
    24.         $this->_id = $id;
    25.     }
    26.  
    27.     function getInfo()
    28.     {
    29.         if (!$this->_foobar)
    30.         {
    31.             $query  = 'SELECT * FROM ' . $this->_db->nameQuote('#__myTable')
    32.                 . ' WHERE ' . $this->_db->nameQuote('id') . ' = ' . $this->_id;
    33.             $db->setQuery($query);
    34.             $this->_biografy= $this->_db->loadObject();
    35.  
    36.             return $this->_biografy;
    37.         }
    38.     }
    39. }


    вуаля :)E

    Если что то не понятно - пишите )
     
  6. Offline

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

    Регистрация:
    07.09.2009
    Сообщения:
    69
    Симпатии:
    0
    Пол:
    Мужской
    Спасибо за помощь...пока, что все понятно..по теме....
    а если не по теме....,то если не сложно, объясните мне пожалуйста..

    private $_id;
    private $_biografy;

    private function _setId($id=0)
    function getInfo()


    зачем и когда нужно использовать символ "_" перед функциями или перепеременными. Мне не понятно для чего это исполузется.
     
  7. omfgpanda
    Offline

    omfgpanda Недавно здесь => Cпециалист <=

    Регистрация:
    22.01.2008
    Сообщения:
    673
    Симпатии:
    53
    Пол:
    Мужской
    в данном случае - что бы обозначить что функция является приватной. Культура программирования, мать ее ;)
     
  8. omfgpanda
    Offline

    omfgpanda Недавно здесь => Cпециалист <=

    Регистрация:
    22.01.2008
    Сообщения:
    673
    Симпатии:
    53
    Пол:
    Мужской
    хоть бы плюсик поставили B)
     
    Dead Krolik нравится это.
  9. Offline

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

    Регистрация:
    07.09.2009
    Сообщения:
    69
    Симпатии:
    0
    Пол:
    Мужской
    omfgpanda

    да я бы с радостью..только не знаю как это сделать))
     
  10. omfgpanda
    Offline

    omfgpanda Недавно здесь => Cпециалист <=

    Регистрация:
    22.01.2008
    Сообщения:
    673
    Симпатии:
    53
    Пол:
    Мужской
    Репутация +/- , слева, под моим ником )))
     
  11. Offline

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

    Регистрация:
    07.09.2009
    Сообщения:
    69
    Симпатии:
    0
    Пол:
    Мужской
    omfgpanda
    Местный

    Регистрация: 22.01.2008
    Адрес: Ханты-Мансийск
    Сообщений: 122
    Репутация: 6

    у меня нет +/- вижу....возможно новички не могут менять репутацию....мне + не жавлко, но увы я не могу его поставить в силу его отсутствия..(
     
  12. omfgpanda
    Offline

    omfgpanda Недавно здесь => Cпециалист <=

    Регистрация:
    22.01.2008
    Сообщения:
    673
    Симпатии:
    53
    Пол:
    Мужской
    да ладно, забей )
     
    Dead Krolik нравится это.
  13. Dead Krolik
    Offline

    Dead Krolik Недавно здесь => Cпециалист <=

    Регистрация:
    13.04.2007
    Сообщения:
    3 685
    Симпатии:
    101
    Пол:
    Мужской
    Оффтопик (не в тему) - жми сюда!
     
  14. Offline

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

    Регистрация:
    07.09.2009
    Сообщения:
    69
    Симпатии:
    0
    Пол:
    Мужской
    вот чет мне не дает покоя один вопрос .....
    Код (PHP):
    1. $cid = JRequest::getVar('cid', false, 'DEFAULT', 'array'); //получаем cid массив из дефолтного хэша запроса
    2.         if ($cid)
    3.         {
    4.  
    5.             $id = $cid[0];
    6.  
    7.         }
    8.         else
    9.         {
    10.  
    11.             $id = JRequest::getVar('id', 0);
    12.  
    13.         }


    вот этот кусок мне не понятен....зачем использовать $cid почему мы не можем сразу сделать $id = JRequest::getVar('id', 0); Почему мы сначала проваряем на наличие $cid и если есть берем ид от туда , если нету то через гетвар?
     
  15. omfgpanda
    Offline

    omfgpanda Недавно здесь => Cпециалист <=

    Регистрация:
    22.01.2008
    Сообщения:
    673
    Симпатии:
    53
    Пол:
    Мужской
    Предположим что foobar ID – это либо первый элемент массива cid, либо непосредственно значение id. Обычно мы используем cid, когда получаем данные со странички уже с некоторым количеством записей, а id когда получаем данные со странички с одной записью.
     
  16. Offline

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

    Регистрация:
    07.09.2009
    Сообщения:
    69
    Симпатии:
    0
    Пол:
    Мужской
    ну т.е. в приинципе можно делать и так и так? т.е. существенное разницы нет и если взять в общем случае то можно использовать только $id = JRequest::getVar('id', 0); или только $cid = JRequest::getVar('cid', false, 'DEFAULT', 'array'); . Т.е. в зависимости от поставленной задачи....
     
  17. omfgpanda
    Offline

    omfgpanda Недавно здесь => Cпециалист <=

    Регистрация:
    22.01.2008
    Сообщения:
    673
    Симпатии:
    53
    Пол:
    Мужской
    просто может оказаться так, что Вы проверяете getVar('id', 0), а на входе массив ))) что тогда ? ) алярм ? ) предлагаю не изменять эту конструкцию [!]
     
  18. Offline

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

    Регистрация:
    07.09.2009
    Сообщения:
    69
    Симпатии:
    0
    Пол:
    Мужской
    вполне согласен с вами и снова спасибо за помошь.....))
     
  19. Offline

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

    Регистрация:
    07.09.2009
    Сообщения:
    69
    Симпатии:
    0
    Пол:
    Мужской
    и снова столкнулся с проблемой...(((( суть в чем делаю админскую часть... пытаюсь сделать согласно с http://www.webflasher.net/ru/webmasteru/components-urok-4.html. Пітаюсь просто вывести данные с базы списком в админку. у меня ничего не выводит. ниже привожу все что сделал

    Код (PHP):
    1. <?php
    2. defined('_JEXEC') or die('Restricted access');
    3.  
    4. jimport( 'joomla.application.component.controller' );
    5. require_once( JPATH_COMPONENT.DS.'helpers'.DS.'helper.php' );
    6.  
    7. class BiografyController extends JController {
    8.  
    9.     function __construct() {
    10.         //Get View
    11.         if(JRequest::getCmd('view') == '') {
    12.             JRequest::setVar('view', 'default');
    13.         }
    14.         $this->item_type = 'Default';
    15.         parent::__construct();
    16.     }
    17. }
    18. ?>


    Код (PHP):
    1. <?php
    2.  
    3. defined('_JEXEC') or die('Restricted access');
    4.  
    5. define( 'COM_BIOGRAFY_DIR', 'images'.DS.'biografy'.DS );
    6. define( 'COM_BIOGRAFY_BASE', JPATH_ROOT.DS.COM_BIOGRAFY_DIR );
    7. define( 'COM_BIOGRAFY_BASEURL', JURI::root().str_replace( DS, '/', COM_BIOGRAFY_DIR ));
    8.  
    9. require_once JPATH_COMPONENT.DS.'controller.php';
    10.  
    11. require_once JPATH_COMPONENT.DS.'helpers'.DS.'helper.php';
    12.  
    13. // Initialize the controller
    14. $controller = new BiografyController( );
    15.  
    16. $controller->execute( JRequest::getCmd('task'));
    17. $controller->redirect();
    18. ?>


    Код (PHP):
    1. <?php
    2. defined('_JEXEC') or die('Restricted access');
    3.  
    4. // Import Joomla! libraries
    5. jimport('joomla.application.component.model');
    6.  
    7. class BiografyModelBiografy extends JModel {
    8.     function __construct() {
    9.         parent::__construct();
    10.     }
    11.  
    12.     var $_data;
    13.  
    14. function _buildQuery()
    15.     {
    16.         $query = ' SELECT * '
    17.             . ' FROM #__biografy order by sername , name , otchestvo '
    18.         ;
    19.         return $query;
    20.     }
    21.  
    22.     function getData()
    23.     {
    24.         if (empty( $this->_data ))
    25.         {
    26.             $query = $this->_buildQuery();
    27.             $this->_data = $this->_getList( $query );
    28.         }
    29.  
    30.         return $this->_data;
    31.     }
    32. }
    33. ?>



    Код (PHP):
    1. <?php
    2.  
    3. // no direct access
    4. defined('_JEXEC') or die('Restricted access');
    5.  
    6. // Import Joomla! libraries
    7. jimport( 'joomla.application.component.view');
    8. class BiografyViewDefault extends JView {
    9.     function display($tpl = null) {
    10.  
    11.         JToolBarHelper::title(   JText::_( 'Hello Manager' ), 'generic.png' );
    12.         JToolBarHelper::deleteList();
    13.         JToolBarHelper::editListX();
    14.         JToolBarHelper::addNewX();
    15.         // Get data from the model
    16.         $items      = & $this->get( 'Data');
    17.  
    18.         $this->assignRef('items',       $items);
    19.  
    20.         parent::display($tpl);
    21.     }
    22. }
    23. ?>


    Код (PHP):
    1. <?php
    2. defined('_JEXEC') or die('Restricted access');
    3. JToolBarHelper::title(JText::_('biografy'), 'generic.png');
    4. JToolBarHelper::preferences('com_biografy');
    5. ?>
    6. <!-- Deafult administrator message -->
    7. This is the default administrator view of your component. To edit it please edit the file:<br />
    8. /administrator/components/com_biografy/views/default/tmpl/default.php
    9. <form action="index.php" method="post" name="adminForm">
    10. <div id="editcell">
    11.     <table class="adminlist">
    12.     <thead>
    13.         <tr>
    14.             <th width="5">
    15.                 <?php echo JText::_( 'ID' ); ?>
    16.             </th>
    17.             <th width="20">
    18.                 <input type="checkbox" name="toggle" value="" onclick="checkAll(<?php echo count( $this->items ); ?>);" />
    19.             </th>
    20.             <th>
    21.                 <?php echo JText::_( 'FIO' ); ?>
    22.             </th>
    23.         </tr>
    24.     </thead>
    25.     <?php
    26.     $k = 0;
    27.     for ($i=0, $n=count( $this->items ); $i < $n; $i++) {
    28.         $row = &$this->items[$i];
    29.         $checked    = JHTML::_('grid.id',   $i, $row->id );
    30.         ?>
    31.         <tr class="<?php echo "row$k"; ?>">
    32.             <td>
    33.                 <?php echo $row->id; ?>
    34.             </td>
    35.             <td>
    36.                 <?php echo $checked; ?>
    37.             </td>
    38.             <td>
    39.                 <?php echo $row->sername . " " . $row->name . " " . $row->otchestvo; ?>
    40.             </td>
    41.         </tr>
    42.         <?php
    43.         $k = 1 - $k;
    44.     }
    45.     ?>
    46.     </table>
    47. </div>
    48.  
    49. <input type="hidden" name="option" value="com_biografy" />
    50. <input type="hidden" name="task" value="" />
    51. <input type="hidden" name="boxchecked" value="0" />
    52. <input type="hidden" name="controller" value="biografy" />
    53. </form>


    ОЧЕНЬ прошу помоч....я уже 8 чесов не могу понять в чем дело...мозг кипит..((
     
  20. omfgpanda
    Offline

    omfgpanda Недавно здесь => Cпециалист <=

    Регистрация:
    22.01.2008
    Сообщения:
    673
    Симпатии:
    53
    Пол:
    Мужской
    опишите подробнее проблему - у Вас ошибка или запрос возвращает пустой результат ? что у Вас храниться в items ?
     
  21. Offline

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

    Регистрация:
    07.09.2009
    Сообщения:
    69
    Симпатии:
    0
    Пол:
    Мужской
    ошибки нет ....просто запрос пустой приходит...итемс пустой получается в итоге ...а вообще там порядка 10 полей в одной записи.
     

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

Загрузка...