Итак.....пишу свою компненту....суть в чем ...есть страничка на которой выводится список преподов. Потом мы допустим кликаем на ссылку и переходим на другую страницу с передачей в GET id препода для вывода подробной информации. В связи с этим возникаются 2 вопроса. 1) как это реализовать? делать 2 вида или 2 шаблона ...мне говорили так и так. Но как лучше? 2) какой вид должна иметь ссылка перехода на другую страницу...чтобы мы смогли передать id и каким обарзов его потом можно получить ? чесно говоря я вообще сложно себе все это представляю...если можна расскажите поподробней..или может у кого есть похожие примеры..
Добрый день Начнем с того, что вы пишите КОМПОНЕНТ, а не компоненту - это первое, второе - что значит два вида? фас/профиль? или как ? ))) о каких шаблонах идет речь? Формулируйте мыслю правильно.... Итак Код (PHP): defined( '_JEXEC' ) or die( 'Restricted access' ); function prepodList() { echo " <a href=\"index.php?option=com_xxx&p_id=1\">Prepod1</a> <a href=\"index.php?option=com_xxx&p_id=2\">Prepod2</a> "; } function fullPrepod($id) { // тут по ИД делаете выборку из БД или что Вам угодно и выводите данные } $pID = JRequest::getInt('p_id'); $pID > 0 ? fullPrepod($pID) : prepodList(); таким образом, если вы передаете параметр p_id то выполняется функция fullPrepod, если параметра нет значит выводится список преподов. Если Вам необходимо обработать большое число параметров , рекомендую использовать swich вместо if'a и ООП вместо функционального.
ну под видом понималось представление.... а под шаблоном - шаблон вывода данных. Ну я похоже перемудрил сильно. а вообще по сабжу, спасибо за совет. Только сейчас понял, что я перемудрил с выводом. Вот только возник еще один вопрос по ходу дела...а как мы можем передать id модели или представлению, чтобы сформировать запрос на выбор из базы конкретного преподавателя. Я понимаю, что мы можем просто организовать поиск по общему списку, но все же.... Ну подпустим Код (PHP): defined('_JEXEC') or die('Restricted access'); jimport('joomla.application.component.model'); class BiografyModelBiografy extends JModel { function __construct() { parent::__construct(); } function getInfo($id) { if (empty($this->info)) { $db =& JFactory::getDBO(); $query="select * from #__biografy where id=".$id; $db->setQuery( $query ); $info = $db->loadObjectList(); return $info; } } } Код (PHP): defined('_JEXEC') or die('Restricted access'); jimport( 'joomla.application.component.view'); class BiografyViewBiografy extends JView { function display($tpl = null) { $model=& $this->getModel(); $info=$model->getInfo($id); $this->assignRef( 'info', $info ); parent::display($tpl); } } Так вот как этот $id передать представлению?
Внимательнее читаем доки по МВЦ: Код (PHP): class BiografyViewBiografy extends JModel { private $_id; private $_biografy; function __construct(){ parent::__construct(); $cid = JRequest::getVar('cid', false, 'DEFAULT', 'array'); //получаем cid массив из дефолтного хэша запроса if ($cid) { $id = $cid[0]; } else { $id = JRequest::getVar('id', 0); } $this->_setId($id); } private function _setId($id=0) { $this->_id = $id; } function getInfo() { if (!$this->_foobar) { $query = 'SELECT * FROM ' . $this->_db->nameQuote('#__myTable') . ' WHERE ' . $this->_db->nameQuote('id') . ' = ' . $this->_id; $db->setQuery($query); $this->_biografy= $this->_db->loadObject(); return $this->_biografy; } } } вуаля Если что то не понятно - пишите )
Спасибо за помощь...пока, что все понятно..по теме.... а если не по теме....,то если не сложно, объясните мне пожалуйста.. private $_id; private $_biografy; private function _setId($id=0) function getInfo() зачем и когда нужно использовать символ "_" перед функциями или перепеременными. Мне не понятно для чего это исполузется.
в данном случае - что бы обозначить что функция является приватной. Культура программирования, мать ее
omfgpanda Местный Регистрация: 22.01.2008 Адрес: Ханты-Мансийск Сообщений: 122 Репутация: 6 у меня нет +/- вижу....возможно новички не могут менять репутацию....мне + не жавлко, но увы я не могу его поставить в силу его отсутствия..(
вот чет мне не дает покоя один вопрос ..... Код (PHP): $cid = JRequest::getVar('cid', false, 'DEFAULT', 'array'); //получаем cid массив из дефолтного хэша запроса if ($cid) { $id = $cid[0]; } else { $id = JRequest::getVar('id', 0); } вот этот кусок мне не понятен....зачем использовать $cid почему мы не можем сразу сделать $id = JRequest::getVar('id', 0); Почему мы сначала проваряем на наличие $cid и если есть берем ид от туда , если нету то через гетвар?
Предположим что foobar ID – это либо первый элемент массива cid, либо непосредственно значение id. Обычно мы используем cid, когда получаем данные со странички уже с некоторым количеством записей, а id когда получаем данные со странички с одной записью.
ну т.е. в приинципе можно делать и так и так? т.е. существенное разницы нет и если взять в общем случае то можно использовать только $id = JRequest::getVar('id', 0); или только $cid = JRequest::getVar('cid', false, 'DEFAULT', 'array'); . Т.е. в зависимости от поставленной задачи....
просто может оказаться так, что Вы проверяете getVar('id', 0), а на входе массив ))) что тогда ? ) алярм ? ) предлагаю не изменять эту конструкцию
и снова столкнулся с проблемой...(((( суть в чем делаю админскую часть... пытаюсь сделать согласно с http://www.webflasher.net/ru/webmasteru/components-urok-4.html. Пітаюсь просто вывести данные с базы списком в админку. у меня ничего не выводит. ниже привожу все что сделал Код (PHP): <?php defined('_JEXEC') or die('Restricted access'); jimport( 'joomla.application.component.controller' ); require_once( JPATH_COMPONENT.DS.'helpers'.DS.'helper.php' ); class BiografyController extends JController { function __construct() { //Get View if(JRequest::getCmd('view') == '') { JRequest::setVar('view', 'default'); } $this->item_type = 'Default'; parent::__construct(); } } ?> Код (PHP): <?php defined('_JEXEC') or die('Restricted access'); define( 'COM_BIOGRAFY_DIR', 'images'.DS.'biografy'.DS ); define( 'COM_BIOGRAFY_BASE', JPATH_ROOT.DS.COM_BIOGRAFY_DIR ); define( 'COM_BIOGRAFY_BASEURL', JURI::root().str_replace( DS, '/', COM_BIOGRAFY_DIR )); require_once JPATH_COMPONENT.DS.'controller.php'; require_once JPATH_COMPONENT.DS.'helpers'.DS.'helper.php'; // Initialize the controller $controller = new BiografyController( ); $controller->execute( JRequest::getCmd('task')); $controller->redirect(); ?> Код (PHP): <?php defined('_JEXEC') or die('Restricted access'); // Import Joomla! libraries jimport('joomla.application.component.model'); class BiografyModelBiografy extends JModel { function __construct() { parent::__construct(); } var $_data; function _buildQuery() { $query = ' SELECT * ' . ' FROM #__biografy order by sername , name , otchestvo ' ; return $query; } function getData() { if (empty( $this->_data )) { $query = $this->_buildQuery(); $this->_data = $this->_getList( $query ); } return $this->_data; } } ?> Код (PHP): <?php // no direct access defined('_JEXEC') or die('Restricted access'); // Import Joomla! libraries jimport( 'joomla.application.component.view'); class BiografyViewDefault extends JView { function display($tpl = null) { JToolBarHelper::title( JText::_( 'Hello Manager' ), 'generic.png' ); JToolBarHelper::deleteList(); JToolBarHelper::editListX(); JToolBarHelper::addNewX(); // Get data from the model $items = & $this->get( 'Data'); $this->assignRef('items', $items); parent::display($tpl); } } ?> Код (PHP): <?php defined('_JEXEC') or die('Restricted access'); JToolBarHelper::title(JText::_('biografy'), 'generic.png'); JToolBarHelper::preferences('com_biografy'); ?> <!-- Deafult administrator message --> This is the default administrator view of your component. To edit it please edit the file:<br /> /administrator/components/com_biografy/views/default/tmpl/default.php <form action="index.php" method="post" name="adminForm"> <div id="editcell"> <table class="adminlist"> <thead> <tr> <th width="5"> <?php echo JText::_( 'ID' ); ?> </th> <th width="20"> <input type="checkbox" name="toggle" value="" onclick="checkAll(<?php echo count( $this->items ); ?>);" /> </th> <th> <?php echo JText::_( 'FIO' ); ?> </th> </tr> </thead> <?php $k = 0; for ($i=0, $n=count( $this->items ); $i < $n; $i++) { $row = &$this->items[$i]; $checked = JHTML::_('grid.id', $i, $row->id ); ?> <tr class="<?php echo "row$k"; ?>"> <td> <?php echo $row->id; ?> </td> <td> <?php echo $checked; ?> </td> <td> <?php echo $row->sername . " " . $row->name . " " . $row->otchestvo; ?> </td> </tr> <?php $k = 1 - $k; } ?> </table> </div> <input type="hidden" name="option" value="com_biografy" /> <input type="hidden" name="task" value="" /> <input type="hidden" name="boxchecked" value="0" /> <input type="hidden" name="controller" value="biografy" /> </form> ОЧЕНЬ прошу помоч....я уже 8 чесов не могу понять в чем дело...мозг кипит..((
опишите подробнее проблему - у Вас ошибка или запрос возвращает пустой результат ? что у Вас храниться в items ?
ошибки нет ....просто запрос пустой приходит...итемс пустой получается в итоге ...а вообще там порядка 10 полей в одной записи.