- Сделать настройки и решить вопросы в PHP.
- Убрать (заглушить) эти ошибки в соответствующем .inc-файле Drupal.
- Поставить и заглушить в модуле «Disable messages».
- Или внести исправления в модуль(и) Drupal.
«Легко видеть», как говорила моя учительница математики, указывать хостеру, что и как он должен делать, я не могу. Ставить ещё один модуль только для того, чтобы «погасить» сообщения об ошибках - не интересно, а что-то поправить в модулях - ещё не готов. Потому поставил простую «заглушку» в Drupal 6.33. Нашёл её на drupal.org, в теме «
Strict warning: non-static method view::load()», а именно
в комментарии #54 от petyovsky – где написано, что надо в файле /includes/common.inc скорректировать строку:
# Filter out strict warnings due to conflicts between views-6.x-2.xx(6.x-3.0) and PHP 5.4
# if ($errno & (E_ALL ^ E_DEPRECATED ^ E_NOTICE)) {
if ($errno & (E_ALL & ~(E_DEPRECATED | E_NOTICE | E_STRICT))) {
Есть. «Заглушка» стоит и можно запускать народ. Ну, а покорный слуга удалился к выполнению своих обязанностей. И только вечером, вкусно отужинав, решил продолжить неблагодарное дело. Ведь, как сказал один таинственный гость:
- Всё это «костыли». Надо править код под php 5.4. Существуют патчи на drupal.org, всё прекрасно правится. Практически все ошибки – это попытка статического вызова нестатического метода класса. Достаточно объявить метод как статический.
Будем искать. Самое противное, что не удалось найти готовые патчи (patch) для
Views 6.x-3.0. Для 6.x-2.16 есть, а для 6.х-3.0 – нет. А хочется со временем перейти на Drupal 7, значит – откатываться не надо. В ранее указанной теме на drupal.org нашёл
patch для Views 6.x-2.xx. Отправляем сайт в режим обслуживания, убираем «заглушку» в common.inc и приступаем к волшебству (работаем в папке модуля «Views»):
/includes/handlers.inc (*)
# function option_definition(&$options) {
public static function option_definition(&$options) {
$options['reduce_duplicates'] = array('default' => FALSE);
}
/includes/view.inc
# function db_objects() {
public static function db_objects() {
return array('display');
}
# function &load($arg, $reset = FALSE) {
public static function &load($arg, $reset = FALSE) {
static $cache = array();
# function load_views() {
public static function load_views() {
$result = db_query("SELECT DISTINCT v.* FROM {views_view} v");
$views = array();
$vids = array();
Щёлкаем на стартовую страницу, смотрим ошибки и видим чудо – остались только неверные объявления функций! А как их исправить, думаю понятно – в логе чётко всё прописано:
/plugins/views_plugin_row.inc
# function options_validate($form, &$form_state) { }
function options_validate(&$form, &$form_state) { }
/plugins/views_plugin_query.inc
# function options_submit(&$form, &$form_state) { }
function options_submit($form, &$form_state) { }
/handlers/views_handler_sort.inc
# function options_validate(&$form, &$form_state) {
function options_validate($form, &$form_state) {
# function options_submit(&$form, &$form_state) {
function options_submit($form, &$form_state) {
/handlers/views_handler_filter.inc
# function options_validate(&$form, &$form_state) {
function options_validate($form, &$form_state) {
А вот, с query() и options() – чуть сложнее. Идём в папку «includes» (модуля «Views») и ищем файлы с текстом их описания (query() и options()). Там их и добиваем:
/includes/base.inc
# function options() { }
function options(&$options) { }
/includes/handlers.inc
# function query($group_by = FALSE) { }
function query() { }
Время проверки. Открываем главную страницу сайта – ошибки исчезли, «как бабка пошептала». Но, успокаиваться рано, продолжаем движение. Так и есть, при работе с таксономией (на «мустанге» - это ключевые слова в «облаке») получаем очередной «плевок»:
Creating default object from empty value в файле /var/www/mustangsoft/mustang-soft.com/sites/all/modules/i18n/i18ntaxonomy/i18ntaxonomy.pages.inc в строке 34.
(i18n) версии 6.x-1.10. На что уже есть
patch:
/all/modules/i18n/i18ntaxonomy/i18ntaxonomy.pages.inc
function i18ntaxonomy_term_page($str_tids = '', $depth = 0, $op = 'page') {
switch ($op) {
case 'page':
// Build breadcrumb based on first hierarchy of first term:
# Карандаш 21.10.2014
# Добавляем строку
$current = new stdClass();
$current->tid = $tids[0];
$breadcrumb = array();
while ($parents = taxonomy_get_parents($current->tid)) {
Осталось ещё немного покрутить, отправить сайт в работу – пусть ночью что-то роботы найдут. Так и сделал. А утром журнал ошибок показал жалобу при попытке робота гугла посмотреть карту сайта (есть у меня модуль XMLsitemap):
Declaration of views_handler_argument::options_validate() should be compatible with views_handler::options_validate($form, &$form_state) в файле /var/www/mustangsoft/mustang-soft.com/sites/all/modules/views/handlers/views_handler_argument.inc в строке 917.
«А слона-то я и не заметил». Последняя правка в модуле «Views»:
/handlers/views_handler_argument.inc
# function options_validate(&$form, &$form_state) {
function options_validate($form, &$form_state) {
Всё, теперь – порядок.
Всем удачи! Надеюсь, что и у вас всё получится.
23.10.2014 г. Карандаш.
* В версии Drupal 6.35 + Views-6.x-3.2 – я это уже не правил
P.S.: (24.03.2015 г.)
При обновлении «движка» сайта до версии 6.35 + Views-6.x-3.2 мне потребовалось меньше правок. В текстах модуля Views появились комментарии о PHP 5.4, и разбираться стало проще и быстрее. Возможно, помогла подготовительная работа – я исключил и удалил неиспользуемые модули. Итог – в одном месте я уже ничего не изменял, а именно в /includes/handlers.inc - объявление функции function option_definition(&$options).