<?php
if (file_exists(conf_path().'/settings-zbase.php')) require_once conf_path().'/settings-zbase.php';
else {
if(isset($db_url)) $zbase_url = $db_url; // drupal 6 compatibility
else if (file_exists(conf_path().'/settings.php')) {
require_once conf_path().'/settings.php';
$zbase_url = $db_url;
}
}
?>В представленном фрагменте кода, для Друпал 10 "conf_path()" - устарел
Как исправить подключение директорию drupal/sites/default для D10?

Комментарии
Что мешает самому построить путь к settings.php используя, например, константу DRUPAL_ROOT ?
Однако, в контексте Drupal 10 как-то проще обращаться к методам класса Drupal\Core\Site\Settings для получения значений settings.php. Например:
<?php...
// Получить все настройки из settings.php
$my_settings = \Drupal\Core\Site\Settings::getAll();
...
// Получить конкретную настройку из settings.php
$setting = \Drupal\Core\Site\Settings::get('install_profile');
...
?>
"sitePath" пока поставил, вместо "conf_path".
Ещё через сервисы подключить можно:
$site_path = \Drupal::service('site.path');
Но пока не хочется совсем переделывать модуль под D10, так как не знаю когда, Drupal и Symfony смогут сертифицировать под ФСТЭК. Причем в версии ПХП хотя бы 8.2.
Этот первый модуль, который получает доступ к базам данных сайта, и второй базе - биллинга
через файлы настроек.
Сейчас пытаюсь адаптировать другие модули, которые минимально необходимы для работы в связке с этим первым.
Задача включить интерфейс биллинга по адресу url, но чета не получается ...
Пока не понял, как через файл контроллера, подключить адрес этой страницы.
В D7 так:
файл vircadm.module
<?php require_once 'vircadm-drupal.inc';require_once 'vircadm-drupal'.substr(Drupal::VERSION,0,2).'.inc';
require_once 'vircadm-roles.inc'; // Корень модуля
function vircadm() {
global $user, $base_path;
if (!$user->uid) {
$_REQUEST['destination'] = '?q=vircabo';
//drupal_goto(); //функция перенаправления drupal7,
drupal_get_destination();//функция перенаправления drupal10
return '';
}
zBaseSetConfig('vircadm');
loadConstant('LOGIN');
$drupal = (defined("VIRC_TEMPL") && VIRC_TEMPL == false); // не использовать собственный шаблон
//$drupal = true;
$content = vircadm_content();
$head = vircadm_header($drupal);
if (!$drupal) {
include 'page-vircadm.tpl.php';
exit;
}
return $content;
}?>
Файл vircadm-drupal.inc
<?php
function vircadm_menu() {
$items = array();
$items['vircadm'] = array(
'title' => 'Виртуальный ИРЦ',
'page callback' => 'vircadm',
'page arguments' => null,
'access arguments' => array('access content'),
'type' => MENU_CALLBACK, //MENU_NORMAL_ITEM,
);
}
?>
Начиная с друпал 8, подход к работе значительно поменялся. Для объявления URL используется yml файл. Вот тут по ссылке базовый пример, как создать url и обрабатывать его. Я специально убрал все лишнее из модуля, что бы осталась только часть про URL. Пример модуля
Понятно что поменялось всё с 8й версии.
В инструкциях друпал написано, что можно подключить отдельный интерфейс, через объявление сервиса, или с помощью метода в файле контроллера.
Спасибо за пример ...
Набор наших модулей, реализуют учётную систему. Например для ЖКХ: https://demo.rcgkh.ru Если авторизоваться там с ролью абонент, то откроется Личный кабинет абонента., но если с любой другой ролью, то откроется как раз интерфейс биллинговой системы, в которой работают сотрудники предприятий ЖКХ.
Приведённый кусок кода выше, определят куда пробросить пользователя после авторизации, зная его роль.
Но, для всех ролей кроме Абонент ЖКХ, открывается интерфейс биллинга, у которого есть всё, и ломать его нет смысла.
В конце приведенного кода, есть подключение nclude page-vircadm.tpl.php и дальше друпал не участвует в отображении интерфейса.
<?php
if (!$drupal) {include 'page-vircadm.tpl.php';
exit;
}
return $content; ?>
И ещё, в D10 упразднена функция drupal_goto();
замена сходу не сработала.
Сейчас попробовал заменить на Drupal::destination();
посыпались ошибки типа:
Symfony\Component\HttpKernel\Exception\ControllerDoesNotReturnResponseException: Контроллер должен вернуть объект "Symfony\Component\HttpFoundation\Response", но он вернул значение null. Вы забыли добавить инструкцию return где-нибудь в вашем контроллере? in () (строка 98 из core/lib/Drupal/Core/EventSubscriber/EarlyRenderingControllerWrapperSubscriber.php).
Для замены drupal_goto() посмотрите на этот класс:
Symfony\Component\HttpFoundation\RedirectResponse;
У меня рабочего примера под рукой нет, но думаю контроллер должен возвращать что-то в этом духе:
return new RedirectResponse($url);
Для проверки роли пользователя можно использовать:
<?php $user = \Drupal::currentUser(); ?>Так проверяем роль:
<?php $user->hasRole('admin') // true/false ?>Это лучше всего в вашем случае. Метод
DrupalKernel::$sitePathкак раз идеален для этого.Deprecated. https://www.drupal.org/project/bs_base/issues/3346593
Спасибо! Я сейчас тратил время, чтоб вариант через сервисы попробовать.
Я читал мануалы ориентируясь на D9+, в каком то описании было упомянуто что есть 2 варианта... Значит остался один, через метод класса. Будем теперь методы изучать, !
Немного не так, не через сервисы, а через "объявление" сервиса...
Добрый день.
Вы пишите про сертификацию ФСТЭК для Drupal и Symfony. Можете подробнее рассказать об этом если в теме? Инициализирует сертификацию сам ФСТЭК по собственному графику или допустим я создаю интернет магазин и могу им заявку отправить на сертификацию.
День добрый!
Да, подаёте заявку, по форме центра который проводит сертификацию, платите много денег, и ждёте много времени... Пока они будут проверку делать, может что-то скажут переделать...
Но! Проблема в том, что они отстают от сертификации ПО, на актуальных версиях PHP. Не говоря про версии фреймворков...
По этом, в нашем случае необходимо поддерживать вариант работы нашего ПО, так чтоб оно могло работать и на пхп5,6
Насколько я знаю, в начале 2025 года, сертифицированный под ФСТЭК линкус поддерживал только пхп 5,6.