Вывод списка значений, полученных из базы данных можно сделать посредством модели и класса JModelList
, что было описано в следующей записи:
Теперь разберемся, как вывести одну запись по id
или другому желаемому параметру.
Класс модели компонента открытой части сайта является дочерним от JModel
, а по сути даже не использует его.
<?php defined( '_JEXEC' ) or die; jimport('joomla.application.component.model'); class SimpleModelUser extends JModel { public function getItem() { $user_id = JRequest::getInt('id'); $row = JTable::getInstance('user', 'SimpleTable'); $row->load($user_id); return $row; } }
Как видно, сначала получается значение id
(в int
) посредством класса JRequest
.
Объект на класс JTable
, а точнее класс SimpleTableUser
, получается из закрытой части сайта:
/administrator/components/com_simple/tables/user.php
<?php defined( '_JEXEC' ) or die; class SimpleTableUser extends JTable { public function __construct(&$db) { parent::__construct('#__users', 'id', $db); } }
Класс SimpleTableUser
всего лишь вызывает конструктор родительского класса JTable
, чтобы обозначить использование таблицы users и идентификатора id
.
Файл с классом SimpleTableUser
специально хранится в закрытой части сайта ради безопасности.
В переменную $row
записывается созданный объект класса JTable
.
Далее выполняется загрузка информации из базы данных с помощью метода load класса JTable
. Часть кода метода load
:
$query = $this->_db->getQuery(true); $query->select('*'); $query->from($this->_tbl); $fields = array_keys($this->getProperties()); foreach ($keys as $field => $value) { // Check that $field is in the table. if (!in_array($field, $fields)) { $e = new JException(JText::sprintf('JLIB_DATABASE_ERROR_CLASS_IS_MISSING_FIELD', get_class($this), $field)); $this->setError($e); return false; } // Add the search tuple to the query. $query->where($this->_db->quoteName($field).' = '.$this->_db->quote($value)); } $this->_db->setQuery($query); $row = $this->_db->loadAssoc();
С помощью метода loadAssoc
в объект $row
записываются переменные с именами, равными именам в указанной таблице базы данных. Полученная запись в методе load
в виде ассоциативного массива записывается в объект $row
и после этого возвращается:
return $this->bind($row);
Метод bind
находится в классе JTable
.
/** * Method to bind an associative array or object to the JTable instance.This * method only binds properties that are publicly accessible and optionally * takes an array of properties to ignore when binding. * * @param mixed $src An associative array or object to bind to the JTable instance. * @param mixed $ignore An optional array or space separated list of properties * to ignore while binding. * * @return boolean True on success. * * @link http://docs.joomla.org/JTable/bind * @since 11.1 */ public function bind($src, $ignore = array()) { // If the source value is not an array or object return false. if (!is_object($src) && !is_array($src)) { $e = new JException(JText::sprintf('JLIB_DATABASE_ERROR_BIND_FAILED_INVALID_SOURCE_ARGUMENT', get_class($this))); $this->setError($e); return false; } // If the source value is an object, get its accessible properties. if (is_object($src)) { $src = get_object_vars($src); } // If the ignore value is a string, explode it over spaces. if (!is_array($ignore)) { $ignore = explode(' ', $ignore); } // Bind the source value, excluding the ignored fields. foreach ($this->getProperties() as $k => $v) { // Only process fields not in the ignore array. if (!in_array($k, $ignore)) { if (isset($src[$k])) { $this->$k = $src[$k]; } } } return true; }
Из вида view.html.php
, расположенного в открытой части сайта:
/components/com_simple/views/user
Получается строка из базы данных по id
, записывается в переменную $item
и затем используется в виде default.php
вида user
:
<?php defined( '_JEXEC' ) or die; jimport( 'joomla.application.component.view'); class SimpleViewUser extends JView { protected $item; public function display($tpl = null) { $this->item = $this->get('Item'); parent::display($tpl); } }
Вид /user/view.html.php
взаимодействует с моделью SimpleModelUser
и затем выводит содержимое шаблона default.php
:
<?php defined( '_JEXEC' ) or die; ?> <h1><?php echo $this->escape($this->item->name); ?></h1> <p>E-Mail: <?php echo $this->item->email; ?></p>
Tags: JModel, joomla 1.7, Joomla 1.7 component frontend, Joomla 1.7 frontend, Joomla component frontend, Joomla frontend, JRequest, JTable
Запись опубликована
Воскресенье, Май 27, 2012 в
16:23 и находится в
Joomla, Программирование .
Вы можете следить за ответами к этой записи через
RSS 2.0 ленту.
Вы можете оставить комментарий, или обратиться к записи со своего сайта.