Работа с контентом из кода

ЕСТЬ РЕШЕНИЕ ЗАКРЫТО
#1 27 февраля 2015 в 17:08
Есть необходимость добавлять, редактировать и удалять контент (создан собственный тип контента) прямо из кода, т.е. страница получает данные из POST и создаёт/редактирует контент. Куда рыть, где смотреть… Понятно, что нужен addContentItem видимо, но хотелось бы примеры посмотреть. Спасибо!
#2 28 февраля 2015 в 00:31


Есть необходимость добавлять, редактировать и удалять контент (создан собственный тип контента) прямо из кода, т.е. страница получает данные из POST и создаёт/редактирует контент. Куда рыть, где смотреть… Понятно, что нужен addContentItem видимо, но хотелось бы примеры посмотреть. Спасибо!

Antuanett
Никто не поможет?
Тогда конкретизирую: function addContentItem($ctype, $item, $fields) — можно поподробней о входных параметрах?
#3 28 февраля 2015 в 00:59
тут в двух словах нереально. Вы посмотрите код, как формируется массив $item в экшне добавления контента.

И эта функция вам вряд ли подойдет для автонаполнения. Она требует id юзера. Лучше напрямую писать в базу через инсерт. В таблицах контента из обязательных полей вроде только title.

а о $ctype и $fields смотрите в model.php, что в папке core.
#4 28 февраля 2015 в 01:11


тут в двух словах нереально. Вы посмотрите код, как формируется массив $item в экшне добавления контента.

И эта функция вам вряд ли подойдет для автонаполнения. Она требует id юзера. Лучше напрямую писать в базу через инсерт. В таблицах контента из обязательных полей вроде только title.

а о $ctype и $fields смотрите в model.php, что в папке core.

Zau4man
Спасибо за советы! Сижу, копаюсь в исходниках… Кстати в моём случае ID юзера будет поступать в POSTе, так что планирую обойтись без записи в обход модели.
Просто не совсем понимаю, зачем мне нужны $fields...$ctype и $item вполне достаточно для формирования новой записи контента.
#5 28 февраля 2015 в 15:26

$fields

Antuanett
получается из

$ctype

Antuanett
с помощью одного простенького метода в model. Я не стал заморачиваться, зачем они :)
#6 28 февраля 2015 в 15:30


$fields

Antuanett
получается из

$ctype

Antuanett
с помощью одного простенького метода в model. Я не стал заморачиваться, зачем они :)

Zau4man

Насколько я понимаю $fields нужен для заполнения формы… мне это как бы и не нужно.
Делаю getContentItem, получаю в $item уже имеющуюся запись и пытаюсь её же и записать с помощью addContentItem.

Не пишет. Меняю id в $item, другие поля дергаю — не хочет писать. Может из разрабов кто поможет?
#7 1 марта 2015 в 06:11
Antuanett, Если вам нужно просто заполнить таблицу cms_con_КОНТЕНТ, покажите свой код, то что уже имеется, то есть какие переменные получаете через POST?
#8 1 марта 2015 в 12:33


Antuanett, Если вам нужно просто заполнить таблицу cms_con_КОНТЕНТ, покажите свой код, то что уже имеется, то есть какие переменные получаете через POST?

