Ссылка на глобальные переменные
Разработка расширений на CMS Cotonti и пользовательских шаблонов требует понимания глобальных системных переменных, которые использутся, могут быть задействованны и/или которые нужно применить.
Массив с переменными $usr
Примеры использования в исходном коде
Cot::$usr['isadmin']
Cot::$usr['name']
(Cot::$usr['id'] > 0)
Пример использования в шаблонах
1. Глобально. В любом месте шаблона, условие, в котором доступен контент для пользователя с правами администратора
<!-- IF {PHP.usr.isadmin} -->
<div class="my-class" id="block_content_for_admin">
HTML-код, теги, функции для пользователя с правами администратора
</div>
<!-- ENDIF -->
2. Глобально. В любом месте шаблона, ссылка на собственную страницу пользователя
<a href="{PHP.usr.name|cot_url('users','m=details&u=$this')}">{PHP.L.Profile}</a>
3. Глобально. В любом месте шаблона, приветствие авторизованного пользователя
<!-- IF {PHP.usr.id} > 0 -->
<h3>{PHP.L.You_Are_Logged_As}: {PHP.usr.name}</h3>
<!-- ENDIF -->
Перечислены и объяснены наиболее важные из глобальных переменных Котонти
Большинство скриптов Cotonti выполняются в глобальной области видимости, поскольку она исторически построена таким образом. Некоторые переменные достаточно распространены, чтобы их можно было увидеть во многих местах кода. В этой статье рассматриваются наиболее важные глобальные переменные.
Примечание: это руководство также пригодится разработчикам тем. Вы также можете использовать любую из этих глобальных переменных в качестве тегов глобального шаблона.
Просто запомните синтаксис CoTemplate.
Например, $usr['profile']['user_avatar'] в шаблоне становится {PHP.usr.profile.user_avatar}.
1. Класс фасада Cot
В системе есть несколько перехватчиков, которые запускаются внутри системных функций, поэтому включение некоторых файлов расширений выполняется в области действия функции. Исторически сложилось так, что в качестве обычной практики для доступа к некоторым системным переменным использовалось ключевое слово global. Но это не всегда хорошо. Так был введен класс Cot facade.
Начиная с версии 0.9.15 все основные глобальные переменные, такие как ($cfg, $usr, $db, $id, $strucutre и т.д.), могут быть доступны через класс cot facade. Поэтому вам не нужно использовать глобальное ключевое слово, вместо этого используйте прямой класс cot. Пример
if ( cot::$cfg['plugin']['comments']['enabled'] )
{
// some code
}
Полный список доступных переменных в facade: $cache, $cfg, $cot_extrafields, $db, $db_x, $env, $L, $out, $R, $structure, $sys, $usr.
Вот список стандартных ключей, которые есть в этом массиве:
$usr['id'] - уникальный номер пользователя в базе данных;
$usr['name'] - имя пользователя (логин) пользователя;
$usr['maingrp'] - идентификатор основной группы, к которой принадлежит пользователь, значение grp_id таблицы groups;
$usr['ip'] - IP-адрес текущего пользователя;
$usr['lang'] - языковые предпочтения пользователя. Другой глобальный $lang является сокращением для этого;
$usr['theme'] - настройки темы пользователя;
$usr['scheme'] - настройки цветовой схемы пользователя;
$usr['timezone'] - смещение часового пояса пользователя в часах;
$usr['timezonename'] - название часового пояса пользователя;
$usr['lastvisit'] - временная метка для последнего действия пользователя на сайте;
$usr['lastlog'] - временная метка последнего входа пользователя в систему;
$usr['level'] - значение уровня основной группы пользователя;
$usr['profile'] - массив, предоставляющий доступ ко всем полям в таблице users, описанным ниже.
Вы можете использовать $usr['profile'] для получения необработанных значений полей профиля пользователя, включая дополнительные поля. Он содержит их с префиксом "user_". Например, вот стандартные:
$usr['profile']['user_birthdate'] - дата рождения пользователя в формате даты MySQL. Вы можете отобразить ее, используя комбинацию функций cot_date2stamp() и cot_date();
$usr['profile']['user_country'] - содержит 2-значный код страны ISO пользователя, если указан;
$usr['profile']['user_email'] - адрес электронной почты пользователя;
$usr['profile']['user_gender'] - один символ для обозначения пола пользователя: "M" для мужчины, "F" для женщины или "U" для неизвестного;
$usr['profile']['user_hideemail'] - значение true, если пользователь предпочитает, чтобы его электронная почта оставалась конфиденциальной (по умолчанию), или значение false, если ее можно отобразить;
$usr['profile']['user_logcount'] - количество входов пользователя в систему;
$usr['profile']['user_regdate'] - временная метка для даты и времени регистрации пользователя;
$usr['profile']['user_text'] - текст подписи пользователя.
Итак, если вы добавили дополнительное поле в таблицу users, которое называется "first_name", то к нему можно получить доступ как к $usr['profile']['user_first_name'] в $usr global.
3. Настройки текущего пользователя
Есть несколько глобальных параметров, содержащих текущие значения настроек отображения для каждого пользователя для текущего запроса:
$lang - текущий код языка;
$theme - название текущей темы;
$scheme - название текущей цветовой схемы.
4. Переменные конфигурации
Все переменные конфигурации доступны через $cfg global. Он имеет несколько уровней вложенности:
$cfg['option_name'] - одна из основных настроек;
$cfg['module_name']['option_name'] - настройка для конкретного модуля;
$cfg['plugin']['plugin_name']['option_name'] - настройка плагина.
5. Среда расширения
Массив $env содержит информацию о текущем выполняемом расширении (модуле или плагине) и информацию о статусе запроса:
$env['type'] - 'module' для модулей или 'plug' для плагинов;
$env['ext'] - код расширения, например "форумы";
$env['местоположение'] - строка, содержащая текстовое описание местоположения пользователя на сайте, например "Домашняя страница";
$env['status'] - статус повторного ответа HTTP, например "200 OK";
6. Системные переменные
Существуют временные системные переменные, которые используются в нескольких местах, и их повторное вычисление было бы пустой тратой ресурсов. Такие переменные могут содержаться в глобальном массиве $sys. Вот некоторые из его общего содержимого:
$sys['now'] - целочисленная временная метка для текущего времени в UTC, такая же, как при вызове функции time() для UTC (даты Cotonti хранятся в UTC, а часовые пояса применяются непосредственно перед их отображением);
$sys['site_id'] - некоторая строка, уникальная для сайта и используемая в качестве его идентификатора (эти данные являются общедоступными);
$sys['parser'] - код для плагина синтаксического анализа по умолчанию или синтаксического анализатора, выбранного для текущих данных;
$sys['xk'] - содержит текущее значение токена защиты CSRF, используемого в формах;
$sys['noindex'] - установите значение TRUE, если текущая страница не должна индексироваться поисковыми системами;
Следующие переменные связаны с определением текущего URL-адреса и его частей во время выполнения:
$sys['scheme'] - схема URL-адреса, например 'http' или 'https';
$sys['secure'] - флаг, который является истинным для используемого протокола HTTPS;
$sys['host'] - полная часть URL-адреса хоста, например 'my.example.com';
$sys['домен'] - домен 2-го уровня URL-адреса, например 'example.com';
$sys['порт'] - порт, отличный от 80, содержащий запятую, например ':8080';
$sys['site_uri'] - относительный путь к корневому каталогу сайта на сервере с косой чертой в конце. Например, если вы запустите Cotonti в 'example.com/cotonti/', то этот путь будет '/cotonti/';
$sys['abs_url'] - абсолютный URL-адрес корневого каталога сайта, например, 'http://my.example.com/cotonti/'. Обычно это то же самое, что $cfg['mainurl'] с косой чертой, но на сайтах, использующих несколько поддоменов, это будет отличаться от $cfg['mainurl'] при доступе из поддомена;
$sys['canonical_url'] - используется для получения и установки канонического URL для текущей страницы (используется в заголовке html);
$sys['uri_curr'] - содержит текущую часть URI запроса URL, например '/cotonti/foo?bar=baz';
7. Выходные переменные
Эти переменные используются для создания глобальных тегов для вывода их в нескольких шаблонах. Они собраны в массив $out. Вот некоторые стандартные элементы:
$out['uri'] - часть URI текущего URL, допустимая для HTML, например. '/index.php?foo=bar&boo=baz';
$out['notices_array'] - массив уведомлений персональной панели пользователя;
$out['copyright'] - выводит ссылку "Powered by Cotonti";
$out['meta_contenttype'] - MIME-тип документа, по умолчанию используется "text/html";
$out['logstatus'] - отображает статус входа пользователя в систему в виде строкового сообщения;
$out['список пользователей'] - отображает список онлайн-пользователей;
$out['subtitle'] - устанавливает переменную часть тега head <title>. Например, если вы установите для него значение 'Apples', полный заголовок будет выглядеть примерно так: "Яблоки - Фрукты - Мой классный садовый участок".;
$out['meta_desc'] - задает мета-описание страницы;
$out['meta_keywords'] - задает мета-ключевые слова страницы;
$out['meta_lastmod'] - задает дату последнего изменения страницы;
$out['adminpanel'] - отображает ссылку на панель администрирования для зарегистрированных администраторов;
$out['loginout_url'] - URL-адрес для выхода текущего пользователя из системы;
$out['loginout'] - HTML-ссылка для выхода текущего пользователя из системы;
$out['profile'] - HTML-ссылка на настройки профиля текущего пользователя;
$out['guest_username'] - форма ввода имени пользователя для гостей;
$out['guest_password'] - ввод пароля пользователя для гостей;
$out['guest_cookiettl'] - флажок "запомнить меня" для гостей;
$out['guest_register'] - ссылка на регистрацию для гостей;
8. Дерево структуры
Доступ ко всему дереву категорий сайта, управляемому в разделе Администрирование / Структура, осуществляется через $structure global. Оно имеет подпись:
$structure['module_name']['category_code']
Где 'module_name' - это код модуля, такой как 'page', а 'category_code' - это код категории, такой как 'articles'. Возвращаемый элемент представляет собой ассоциативный массив, содержащий ключи:
'path' -
the dot separated path of the codes from structure root, such as / разделенный точками путь к кодам из корня структуры, например'goods.electronics.blenders';
'tpath' - a path consisting of category titles instead, e.g. 'Goods - Electronics - Blenders' - путь, состоящий из названий категорий, например "Товары - Электроника - Блендеры".;
'rpath' - raw path property of the category, e.g. 'goods.1.3' - свойство необработанного пути к категории, например 'goods.1.3';;
'id' - integer identifier - целочисленный идентификатор;
'title' - category title название категории;
'desc' - category descriptionописание категории';
'icon' - category icon path, if present; путь к значку категории, если он присутствует;
'locked' - whether category accepts adding new items; - разрешает ли категория добавлять новые элементы;
'count' - number of items contained. - количество содержащихся элементов.
Дополнительные поля структуры также доступны через $structure. Например, если вы добавили дополнительное поле с кодом "специальность", то оно доступно как
$structure['module_name']['category_code']['specialty']
или чтоб проще для понимания и наглядности
$structure['имя_модуля']['код категории']['специальность']
9. Доступ к базе данных и кэшу
Есть две другие довольно важные глобальные переменные:
$db - экземпляр класса CotDB, используемый для запроса базы данных, смотрите ссылку на класс CotDB и PDO для получения дополнительной информации;
$cache - экземпляр класса Cache, смотрите документацию Cache API для получения дополнительной информации.
10. Другие глобальные списки
Есть еще несколько глобальных коллекций, о которых стоит упомянуть разработчикам расширений:
/**
* Contains information about user groups, you'd better find yourself in system/common.php file
*/
$cot_groups = array();
/**
* Registry for captcha functions
*/
$cot_captcha = array();
/**
* Registry for hash functions
*/
$cot_hash_funcs = array('md5', 'sha1', 'sha256');
/**
* Array of custom cot_import() filter callbacks
*/
$cot_import_filters = array();
/**
* Custom e-mail send callbacks
*/
$cot_mail_senders = array();
/**
* Custom parser functions registry
*/
$cot_parsers = array();
/**
* Parameters to be automatically appended to all URLs if present
*/
$cot_url_appendix = array();
/**
* List of installed (active) plugins. Where keys is a plugin name and value is boolean (TRUE/FALSE).
*/
$cot_plugins_active = array();
/**
* List of installed (active) modules. Where keys is a module name and value is boolean (TRUE/FALSE).
*/
$cot_modules = array();
Author: Trustmaster & Macik
перевод с английского: webitproff