Dilberd
(Dontsovroman)
November 20, 2013, 12:10pm
1
Здравствуйте, такая проблема: на одной форме присутствует 3 textarea(рус,англ,укр.) описания. Виджет выводится нормально, но в Базу данных сохраняет только первое поле, кто-то сталкивался с подобным? Как исправить данную проблему? Спасибо за внимание.
Проверить имена полей, rules в модели, …
В любом случае начать с того, что глянуть через файербаг или аналоги результирующий html и понять, в чем отличие (или совпадение).
Dilberd
(Dontsovroman)
November 20, 2013, 12:21pm
3
без этого плагина сохранение идет нормально по хтмл: не отображает введенный текст во втором и третьем поле,но я так понимаю и не должно.
Вряд ли плагин цепляется на onsubmit и что-нибудь откусывает.
Скорее всего, он подменяет названия полей или еще какую-нибудь чертовщину делает с полями, после чего и происходят странные вещи.
К сожалению, это можно только через дебаг-консоль типа "inspect element" у гуглохрома увидеть.
Но я бы еще глянул, какой $_POST доходит до скрипта, есть ли там нужные данные вообще, и, если есть - с какими ключами массива.
Dilberd
(Dontsovroman)
November 20, 2013, 12:37pm
5
смотрю через хром,в формах все вроде бы нормально,пост массив сейчас попытаюсь проверить.
Dilberd
(Dontsovroman)
November 20, 2013, 12:43pm
6
Вот что выходит с формы:
Array ( [Catalog] => Array ( [article] => 444444 [manufacturer] => qweqwqqq [manufacturer_en] => wwwwww [manufacturer_ua] => eeeeee [title] => rrrrrr [title_en] => ttttt [title_ua] => asdasd [price] => 1 [price_retail] => 2 [mark] => asd [mark_en] => zxc [mark_ua] => qweeqw [type] => 4 [description] =>
asdasas
[description_en] =>
asdasdasd
[description_ua] =>
asdasdasd
[image] => [existence] => 1 [view_exist] => 1 [note] => [supplier] => ) [yt0] => Сохранить )
то есть до скрипта все норм доходит.
значит, где-то в модели отшибается.
смотрите правила модели, место сохранения и beforeSave/beforeValidate.
Коды в студию, короче.
Хотя, если при отсутствии ckeditor сохраняет…
нууу, фиг знает. магия.
Гляньте еще, как выглядит post при отсутствии ckeditor.
Я надеюсь, у ckeditor нет своей серверной части какой-нибудь?
Dilberd
(Dontsovroman)
November 20, 2013, 1:10pm
9
Заменил все виджеты ckeditor на textarea
Array ( [Catalog] => Array ( [article] => 444444 [manufacturer] => qweqwqqq [manufacturer_en] => wwwwww [manufacturer_ua] => eeeeee [title] => rrrrrr [title_en] => ttttt [title_ua] => asdasd [price] => 1 [price_retail] => 2 [mark] => asd [mark_en] => zxc [mark_ua] => qweeqw [type] => 4 [description] =>
asdasas
[description_en] => qwewqewqewq [description_ua] => asdasd [image] => [existence] => 1 [view_exist] => 1 [note] => [supplier] => ) [yt0] => Сохранить )
в смысле серверной части?
beforeValidate() не трогал,стоит дефолтный, а в beforeSave() только обработка файлов и полей наличия и показа.
Ну, у Вас на сервер приходят два идентичных массива, но в одном случае он сохраняется, в другом - нет.
Соответственно, ищите, в какой момент гадость происходит.
Happy debugging )
Dilberd
(Dontsovroman)
November 20, 2013, 1:25pm
11
бррр,стоп,уже не сохраняет и без скедитора…
Вот это больше похоже на правду.
Кеширование схемы, кстати, отключено? если добавить в таблицу колонки при включенном кешировании - как раз такое и наблюдается.
Dilberd
(Dontsovroman)
November 20, 2013, 1:38pm
13
Вставил в экшен апдейта следующее:
$model->description_en=$_POST['Catalog']['description_en'];
Заработало…
Сейчас подключу виджет
Dilberd
(Dontsovroman)
November 20, 2013, 1:41pm
14
Таки да,оно работает))магия какая-то…Странно,что баг проявился только тогда,когда подключил этот виджет.
Если так работает, а без него - нет, то смотрите правила валидации.
Собственно, я это в районе первого поста написал.
Кстати, если атрибут не проходит massAssignment - Yii жалуется об этом в лог. Так что логи тоже непременно гляньте.
Dilberd
(Dontsovroman)
November 20, 2013, 1:45pm
16
Я новичок еще,пока даже не знаю где логи хранятся)Валидацию вы имеете ввиду функцию модели rules()? правила?. Большое вам спасибо, в любом случае
Dilberd
(Dontsovroman)
November 20, 2013, 1:50pm
17
нашел что-то…
array('description', 'safe'),
про другие поля не сказано ничего.
Добавил в этот массив другие поля,выдает ошибку.В БД,кстати, тоже было несоответствие, не сохраняющиеся поля были not null…как он их тогда вообще сохранял?
Dilberd:
нашел что-то…
array('description', 'safe'),
про другие поля не сказано ничего.
Да. Фишка в том, что все поля, которые не прописаны в validation rules, не присваиваются через т. н. mass-assignment.
Т. е. вот так в любом случае присвоится: $model->description_en=$_POST[‘Catalog’][‘description_en’];
А вот так - только те, которые прописаны в правилах: $model->attributes = $_POST[‘Catalog’].
То есть, достаточно добавить эти два описания в safe - и всё заработает.
А лучше какие-нибудь реальные правила прописать, например, filter (trim и strip_tags).
Ну и остальные поля тоже проверьте на предмет наличия правил для них.
Засим откланиваюсь и отправляю Вас RTFM. Там есть нюансы.
Dilberd
(Dontsovroman)
November 20, 2013, 1:57pm
19
отредактировал пост свой,пишу еще раз: при редактировании данного массива выдает ошибку.
include(description_en.php): failed to open stream: No such file or directory
Dilberd:
отредактировал пост свой,пишу еще раз: при редактировании данного массива выдает ошибку.
include(description_en.php): failed to open stream: No such file or directory
Вот прямо так и вижу, как Вы в очередной раз невнимательно отнеслись к мануалу и прописали поле не внутрь строки (‘description, description_en’), а проставили лишние кавычки: ‘description’, ‘description_en’, таким образом превратив его в валидатор.
Повнимательнее, пожалуйста. Мануалы писаны не просто так.