Evanescence
Приветствую! Спасибо, что зашли!
В POSTе получаю ряд переменных, под них есть поля в созданном мною типе контента. Вопрос что должно быть передано addContentItem($ctype, $item, $fields)? $ctype знаю, по нему получаю $fields = $content_model->getContentFields($ctype['name']), в $item передаю свои переменные, которые нужно записать, но ничего не происходит...
  1.  
  2. $content_model = cmsCore::getModel('content');
  3. $ctype = $content_model->getContentTypeByName('battle');
  4. $content_model->orderBy('ordering');
  5. $fields = $content_model->getContentFields($ctype['name']);
  6. $item=Array
  7. (
  8. 'title'=>'АвтоБой из POST',
  9. 'user'=>$askinguser,
  10. 'user'=>$askinguser['id'],
  11. 'content'=>'Мой контент',
  12. 'team1'=>'123123213,123123213,123123213',
  13. 'team2'=>'5678567567,567567567567,567567567',
  14. );
  15. unset($item['ctype_name']);
  16. unset($item['ctype_id']);
  17. $item['is_approved'] = !$ctype['is_premod_add'] || $is_moderator;
  18. $item['parent_type'] = null;
  19. $item['id'] = 55;
  20. $item['parent_title'] = null;
  21. $item['parent_url'] = null;
  22. $item['is_parent_hidden'] = null;
  23. $item['date_pub'] = strtotime(date('Y-m-d', time()));
  24. $item['date_pub_end'] = false;
  25. $item = cmsEventsManager::hook("content_before_add", $item);
  26. $item = cmsEventsManager::hook("content_{$ctype['name']}_before_add", $item);
  27. $item = $content_model->addContentItem($ctype, $item, $fields);
  28.  
#9 1 марта 2015 в 12:57
Antuanett, сделайте
  1. unset($item['id']);
, при в ставке в базу ИД записи само присвоится,
Эти данные
  1. $item['parent_type'] = null;
  2. $item['parent_title'] = null;
  3. $item['parent_url'] = null;
  4. $item['is_parent_hidden'] = null;
  5. $item['date_pub'] = strtotime(date('Y-m-d', time()));
  6. $item['date_pub_end'] = false;
проставятся автоматически. А вот почему у вас нет $item['user_id'], но почему-то аж два раза
  1. 'user'=>$askinguser,
  2. 'user'=>$askinguser['id'],
— непонятно. Видимо второе надо исправить на user_id. Без него запись если и пропишется в БД, то не выведется для просмотра.
#10 1 марта 2015 в 13:24


Antuanett, сделайте

  1. unset($item['id']);
, при в ставке в базу ИД записи само присвоится,
Эти данные
  1. $item['parent_type'] = null;
  2. $item['parent_title'] = null;
  3. $item['parent_url'] = null;
  4. $item['is_parent_hidden'] = null;
  5. $item['date_pub'] = strtotime(date('Y-m-d', time()));
  6. $item['date_pub_end'] = false;
проставятся автоматически. А вот почему у вас нет $item['user_id'], но почему-то аж два раза
  1. 'user'=>$askinguser,
  2. 'user'=>$askinguser['id'],
— непонятно. Видимо второе надо исправить на user_id. Без него запись если и пропишется в БД, то не выведется для просмотра.

Loadырь

ТОЧНО! Спасибо большое, запутался в юзере и его ид. Исправил, запись в базе создалась, но с пустым slug и is_aproved, соответственно в листинге на сайте записи не видно. Добавил в БД slug и is_aproved вручную — запись в листинге появилась, но саму запись детально посмотреть не могу — 404.
Видимо проблема в slug?
#11 1 марта 2015 в 13:38

Видимо проблема в slug?

Antuanett
А вы как его вручную добавляли? В типах контента есть некий шаблон для slug согласно которого и должен выглядеть url записи. Для этого при добавлении записи в БД сразу идёт её обновление с добавлением slug полученное специальной
#12 1 марта 2015 в 13:46
Что-то отправилось раньше чем дописал. Специальной функцией getItemSlug($ctype, $item, $fields);
#13 1 марта 2015 в 14:36
Разобрался. slug передавать не надо — делается автоматом. Еще был затык, запись создается только если авторизован на сайте, пришлось делать хак content/model.php:
  1.  
  2. if(!$item['user_id'])
  3. {
  4. $user = cmsUser::getInstance();
  5. $item['user_id'] = $user->id;
  6. }
#14 1 марта 2015 в 20:09
Спасибо ответившим. Эту задачу решил. Впереди другие… cry
Используя этот сайт, вы соглашаетесь с тем, что мы используем файлы cookie.