Вы здесь

"На сайте произошла непредвиденная ошибка" при сохранении рассылки

0

Здравствуйте, друзья.
Помогите, пожалуйста, устранить ошибку.
Происходит она вот как.
Имею рабочий сайт на друпал 7 (обновлен с друпала 6 самостоятельно). При попытке сохранении материала типа рассылка (использую simplenews, MimeMail и Mail System) система выдает ошибку.

В системном журнале два сообщения с аналогичным содержанием

Здесь, собственно, содержание

отдельно текст сообщения ошибки

PDOException: SQLSTATE[23000]: Integrity constraint violation: 1048 Column 'tid' cannot be null: INSERT INTO {simplenews_newsletter} (nid, tid, status) VALUES (:db_insert_placeholder_0, :db_insert_placeholder_1, :db_insert_placeholder_2); Array ( [:db_insert_placeholder_0] => 7364 [:db_insert_placeholder_1] => [:db_insert_placeholder_2] => 0 ) в функции simplenews_newsletter_save() (строка 2001 в файле /home/g/gracil/testqg2/public_html/sites/all/modules/simplenews/simplenews.module).

Конечно же, на старой версии сайта (д6)таких вопросов не возникало.
Буду признателен за помощь.

Версия Drupal: 
7.x
Связанные проекты: 
SimplenewsMail System
Вопрос задан 27.03.2016 - 04:33

Из текста ошибки видно, что нарушены ограничения целостности, колонка tid не должна быть 0. И по запросу видно что в эту колонку пишется пустое значение, т.е. по сути ноль. Надо проверить все таблицы таксономии (taxonomy_) на предмет пустого значения в колонке tid.

Комментарий оставлен 27.03.2016 - 09:23

Просмотрел таблицы, однако tid со значением 0 пока не обнаружил. Но вот что интересно и, возможно, это может быть причиной "поломки". После обновления с д6 на д7 во всех типах материалов вместо поля типа "Ссылка на термин" (как было в д6), стало поле типа Entity Reference. И это поменять пока неизвестно как.

Добавил новое поле типа "Ссылка на термин" и уже старая ошибка исчезла в журнале, однако появляется сообщение при попытке сохранения материала "рассылка".

Может быть есть ещё у кого мысли как это полечить?

Комментарий оставлен 27.03.2016 - 22:17

Раман, я написал в комментариях к своему ответу кто виноват и что делать. Модуль Simplenews требует чтобы поле категории рассылки было типа taxonomy_term_reference. Поэтому:
1. Выясняем, какое поле требует модуль для категории рассылки. Это переменная variable_get('simplenews_category_field', 'field_simplenews_term') . Скорее всего, это существующее поле taxonomy_vocabulary_17
2. Изменяем переменную на созданную вами поле: variable_set('simplenews_category_field', 'field_simplenews_category_field')
3. Новые рассылки уже будут нормально выполняться, а вот старые будут вызывать ошибку. Нужно программно будет заменить значение taxonomy_vocabulary_17 на simplenews_category_field, а потом первое поле можно и удалить.

Попробуйте выполнить, все действия обратимы. Что непонятно - спрашивайте. Мне отступать уже некуда - добрые люди начали минусовать.

Комментарий оставлен 29.03.2016 - 10:23

На все, видимо, требуется терпение. Спасибо Вам большое за подсказки, fidelio. Я пока что пришел к тому, что если создать заново тип материала рассылка (т.е. любой новый тип назвать рассылкой), то все начинает работать.
В моем случае действительно к рассылке по умолчанию прикреплен словарь с id=17. Но Вы меня простите, fidelio, как изменить переменную как Вы пишите "variable_set('simplenews_category_field', 'field_simplenews_category_field')", т.е. куда этот код, собственно вставлять.

Надеюсь на Ваше терпение и заранее благодарю Вас.

Комментарий оставлен 31.03.2016 - 01:50

Функции variable_set(),variable_get() записывают,читают значение переменной в таблицу variable. Значения хранятся там в сериализированном виде, напрямую изменить в таблице при помощи phpmyadmin влечет некоторые неудобства.

Как выполнить php-код на сайте: http://www.drupal.ru/node/16018
Т.е. это разовое выполнение во временной конструкции.

Комментарий оставлен 31.03.2016 - 10:06

Ответы

-1

При инсталляции модуля Simplenews создается словарь таксономии Категории рассылки (admin/structure/taxonomy/newsletter) и тип материала Рассылка (admin/structure/types/manage/simplenews). В этом типе материала есть обязательное поле Newsletter category - ссылка на этот словарь. В словаре должен быть хотя бы один термин и при создании ноды рассылки должен быть выбор категории рассылки.

Ответ дан 27.03.2016 - 16:48

Спасибо Вам, fidelio. Но я все это сделал по умолчанию так как Вы описали и кроме того, все было и раньше так же в Д6 и все отлично работало. Проблема сохраняется и кроется в чем-то другом.
Вопрос пока открыт.

Комментарий оставлен 27.03.2016 - 22:23

Указанная ошибка возникает, если функция simplenews_get_category_field() возвращает FALSE. Подозреваю, что у вас неверное имя поля Newsletter category. Поле должно быть равно значению variable_get('simplenews_category_field', 'field_simplenews_term') . Попробуйте заменить либо имя поля (сейчас simplenews_category_field) , либо изменить значение переменной: variable_set('simplenews_category_field', 'field_simplenews_category_field').

Скорее всего, была выполнена функция обновления simplenews_update_7000() и значения поля-ссылки стало 'taxonomy_vocabulary_' . $vid ( 'taxonomy_vocabulary_17' в вашем случае). Но это поле уже существует, но с типом Entity reference. Тогда остается второй вариант - использовать созданное вручную поле типа taxonomy_term_reference. Но тогда, скорее всего, будут ошибки при редактировании старых рассылок.

Комментарий оставлен 28.03.2016 - 08:45

Можете помочь с реализацией перевода значений полей в других типах материалов за логичное вознаграждение?

Комментарий оставлен 17.05.2016 - 20:53