Руководство по пользовательским функциям Cotonti
Это руководство содержит подробное описание четырех функций, предназначенных для определения владельца или автора контента. Каждая функция снабжена примерами кода и инструкциями по использованию.
1. Активация файла с функциями
Прежде чем использовать функции, вам необходимо убедиться, что файл /system/functions.custom.php включен в конфигурации сайта.
Откройте файл /datas/config.php.
Найдите строку:
$cfg['customfuncs'] = false;
И измените её на:
$cfg['customfuncs'] = true;
Теперь Cotonti будет автоматически загружать ваши пользовательские функции из /system/functions.custom.php.
2. Размещение кода функций
Весь предоставленный ниже код должен быть помещен в один файл: /system/functions.custom.php.
Описание функций и примеры
1. Функция cot_getUserDataOwner()
Эта функция является вспомогательной. Она ищет пользователя-владельца страницы по его ID или имени в URL.
Для чего
Получить полный массив данных из таблицы cot_users для конкретного пользователя. Эти данные могут быть использованы для отображения информации о пользователе.
Когда использовать
Когда вам нужно программно получить данные о владельце страницы: его логин, email, дату регистрации и т.д. Эта функция возвращает PHP-массив и не предназначена для прямого использования в шаблонах.
Где использовать
Внутри других PHP-функций или файлов, которые работают с данными пользователя.
Код функции
/**
* Получает данные пользователя-владельца страницы.
*
* Эта функция определяет владельца страницы на основе параметров 'id' или 'u' из URL.
* Если параметры отсутствуют, она использует ID текущего авторизованного пользователя.
*
* @return array|null Массив данных пользователя или null, если пользователь не найден.
*/
function cot_getUserDataOwner()
{
// Импортируем из GET-параметра 'id' число (INT), это ID пользователя
$id = cot_import('id', 'G', 'INT');
// Импортируем из GET-параметра 'u' строку (TXT), это username пользователя
$u = cot_import('u', 'G', 'TXT');
// Если передан username, но не передан id
if (!empty($u) && empty($id)) {
// Выполняем запрос в БД: выбираем user_id из таблицы пользователей, где user_name совпадает с $u
$id = Cot::$db->query(
'SELECT user_id FROM ' . Cot::$db->users . ' WHERE user_name = ? LIMIT 1',
[$u]
)->fetchColumn();
}
// Если не передан ни id, ни username, но текущий юзер авторизован
elseif (empty($id) && empty($u) && Cot::$usr['id'] > 0) {
// Тогда используем id текущего авторизованного пользователя
$id = Cot::$usr['id'];
}
// Проверяем существование пользователя в БД по полученному id и возвращаем его данные
if ($id > 0) {
return Cot::$db->query(
'SELECT * FROM ' . Cot::$db->users . ' WHERE user_id = ? LIMIT 1',
[$id]
)->fetch();
}
return null;
}
Пример использования в PHP
// Пример использования функции в PHP-коде
$userData = cot_getUserDataOwner();
if ($userData) {
echo "Привет, " . $userData['user_name'] . "!";
}
2. Функция cot_isOwner()
Эта функция предназначена для проверки прав доступа. Она использует cot_getUserDataOwner() для того, чтобы определить, является ли текущий авторизованный пользователь владельцем страницы.
Для чего
Вывести или скрыть какой-либо контент в зависимости от того, является ли текущий посетитель владельцем страницы.
Когда использовать
Когда вам нужно отобразить кнопки «Редактировать» или «Удалить», доступ к которым должен быть только у владельца страницы.
Где использовать
Исключительно в шаблонах (.tpl) с помощью тега {PHP|...}.
Код функции
/**
* Проверяет, является ли текущий пользователь владельцем страницы.
*
* Эта функция использует cot_getUserDataOwner() для получения данных владельца
* и сравнивает его ID с ID текущего авторизованного пользователя.
*
* @return bool True, если текущий пользователь — владелец страницы, иначе False.
*/
function cot_isOwner()
{
// Получаем данные владельца страницы с помощью вспомогательной функции
$ownerData = cot_getUserDataOwner();
// Возвращаем true, если данные найдены и ID владельца совпадает с ID текущего пользователя
if (!empty($ownerData) && Cot::$usr['id'] > 0 && Cot::$usr['id'] == $ownerData['user_id']) {
return true;
}
// Если условия не выполнены, возвращаем false
return false;
}
Пример использования в шаблоне
<!-- Если текущий пользователь — владелец страницы -->
<!-- IF {PHP|cot_isOwner()} -->
<a href="{PAGE_ID|cot_url('page','m=edit&id=$this')}">{PHP.L.Edit}</a>
<!-- ENDIF -->
3. Функция cot_isTopicAuthor()
Эта функция специально разработана для форумов. Она проверяет, является ли текущий пользователь автором топика, который он сейчас просматривает.
Для чего
Вывести или скрыть контент для автора конкретного топика.
Когда использовать
Когда вам нужно показать специальное сообщение, кнопку или любой другой контент только тому, кто создал топик. Например, на странице с первым сообщением топика.
Где использовать
В шаблонах форумов, обычно в forums.posts.tpl за пределами цилка постов BEGIN: FORUMS_POSTS_ROW и END: FORUMS_POSTS_ROW .
Код функции
/**
* Проверяет, является ли текущий пользователь автором топика.
*
* Эта функция получает ID топика напрямую из URL и сравнивает user_id автора топика
* с ID текущего авторизованного пользователя.
*
* @return bool True, если текущий пользователь — автор топика, иначе False.
*/
function cot_isTopicAuthor()
{
// Объявляем глобальную переменную, содержащую имя таблицы форумов.
global $db_forum_topics;
// Импортируем ID топика напрямую из URL-параметра 'q'.
$topicId = cot_import('q', 'G', 'INT');
// Проверяем, авторизован ли пользователь, и передан ли ID топика.
if (!Cot::$usr || Cot::$usr['id'] <= 0 || empty($topicId)) {
return false;
}
// Выполняем запрос в БД.
$posterId = Cot::$db->query(
"SELECT ft_firstposterid FROM $db_forum_topics WHERE ft_id = ? LIMIT 1",
[$topicId]
)->fetchColumn();
// Возвращаем true, если ID автора топика совпадает с ID текущего пользователя.
if ($posterId > 0 && Cot::$usr['id'] == $posterId) {
return true;
}
// Если условия не выполнены, возвращаем false.
return false;
}
Пример использования в шаблоне
<!-- IF {PHP|cot_isTopicAuthor()} -->
<b> Привет {PHP.usr.profile.user_name}, ты много пропустил</b>
<!-- ENDIF -->
4. Функция cot_isPageAuthor()
Эта функция работает аналогично cot_isTopicAuthor(), но предназначена для страниц (статей) и использует ID владельца страницы.
Для чего
Вывести или скрыть контент для автора конкретной статьи.
Когда использовать
Когда вам нужно показать специальный контент, кнопку или сообщение только тому, кто создал статью. Это полезно для статей, где важно отметить автора.
Где использовать
В шаблонах страниц, обычно в page.tpl.
Код функции
/**
* Проверяет, является ли текущий пользователь автором статьи.
*
* Эта функция получает ID статьи напрямую из URL и сравнивает user_id автора статьи
* с ID текущего авторизованного пользователя.
*
* @return bool True, если текущий пользователь — автор статьи, иначе False.
*/
function cot_isPageAuthor()
{
// Объявляем глобальную переменную, содержащую имя таблицы статей.
global $db_pages;
// Импортируем ID статьи напрямую из URL-параметра 'id'.
$pageId = cot_import('id', 'G', 'INT');
// Проверяем, авторизован ли пользователь, и передан ли ID статьи.
if (!Cot::$usr || Cot::$usr['id'] <= 0 || empty($pageId)) {
return false;
}
// Выполняем запрос к БД.
$ownerId = Cot::$db->query(
"SELECT page_ownerid FROM $db_pages WHERE page_id = ? LIMIT 1",
[$pageId]
)->fetchColumn();
// Возвращаем true, если ID владельца статьи совпадает с ID текущего пользователя.
if ($ownerId > 0 && Cot::$usr['id'] == $ownerId) {
return true;
}
// Если условия не выполнены, возвращаем false.
return false;
}
Пример использования в шаблоне
<!-- IF {PHP|cot_isPageAuthor()} -->
<b> Привет {PHP.usr.profile.user_name}, ты автор этой статьи.</b>
<!-- ENDIF -->