Joomla 3. Общие настройки. Сайт. Joomla setstate


Классы моделей

В Joomla для создания объектов модели используются несколько классов:

abstract class JModel extends JObject

На основе JModel создается класс JModelList

class JModelList extends JModel

Он используется для вывода списка

abstract class JModelItem extends JModel

JModelItem используется для вывода элемента списка

Для редактирования элемента списка есть класс JModelForm и на его основе JModelAdmin

abstract class JModelForm extends JModel   abstract class JModelAdmin extends JModelForm

Загрузка  файла с классом модели:

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

Основные методы класса JModel

public static function addIncludePath($path = '', $prefix = '')

Указываем дополнительные пути где искать файл модели, например

JModel::addIncludePath(JPATH_COMPONENT_ADMINISTRATOR.DS.'models');

getInstance - для получение объекта модели:

public static function getInstance($type, $prefix = '', $config = array())

Аналогично, для добавления таблиц используется addTablePath:

public static function addTablePath($path)

getTable - для получения объекта таблицы:

public function getTable($name = '', $prefix = 'Table', $options = array())

Для получения объекта базы данных getDbo:

public function getDbo() { return $this->_db; }

Задание состояния модели setState:

public function setState($property, $value = null) { return $this->state->set($property, $value); }

Для сохранения состояния используется объект JObjects

И получение состояния объекта

