Файл: upload/core/functions/seo.php
Строк: 635
<?php
function generateBreadcrumbs(array $paths)
{
// Готовим HTML
$htmlOutput = '<nav aria-label="Хлебные крошки"><ol class="breadcrumb-list">';
$count = count($paths);
for ($i = 0; $i < $count; $i++) {
$path = $paths[$i][0];
$label = $paths[$i][1];
if ($path === '#') {
$htmlOutput .= "<li class='breadcrumb-item'><span class='breadcrumb-active'>$label</span></li>";
} else {
$htmlOutput .= "<li class='breadcrumb-item'><a href='$path' class='breadcrumb-link'>$label</a></li>";
}
// Добавляем разделитель, кроме последнего элемента
if ($i < $count - 1) {
$htmlOutput .= "<span class='breadcrumb-separator'> › </span>";
}
}
$htmlOutput .= '</ol></nav>';
// Формируем JSON-LD
$listItems = [];
foreach ($paths as $pos => $data) {
$path = $data[0];
$label = $data[1];
$listItems[] = [
'@type' => 'ListItem',
'position' => $pos + 1,
'name' => $label,
'item' => ($path !== '#' ? $path : '')
];
}
$jsonLdData = [
'@context' => 'https://schema.org',
'@type' => 'BreadcrumbList',
'itemListElement' => $listItems
];
return [
'html' => $htmlOutput,
'json_ld' => json_encode($jsonLdData, JSON_PRETTY_PRINT),
];
}
function metaInfo()
{
$id = abs((int)($_GET['id'] ?? 0));
$section = FetchAssoc(dbquery("SELECT * FROM `section` WHERE `id` = ?", [$id]));
$profile = FetchAssoc(dbquery("SELECT * FROM `users` WHERE `id` = ?", [$id]));
$in_work = FetchAssoc(dbquery("SELECT * FROM `works` WHERE `id` = ?", [$id]));
$category = FetchAssoc(dbquery("SELECT * FROM `category` WHERE `id` = ?", [$id]));
$subcategory = FetchAssoc(dbquery("SELECT * FROM `subcategory` WHERE `id` = ?", [$id]));
$question = FetchAssoc(dbquery("SELECT * FROM `solutions_question` WHERE `id` = ?", [$id]));
$site_inf = FetchAssoc(dbquery("SELECT * FROM `site_info` WHERE `id` = '1'"));
$pagesData = [
'/' => ['title' => $site_inf['name'] . ' - ' . $site_inf['min_desc'], 'description' => $site_inf['description'], 'keywords' => 'фриланс, главная, площадка', 'noindex' => false],
'/login' => ['title' => 'Авторизация - ' . $site_inf['name'], 'description' => 'Войдите в свою учетную запись, чтобы начать работу.', 'keywords' => 'вход, авторизация, аккаунт', 'noindex' => false],
'/register' => ['title' => 'Регистрация - ' . $site_inf['name'], 'description' => 'Создайте профиль и приступайте к поиску заказов.', 'keywords' => 'регистрация, создание аккаунта, фриланс', 'noindex' => false],
'/exit' => ['title' => 'Выход - ' . $site_inf['name'], 'description' => 'Завершите сеанс и выйдете из своей учетной записи.', 'keywords' => 'выход, завершение сеанса, выход из аккаунта', 'noindex' => true],
'/rules' => ['title' => 'Правила площадки - ' . $site_inf['name'], 'description' => 'Ознакомьтесь с правилами пользования площадкой.', 'keywords' => 'правила, условия использования, соглашение', 'noindex' => false],
'/project-info' => ['title' => 'Информация о проекте - ' . $site_inf['name'], 'description' => 'Подробнее о наших услугах и возможностях.', 'keywords' => 'проект, информация, услуги', 'noindex' => false],
'/users' => ['title' => 'Пользователи - ' . $site_inf['name'], 'description' => 'Каталог исполнителей и фрилансеров.', 'keywords' => 'исполнители, каталог, фриланс', 'noindex' => false],
'/new-works' => ['title' => 'Новые вакансии - ' . $site_inf['name'], 'description' => 'Посмотрите свежие вакансии и заказы.', 'keywords' => 'новые вакансии, заказы, фриланс', 'noindex' => false],
'/cart' => ['title' => 'Корзина - ' . $site_inf['name'], 'description' => 'Просмотр текущих выбранных работ.', 'keywords' => 'корзина, покупки, выбор работ', 'noindex' => false],
'/sales' => ['title' => 'Продажи - ' . $site_inf['name'], 'description' => 'История ваших продаж.', 'keywords' => 'продажи, статистика, отчёты', 'noindex' => false],
'/buys' => ['title' => 'Заказы - ' . $site_inf['name'], 'description' => 'История выполненных вами заказов.', 'keywords' => 'заказы, выполненные работы, статистика', 'noindex' => false],
'/mes' => ['title' => 'Сообщения - ' . $site_inf['name'], 'description' => 'Ваш почтовый ящик сообщений.', 'keywords' => 'сообщения, почта, общение', 'noindex' => false],
'/search' => ['title' => 'Поиск - ' . $site_inf['name'], 'description' => 'Найдите нужную услугу.', 'keywords' => 'поиск, исполнители, услуги', 'noindex' => false],
'/tickets' => ['title' => 'Тикеты поддержки - ' . $site_inf['name'], 'description' => 'Ваши обращения в поддержку.', 'keywords' => 'тикеты, поддержка', 'noindex' => false],
'/offer' => ['title' => 'Пользовательское соглашение - ' . $site_inf['name'], 'description' => 'Ознакомьтесь с офертой.', 'keywords' => 'оферта, соглашение', 'noindex' => false],
'/privacy' => ['title' => 'Политика конфиденциальности - ' . $site_inf['name'], 'description' => 'Политика обработки персональных данных.', 'keywords' => 'конфиденциальность, персональные данные', 'noindex' => false],
'/orders' => ['title' => 'Услуги - ' . $site_inf['name'], 'description' => 'Политика пердоставления услуг.', 'keywords' => 'заказы, покупки', 'noindex' => false],
'/account' => ['title' => 'Аккаунт - ' . $site_inf['name'], 'description' => 'Редактирование своего профиля.', 'keywords' => 'редактирование профиля, аккаунт, редактирование', 'noindex' => false],
'/account/design-profile' => ['title' => 'Оформление профиля - ' . $site_inf['name'], 'description' => 'Настройте оформление своего профиля.', 'keywords' => 'оформление профиля, дизайн, настройка', 'noindex' => false],
'/account/sequrity' => ['title' => 'Безопасность - ' . $site_inf['name'], 'description' => 'Измените пароль и настройте защиту.', 'keywords' => 'безопасность, защита, смена пароля', 'noindex' => false],
'/account/requisites' => ['title' => 'Реквизиты - ' . $site_inf['name'], 'description' => 'Управляйте своими реквизитами.', 'keywords' => 'реквизиты, оплата, банковские реквизиты', 'noindex' => false],
'/load-file/avatar' => ['title' => 'Загрузка аватара - ' . $site_inf['name'], 'description' => 'Загрузка аватара пользователя.', 'keywords' => 'аватар, загрузка', 'noindex' => true],
'/load-file/header' => ['title' => 'Загрузка шапки профиля - ' . $site_inf['name'], 'description' => 'Загрузка изображения шапки.', 'keywords' => 'шапка, загрузка', 'noindex' => true],
'/load-file/background' => ['title' => 'Загрузка фона профиля - ' . $site_inf['name'], 'description' => 'Загрузка фонового изображения.', 'keywords' => 'фон, загрузка', 'noindex' => true],
'/recover-pass' => ['title' => 'Восстановление пароля - ' . $site_inf['name'], 'description' => 'Забыл пароль?', 'keywords' => 'забыл пароль, восстановление пароля', 'noindex' => false],
'/check-recover-code' => ['title' => 'Проверка кода - ' . $site_inf['name'], 'description' => 'Проверьте полученный код для сброса пароля.', 'keywords' => 'код, проверка, сброс пароля', 'noindex' => false],
'/change-recover-pass' => ['title' => 'Изменение пароля - ' . $site_inf['name'], 'description' => 'Задайте новый пароль.', 'keywords' => 'смена пароля, восстановление доступа', 'noindex' => false],
'/mes/' . $id => ['title' => 'Диалог с ' . ($profile['login'] ?? '') . ' - ' . $site_inf['name'], 'description' => 'Открыть сообщение.', 'keywords' => 'просмотреть сообщение, письмо, ' . ($profile['login'] ?? ''), 'noindex' => true],
'/new-work' => ['title' => 'Новое обьявление - ' . $site_inf['name'], 'description' => 'Опубликуйте новое задание.', 'keywords' => 'создание заказа, новая работа, публикация задания', 'noindex' => false],
'/balance' => ['title' => 'Баланс - ' . $site_inf['name'], 'description' => 'Пополнение баланса.', 'keywords' => 'баланс, пополнение счета, финансы', 'noindex' => false],
'/balance/payment-requests' => ['title' => 'Заявки на вывод - ' . $site_inf['name'], 'description' => 'Ваши заявки на вывод средств.', 'keywords' => 'вывод средств, заявки', 'noindex' => true],
'/work' . $id => ['title' => ($in_work['name_work'] ?? '') . ' - ' . $site_inf['name'], 'description' => ($in_work['desc_work'] ?? ''), 'keywords' => 'работа, просмотр заказа, проект, ' . ($in_work['name_work'] ?? ''), 'noindex' => false],
'/work-edit' . $id => ['title' => 'Редактирование работы - ' . $site_inf['name'], 'description' => 'Редактирование опубликованной работы.', 'keywords' => 'работа, редактирование', 'noindex' => true],
'/feedback' . $id => ['title' => 'Отзыв о работе - ' . $site_inf['name'], 'description' => 'Добавление отзыва о работе.', 'keywords' => 'отзывы, рейтинг, оценка', 'noindex' => true],
'/feedback/edit' . $id => ['title' => 'Редактирование отзыва - ' . $site_inf['name'], 'description' => 'Измените отзыв.', 'keywords' => 'редактирование отзыва, отзывы, исправления', 'noindex' => true],
'/deal' . $id => ['title' => 'Информация о сделке №' . $id . ' - ' . $site_inf['name'], 'description' => 'Информация о выполнении работы.', 'keywords' => 'заказ, покупка, услуга', 'noindex' => true],
'/id' . $id => ['title' => 'Профиль пользователя ' . ($profile['login'] ?? '') . ' - ' . $site_inf['name'], 'description' => 'Просмотр профиля пользователя ' . ($profile['login'] ?? ''), 'keywords' => 'профиль пользователя, исполнитель, заказчик, ' . ($profile['login'] ?? ''), 'noindex' => false],
'/category' . $id => ['title' => ($category['name'] ?? '') . ' - ' . $site_inf['name'], 'description' => ($category['description'] ?? ''), 'keywords' => 'категория, типы заданий, фильтры, ' . ($category['name'] ?? ''), 'noindex' => false],
'/section' . $id => ['title' => ($section['name'] ?? '') . ' - ' . $site_inf['name'], 'description' => 'Просмотр раздела ' . ($section['name'] ?? ''), 'keywords' => 'раздел, рубрика, фильтрация, ' . ($section['name'] ?? ''), 'noindex' => false],
'/subcategory' . $id => ['title' => ($subcategory['name'] ?? '') . ' - ' . $site_inf['name'], 'description' => 'Просмотр подраздела ' . ($subcategory['name'] ?? ''), 'keywords' => 'подраздел, фильтр, сортировка, ' . ($subcategory['name'] ?? ''), 'noindex' => false],
'/solutions' => ['title' => 'Решения - ' . $site_inf['name'], 'description' => 'Готовые решения и ответы.', 'keywords' => 'решения, ответы, помощь', 'noindex' => false],
'/solutions/question' . $id => ['title' => ($question['question'] ?? '') . ' - ' . $site_inf['name'], 'description' => ($question['solution'] ?? ''), 'keywords' => 'вопрос, решение, ' . ($question['question'] ?? ''), 'noindex' => false],
// ===== ADMIN =====
'/admin' => ['title' => 'Админ-панель - ' . $site_inf['name'], 'description' => 'Управление платформой.', 'keywords' => 'админ, панель управления', 'noindex' => true],
'/admin/arbitrage-disp' => ['title' => 'Арбитраж: споры - ' . $site_inf['name'], 'description' => 'Список арбитражных споров.', 'keywords' => 'арбитраж, диспуты', 'noindex' => true],
'/admin/arbitrage-tickets' => ['title' => 'Арбитраж: тикеты - ' . $site_inf['name'], 'description' => 'Список арбитражных тикетов.', 'keywords' => 'арбитраж, тикеты', 'noindex' => true],
'/admin/payment-requests' => ['title' => 'Заявки на вывод - ' . $site_inf['name'], 'description' => 'Обработка заявок на вывод средств.', 'keywords' => 'вывод средств, заявки', 'noindex' => true],
'/admin/search-info' => ['title' => 'Поиск информации - ' . $site_inf['name'], 'description' => 'Поиск данных по платформе.', 'keywords' => 'поиск, админ', 'noindex' => true],
'/admin/project-profit' => ['title' => 'Прибыль проекта - ' . $site_inf['name'], 'description' => 'Статистика доходов проекта.', 'keywords' => 'прибыль, статистика', 'noindex' => true],
'/admin/platform-parameters' => ['title' => 'Параметры платформы - ' . $site_inf['name'], 'description' => 'Настройки платформы.', 'keywords' => 'настройки, параметры', 'noindex' => true],
'/admin/tickets' => ['title' => 'Тикеты пользователей - ' . $site_inf['name'], 'description' => 'Управление тикетами.', 'keywords' => 'тикеты, поддержка', 'noindex' => true],
'/admin/operator-details' => ['title' => 'Операторы поддержки - ' . $site_inf['name'], 'description' => 'Информация об операторах.', 'keywords' => 'операторы, поддержка', 'noindex' => true],
'/admin/nodes' => ['title' => 'Узлы категорий - ' . $site_inf['name'], 'description' => 'Управление категориями и разделами.', 'keywords' => 'категории, узлы', 'noindex' => true],
'/admin/nodes/new-category' => ['title' => 'Новая категория - ' . $site_inf['name'], 'description' => 'Создание новой категории.', 'keywords' => 'категория, создание', 'noindex' => true],
'/admin/nodes/del-section' => ['title' => 'Удаление раздела - ' . $site_inf['name'], 'description' => 'Удаление раздела.', 'keywords' => 'раздел, удаление', 'noindex' => true],
'/admin/nodes/del-subcategory' => ['title' => 'Удаление подкатегории - ' . $site_inf['name'], 'description' => 'Удаление подкатегории.', 'keywords' => 'подкатегория, удаление', 'noindex' => true],
'/admin/nodes/del-category' => ['title' => 'Удаление категории - ' . $site_inf['name'], 'description' => 'Удаление категории.', 'keywords' => 'категория, удаление', 'noindex' => true],
'/admin/nodes/new-subcategory' . $id => ['title' => 'Новая подкатегория - ' . $site_inf['name'], 'description' => 'Создание подкатегории.', 'keywords' => 'подкатегория, создание', 'noindex' => true],
'/admin/nodes/new-section' . $id => ['title' => 'Новый раздел - ' . $site_inf['name'], 'description' => 'Создание раздела.', 'keywords' => 'раздел, создание', 'noindex' => true],
'/admin/nodes/edit-category' . $id => ['title' => 'Редактирование категории - ' . $site_inf['name'], 'description' => 'Редактирование категории.', 'keywords' => 'категория, редактирование', 'noindex' => true],
'/admin/nodes/edit-subcategory' . $id => ['title' => 'Редактирование подкатегории - ' . $site_inf['name'], 'description' => 'Редактирование подкатегории.', 'keywords' => 'подкатегория, редактирование', 'noindex' => true],
'/admin/nodes/edit-section' . $id => ['title' => 'Редактирование раздела - ' . $site_inf['name'], 'description' => 'Редактирование раздела.', 'keywords' => 'раздел, редактирование', 'noindex' => true],
'/admin/solutions' => ['title' => 'Решения (админ) - ' . $site_inf['name'], 'description' => 'Управление решениями.', 'keywords' => 'решения, админ', 'noindex' => true],
'/admin/solutions/del-solution' => ['title' => 'Удаление решения - ' . $site_inf['name'], 'description' => 'Удаление решения.', 'keywords' => 'решение, удаление', 'noindex' => true],
'/admin/solutions/new-category' => ['title' => 'Новая категория решений - ' . $site_inf['name'], 'description' => 'Создание категории решений.', 'keywords' => 'решения, категория', 'noindex' => true],
'/admin/solutions/del-section' => ['title' => 'Удаление раздела решений - ' . $site_inf['name'], 'description' => 'Удаление раздела.', 'keywords' => 'решения, раздел, удаление', 'noindex' => true],
'/admin/solutions/del-category' => ['title' => 'Удаление категории решений - ' . $site_inf['name'], 'description' => 'Удаление категории.', 'keywords' => 'решения, категория, удаление', 'noindex' => true],
'/admin/solutions/new-solution' . $id => ['title' => 'Новое решение - ' . $site_inf['name'], 'description' => 'Создание решения.', 'keywords' => 'решение, создание', 'noindex' => true],
'/admin/solutions/edit-solution' . $id => ['title' => 'Редактирование решения - ' . $site_inf['name'], 'description' => 'Редактирование решения.', 'keywords' => 'решение, редактирование', 'noindex' => true],
'/admin/solutions/new-section' . $id => ['title' => 'Новый раздел решений - ' . $site_inf['name'], 'description' => 'Создание раздела.', 'keywords' => 'решения, раздел, создание', 'noindex' => true],
'/admin/solutions/edit-category' . $id => ['title' => 'Редактирование категории решений - ' . $site_inf['name'], 'description' => 'Редактирование категории.', 'keywords' => 'решения, категория, редактирование', 'noindex' => true],
'/admin/solutions/edit-section' . $id => ['title' => 'Редактирование раздела решений - ' . $site_inf['name'], 'description' => 'Редактирование раздела.', 'keywords' => 'решения, раздел, редактирование', 'noindex' => true],
'/admin/users' => ['title' => 'Пользователи (админ) - ' . $site_inf['name'], 'description' => 'Управление пользователями.', 'keywords' => 'пользователи, админ', 'noindex' => true],
'/admin/users/search-users' => ['title' => 'Поиск пользователей (админ) - ' . $site_inf['name'], 'description' => 'Поиск по базе пользователей.', 'keywords' => 'пользователи, поиск, админ', 'noindex' => true],
'/admin/users/edit-user' . $id => ['title' => 'Редактирование пользователя - ' . $site_inf['name'], 'description' => 'Редактирование данных пользователя.', 'keywords' => 'пользователь, редактирование', 'noindex' => true],
'/admin/groups' => ['title' => 'Группы пользователей - ' . $site_inf['name'], 'description' => 'Управление группами.', 'keywords' => 'группы, роли', 'noindex' => true],
'/admin/groups/new-group' => ['title' => 'Новая группа - ' . $site_inf['name'], 'description' => 'Создание группы.', 'keywords' => 'группа, создание', 'noindex' => true],
'/admin/groups/edit-group' . $id => ['title' => 'Редактирование группы - ' . $site_inf['name'], 'description' => 'Редактирование группы.', 'keywords' => 'группа, редактирование', 'noindex' => true],
'/admin/groups/del-group' => ['title' => 'Удаление группы - ' . $site_inf['name'], 'description' => 'Удаление группы.', 'keywords' => 'группа, удаление', 'noindex' => true],
'/admin/plugins' => ['title' => 'Плагины - ' . $site_inf['name'], 'description' => 'Управление плагинами.', 'keywords' => 'плагины, модули', 'noindex' => true],
'/admin/plugins/payments' => ['title' => 'Платёжные модули - ' . $site_inf['name'], 'description' => 'Управление платёжными модулями.', 'keywords' => 'платежи, модули', 'noindex' => true],
'/admin/plugins/oauth' => ['title' => 'OAuth модули - ' . $site_inf['name'], 'description' => 'Управление OAuth модулями.', 'keywords' => 'oauth, модули', 'noindex' => true],
'/admin/plugins/captcha' => ['title' => 'Captcha модули - ' . $site_inf['name'], 'description' => 'Управление captcha модулями.', 'keywords' => 'captcha, модули', 'noindex' => true],
];
// Текущая страница
$currentPage = parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH);
// Если страница есть в массиве
if (isset($pagesData[$currentPage])) {
$p = $pagesData[$currentPage];
$html = "<title>" . chars($p['title']) . "</title>n";
$html .= "<meta name='description' content='" . chars($p['description']) . "' />n";
if (!empty($p['keywords'])) {
$html .= "<meta name='keywords' content='" . chars($p['keywords']) . "' />n";
}
if (!empty($p['noindex'])) {
$html .= "<meta name='robots' content='noindex, nofollow'>n";
}
$html .= "<meta property='og:type' content='website' />n";
$html .= "<meta property='og:url' content='" . homeLink() . $currentPage . "' />n";
$html .= "<meta property='og:title' content='" . chars($p['title']) . "' />n";
$html .= "<meta property='og:description' content='" . chars($p['description']) . "' />n";
$html .= "<meta property='og:image' content='" . StyleLink() . "/images/seo/og/og-image.png' />n";
return $html;
}
// Если страница не найдена
return "<title>{$site_inf['name']}</title>n<meta name='description' content='{$site_inf['description']}' />";
}
?>