public function getState($property = null, $default = null) { if (!$this->__state_set) { // Protected method to auto-populate the model state. $this->populateState();   // Set the model state set flag to true. $this->__state_set = true; }   return $property === null ? $this->state : $this->state->get($property, $default); }

При получении выполняется метод populateState для формирования объекта состояния модели.

Основные методы класса JModellist

JModellist создается на основе класса JModel, следовательно для него действительны  методы, описанные выше методы для класса JModel

Дополнительно для работы со списком в нем добавлены методы:

protected function populateState($ordering = null, $direction = null) { // If the context is set, assume that stateful lists are used. if ($this->context) { $app = JFactory::getApplication();   $value = $app->getUserStateFromRequest('global.list.limit', 'limit', $app->getCfg('list_limit')); $limit = $value; $this->setState('list.limit', $limit);   $value = $app->getUserStateFromRequest($this->context . '.limitstart', 'limitstart', 0); $limitstart = ($limit != 0 ? (floor($value / $limit) * $limit) : 0); $this->setState('list.start', $limitstart);   // Check if the ordering field is in the white list, otherwise use the incoming value. $value = $app->getUserStateFromRequest($this->context . '.ordercol', 'filter_order', $ordering); if (!in_array($value, $this->filter_fields)) { $value = $ordering; $app->setUserState($this->context . '.ordercol', $value); } $this->setState('list.ordering', $value);   // Check if the ordering direction is valid, otherwise use the incoming value. $value = $app->getUserStateFromRequest($this->context . '.orderdirn', 'filter_order_Dir', $direction); if (!in_array(strtoupper($value), array('ASC', 'DESC', ''))) { $value = $direction; $app->setUserState($this->context . '.orderdirn', $value); } $this->setState('list.direction', $value); } else { $this->setState('list.start', 0); $this->state->set('list.limit', 0); } }

getListQuery используется для формирования запроса, выполнение которого происходит в getItems

protected function getListQuery() { $db = $this->getDbo(); $query = $db->getQuery(true);   return $query; }

Например, в классе модели компонента переопределям getListQuery:

protected function getListQuery() { // Create a new query object. $db = JFactory::getDBO(); $query = $db->getQuery(true); // Select some fields $query->select('id,greeting'); // From the hello table $query->from('#__helloworld'); return $query; }

Для получения массива объектов используем getItems:

public function getItems() { // Get a storage key. $store = $this->getStoreId();   // Try to load the data from internal storage. if (isset($this->cache[$store])) { return $this->cache[$store]; }   // Load the list items. $query = $this->_getListQuery(); $items = $this->_getList($query, $this->getStart(), $this->getState('list.limit'));   // Check for a database error. if ($this->_db->getErrorNum()) { $this->setError($this->_db->getErrorMsg()); return false; }   // Add the items to the internal cache. $this->cache[$store] = $items;   return $this->cache[$store]; }

И для построения списка таблиц используются методы getPagination, getStart, getTotal:

getPagination()

public function getPagination()   {   // Get a storage key.   $store = $this->getStoreId('getPagination');     // Try to load the data from internal storage.   if (isset($this->cache[$store]))   {   return $this->cache[$store];   }     // Create the pagination object.   jimport('joomla.html.pagination');   $limit = (int) $this->getState('list.limit') - (int) $this->getState('list.links');   $page = new JPagination($this->getTotal(), $this->getStart(), $limit);     // Add the object to the internal cache.   $this->cache[$store] = $page;     return $this->cache[$store];   }

getTotal()

public function getTotal()   {   // Get a storage key.   $store = $this->getStoreId('getTotal');     // Try to load the data from internal storage.   if (isset($this->cache[$store]))   {   return $this->cache[$store];   }     // Load the total.   $query = $this->_getListQuery();   $total = (int) $this->_getListCount($query);     // Check for a database error.   if ($this->_db->getErrorNum())   {   $this->setError($this->_db->getErrorMsg());   return false;   }     // Add the total to the internal cache.   $this->cache[$store] = $total;     return $this->cache[$store];   }

getStart()

public function getStart() { $store = $this->getStoreId('getstart');   // Try to load the data from internal storage.   if (isset($this->cache[$store])) { return $this->cache[$store]; }     $start = $this->getState('list.start'); $limit = $this->getState('list.limit'); $total = $this->getTotal(); if ($start > $total - $limit) { $start = max(0, (int) (ceil($total / $limit) - 1) * $limit); }     // Add the total to the internal cache.   $this->cache[$store] = $start;     return $this->cache[$store];   }

 

jdevelop.info

Joomla 1.6 - SOS! Добавление дополнительного фильтра в модель вида блога

Задача состоит в том, чтобы добавить в блог категорий возможность фильтровать статьи по их дате снятия с публикации. Начать решил с разбора модели category.php и нашел там функцию getItems() отвечающую (как я полагаю) за то, какие статьи подгружать. Решил проверить своё предположение. Если заменить к примеру

Код (PHP):

  1. $model->setState('filter.category_id', $category->id);

на

Код (PHP):

  1. $model->setState('filter.category_id', 23);

Выводиться только материалы из категории с id= 23.

Результат меня сильно воодушевил и чисто ради эксперимента, я на радостях леплю в общий список фильтров

Код (PHP):

  1. $model->setState('filter.created_by', 43);

и... Ничего не происходит. :(

По идеи должны выводиться только статьи с полем created_by равным 43, но выводятся почему то все. Друзья, очень прошу разобраться с этой проблемой. Заказчик уже брызжит слюной, а у меня никаких идей как решить эту проблему.

Здесь код функции если кому поможет.

Код (PHP):

  1. function getItems()

  2.     {

  3.         $params = $this->getState()->get('params');

  4.         $limit = $this->getState('list.limit');

  5.  

  6.         if ($this->_articles === null && $category = $this->getCategory()) {

  7.             $model = JModel::getInstance('Articles', 'ContentModel', array('ignore_request' => true));

  8.             $model->setState('params', JFactory::getApplication()->getParams());

  9.             $model->setState('filter.category_id', $category->id);

  10.             $model->setState('filter.published', $this->getState('filter.published'));

  11.             $model->setState('filter.access', $this->getState('filter.access'));

  12.             $model->setState('filter.language', $this->getState('filter.language'));

  13.             $model->setState('list.ordering', $this->_buildContentOrderBy());

  14.             $model->setState('list.start', $this->getState('list.start'));

  15.             $model->setState('list.limit', $limit);

  16.             $model->setState('list.direction', $this->getState('list.direction'));

  17.             $model->setState('list.filter', $this->getState('list.filter'));

  18.             // filter.subcategories indicates whether to include articles from subcategories in the list or blog

  19.             $model->setState('filter.subcategories', $this->getState('filter.subcategories'));

  20.             $model->setState('filter.max_category_levels', $this->setState('filter.max_category_levels'));

  21.             $model->setState('list.links', $this->getState('list.links'));

  22.  

  23.             if ($limit >= 0) {

  24.                 $this->_articles = $model->getItems();

  25.  

  26.                 if ($this->_articles === false) {

  27.                     $this->setError($model->getError());

  28.                 }

  29.             }

  30.             else {

  31.                 $this->_articles=array();

  32.             }

  33.  

  34.             $this->_pagination = $model->getPagination();

  35.         }

  36.  

  37.         return $this->_articles;

  38.     }

 

joomla-support.ru

Общие настройки сайта на Joomla 3. Вкладка Сайт

CMS Joomla очень гибкая система управления контентом. Она имеет множество опций и хорошо настраивается. Настраиваются отдельные компоненты и модули, меню и материалы. В этой статье описываются настройки общие, для всего сайта на Joomla 3. После того, как сайт запущен в работу, их изменяют очень редко. Вызвать окно общих настроек сайта можно, выбрав в системном меню пункт «Система», а затем «Общие настройки» или в панели быстрого доступа, в блоке «Настройки», кликнуть на ссылке «Общие настройки».

 

Все настройки распределены на пяти вкладках: «Сайт», «Система», «Сервер», «Права», «Фильтры текста». В этой статье мы рассмотрим настройки, которые расположены на вкладке «Сайт».

 

На вкладках, настройки разбиты на группы. На рассматриваемой нами вкладке четыре группы: «Настройки сайта», «Настройки метаданных», «Настройки SEO» и «Настройки Cookie».

Настройки сайта

Название сайта. Это поле уже заполнено. И заполнено оно на этапе установки Joomla, т. к. является обязательным. Вы уже знаете, где отображается название сайта в админке и фронтенде. Так же название сайта отображается при выключенном сайте.

Сайт выключен (offline). Эта настройка – переключатель, позволяющий включать и выключать лицевую часть сайта. При этом администраторы сайта могут входить на сайт, используя свои учётные данные. Административная часть сайта так же будет доступна. Переведите переключатель в положение «Да» и нажмите кнопку «Сохранить» в верхней части окна настроек. Обновите лицевую часть сайта (F5). С настройками по умолчанию это будет выглядеть так.

 

Показывать offline-сообщение. Определяет показывать или не показывать сообщение о том, что сайт выключен. И если показывать сообщение, то какое. Если выбрать значение «По умолчанию (из языкового файла)», то будет отображаться стандартное сообщение о том, что сайт закрыт на техническое обслуживание. Если выбрать «Пользовательское сообщение», то будет показан текст, введённый в следующей настройке.

Сообщение при выключенном сайте. По умолчанию текст пользовательского сообщения совпадает с текстом стандартного сообщения из языкового файла. Если нужно, поменяйте текст пользовательского сообщения. Кстати, в тексте можно использовать html-тэги для оформления. Но сильно увлекаться не надо.

Изображение при выключенном сайте. В этой настройке при желании, можно установить изображение, которое будет отображаться в верхней части при выключенном сайте. После клика на кнопке «Выбрать» откроется всплывающее окно «Медиа менеджера», в котором можно указать нужное изображение.

 

Если в каталоге изображений нет подходящего, то можно указать URL изображения, размещённого на другом сайте. А лучше всего предварительно загрузить изображение с компьютера. Ширина изображения не должна превышать 400 px.

В конечном итоге может получиться так. А может, естественно, и ещё лучше!

 

Иконки быстрого редактирования. Эта настройка позволяет изменять некоторые параметры редактирования с фронтенда. Мы уже изменяли её, когда первый раз входили в административную часть сайта. С помощью этой опции можно разрешить редактировать модули и меню или только модули сайта с его лицевой части, а можно и вовсе запретить эти действия. Разработчики предупреждают, что корректная работа этой функции зависит от шаблона сайта. Когда редактирование разрешено, при наведении курсора мыши на модуль или пункт меню появляется иконка быстрого редактирования, которая позволяет перейти в его настройки.

Редактор по умолчанию. Это обязательное поле. В нём устанавливается текстовый редактор, который будет редактором по умолчанию для каждого нового зарегистрированного пользователя сайта. Рекомендую оставить как есть. Пользователь сам может изменить эту настройку в своём профиле.

CAPTCHA (по умолчанию).CAPTCHA – используется для борьбы со спамом. Например, при регистрации пользователей на сайте или при отправке сообщения через форму обратной связи и т. д. Хотя это и обязательная настройка, но сайт может работать и без неё, т. к. не все сайты используют вышеописанные возможности. О том, как настроить CAPTCHA в Joomla читайте в статье "Настройка CAPTCHA в Joomla 3".

Уровень доступа по умолчанию. Определяет уровень доступа групп пользователей к созданию новых материалов, пунктов меню и прочих элементов с лицевой части сайта. Уровень доступа «Public» является оптимальным в большинстве случаев. Подробнее об уровнях доступа, пользователях, их правах мы поговорим в одной из следующих статей.

Длина списка по умолчанию. Эта настройка для каждого нового пользователя определяет количество строк в списках. Например, сколько статей будет показано в списке на одной странице или сколько модулей будет отображаться в списке «Менеджера модулей».

Ограничение ленты новостей. Здесь определяется количество новостей в новостной ленте сайта.

E-mail ленты новостей. Определяет показывать или нет адрес электронной почты автора в ленте новостей. И если показывать, то показывать ли адрес электронной почты автора или сайта. Это актуально, когда автор контента (статьи, видео и т. д.) является пользователем сайта.

 Настройки метаданных

 

Мета-тег Description для сайта. В этом необязательном поле указывается общее мета описание для всего сайта. Мета описание считывается поисковыми системами. Оно будет отображаться в исходном коде всех страниц сайта кроме тех, для которых описание переопределено в другом месте. Есть одна тонкость. Поисковики считают мета описание одним из важных параметров, учитываемых при ранжировании страниц в поисковой выдаче. Но при этом мета описание страниц на сайте не должно повторяться. Поисковики этого не любят и учтут это в выдаче. Поэтому, независимо от того, заполните вы это поле или нет, надо следить за тем, чтобы мета описание не повторялось в пределах сайта. 

Мета-тег Keywords. В этом поле указываются ключевые слова для всего сайта. Здесь ситуация похожая с мета описаниями, но несколько другая. Поисковые системы допускают повторения ключевых слов или их полное отсутствие. Но они очень не любят, когда указанное ключевое слово отсутствует в тексте страницы. Это может быть расценено, как поисковый спам. На мой взгляд, лучше это поле не заполнять.

Мета-тег Robots. Эта настройка устанавливает инструкции для роботов поисковых систем для страниц сайта по умолчанию. Инструкции могут быть следующими:

Авторские права. Здесь описываются авторские права на сайт, на его содержимое.

Показывать мета-тег Author. Эта настройка включает или выключает отображение мета-тега Author в исходном коде страниц сайта. Значение этого тега устанавливается в самом материале (статье).

Показывать версию Joomla! В исходном коде страниц сайта на Joomla 3 присутствует мета-тег "generator". Если эта настройка выключена, то он содержит следующее значение: "Joomla! - Open Source Content Management". Если настройку включить, то к значению мета-тега будет добавлена версия Joomla. Например, это может выглядеть так: "Joomla! - Open Source Content Management - Version 3.4.0". Не рекомендую включать эту настройку с точки зрения безопасности сайта.

Настройки SEO

В этой группе находятся настройки, относящиеся к SEO. SEO – это поисковая оптимизация или по-другому продвижение сайтов в поисковых системах. Предыдущая группа настроек тоже относится к SEO, но их выделили в отдельный блок. И так, какие же настройки есть в этой группе? 

Включить SEF (ЧПУ). ЧПУ это человекопонятные урлы. Смысл этой системы в том, чтобы сделать адреса страниц сайта, работающего на Joomla более дружественными для человеческого восприятия. По умолчанию эта настройка включена. Но я рекомендую пока её выключить. В одной из последующих статей мы поговорим о том, как формируются ссылки в Joomla и для наглядности лучше, чтобы ссылки имели первоначальный вид.

Перенаправление URL. Включает или выключает перенаправление адресов, соответствующих определенным условиям и перенаправляет их так, как необходимо. Включение этой настройки влияет на работу стандартного компонента Joomla "Перенаправление". Чтобы перенаправление заработало на веб-сервере Apache, перед тем как сохранять изменения общих настроек Joomla, нужно в корень сайта поместить файл .htaccess. О том, как это сделать читайте в статье «Joomla 3 Структура каталогов». Пока не включаем эту настройку.

Добавлять суффикс к URL. После включения этой настройки, в зависимости от типа документа в адрес страницы будет добавляться нужное окончание. Например, для простых страниц будет добавлен суффикс .html.

Алиасы в Unicode. Эта настройка включает или выключает возможность создания алиасов (псевдонимов) заголовков страниц в символах национального алфавита. Когда она выключена, псевдонимы заголовков записываются в транслите, в символах латинского алфавита. Эта настройка влияет на создание ссылок сайта. Включать её не надо.

Включать название сайта в заголовок страницы. Включать или не включать название сайта в заголовки страниц дело индивидуальное. Решение о включении этой настройки надо принимать с точки зрения SEO. Например, если название сайта короткое, и оно является, продвигаемым вами брендом, то можно и включить. В зависимости от выбранного значения, название сайта будет добавляться к заголовку окна (html-тег title), до или после него.

Настройки Cookie

В этой группе настроек всего два поля.

Cookie домена. В этом поле указывается домен, когда используется cookie сессия. Например, есть сайт http://kopytairoga.aitishnik.ru/, на котором зарегистрированные пользователи могут авторизоваться. И есть форум этого сайта, но он организован в поддомене http://forum.kopytairoga.aitishnik.ru/. Так вот для того, чтобы пользователям не нужно было дважды вводить пароль, и требуются эти настройки. Если cookie должны быть действительны для всех поддоменов, необходимо ввести точку перед названием домена.

Путь для Cookie. Путь, для которого должны быть действительны cookie.

Вот и всё! В следующей статье поговорим о настройке CAPTCHA в Joomla 3.

Об авторе:

ZolkinМеня зовут Андрей Золкин. Из более, чем пятнадцати лет работы в сфере информационных технологий, десять лет работаю с системами, базирующимися на открытом исходном коде. На страницах сайта Aitishnik.Ru веду блоги по CMC Joomla и Debian GNU/Linux.

 

Ещё статьи о Joomla 3

www.aitishnik.ru


Prostoy-Site | Все права защищены © 2018 | Карта сайта