Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757
Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737 Форумы портала PHP.SU :: Решение нестандартных задач на Symfony
Покинул форум
Сообщений всего: 305
Дата рег-ции: Янв. 2012
Помог: 1 раз(а)
Всем привет. Давеча я создавал тему, в которой жаловался на этот фреймворк. В частности, на способность решения нестандартных задач. и пользователь digi обещал помочь в решение этих самых задач. Так вот собственно задача возникла. Нужно создать админ-интерфейс для управления комментариями оставленными на сайте.
Вот код админ класса генерированный командой sonata:admin:generate:
Обратите внимание, на строки 47 и 50 (->add('commentAuthor')...->add('author')). Там уже мой костыль небольшой, не обращайте внимание. Так собственно в чем загвоздка, комменты на сайте могут поступать как от зареганых пользователей так и просто от тех кто ввел свое имя и капчу. В entity inСomments есть такие методы:
getAuthor() - возвращает объект VbUser, а getAuthorGuestName() - имя гостя. Задач состоит в том, что бы в списке комментов админки был один столбец Автор, а в него выводилось либо имя гостя либо getAuthor()->getUsername(); Причем username должен быть обернут в ссылку, которая ведет на страницу редактирования этого пользователя. Ссылку SonataAdminBundle делает как-то автоматически в поле ->add('author'). Автоматически делает имя пользователя ссылкой на страницу с редактированием этого пользователя, которая уже до этого давно была сделана. Т.е. в таком виде класса InCommentsAdmin в списке комментов у меня 2 столбца, один ->add('commentAuthor') - в котором просто стоит имя автора коммента, а в столбце ->add('author') стоят имена зареганных юзеров, только для тех комментов, которы оставлены от зареганых юзеров, в остальных случаях строка просто пустая.
Буду с нетерпение ждать вашего решение (Добавление)
Что бы было понятнее вот скрин, нужно объеденить 2 первых столбца в один. (Добавление) P.S.
Кстати говоря. Задачку уже решили, правда на её решение у моего более опытного и сообразительного начальника ушло 2 часа времени, не смотря на то, что он работает в этой симфони с июля месяца. На обычном php с обычной библиотекой db_simple я бы решил её за 20 мин.
Покинул форум
Сообщений всего: 5998
Дата рег-ции: Сент. 2011 Откуда: Харьков
Помог: 126 раз(а)
вот и продолжал бы тему. Форум настолько оормозит что лишний раз переключася нет желания
По теме - то что в продвинутых фреймворках - шаг влево шаг вправо и начинаются проблемы это и так понятно даже без примера на симфони.
Покинул форум
Сообщений всего: 406
Дата рег-ции: Янв. 2012
Помог: 4 раз(а)
Видимо в сущности комента надо сделать геттер который будет выводить либо автора, либо юзера, а в шаблончике если юзер выводить ссылку на него.
ЗЫ: с сонатой не работаю
nkl
Отправлено: 04 Марта, 2015 - 11:35:00
Посетитель
Покинул форум
Сообщений всего: 305
Дата рег-ции: Янв. 2012
Помог: 1 раз(а)
digi пишет:
Видимо в сущности комента надо сделать геттер который будет выводить либо автора, либо юзера, а в шаблончике если юзер выводить ссылку на него.
ЗЫ: с сонатой не работаю
Хм. Интересное решение, но мы сделали немножко по другому. Для этого поля делаем свой template, а в качестве шаблона используем заготовку для бандла, которая определяет, нужно сделать ссылку на редактирования пользователя или нет. Там просто проверяем if object.authorGuestName is not empty:
{% if field_description.hasAssociationAdmin and field_description.associationadmin.hasRoute('edit') and field_description.associationadmin.isGranted('EDIT', value) %}
а в случае else используется вывод этого поля как это стандартно организовано в \vendor\sonata-project\admin-bundle\doctrine-orm-admin-bundle\Resources\views\CRUD\list_orm_one_to_many.html.twig
Все гости форума могут просматривать этот раздел. Только зарегистрированные пользователи могут создавать новые темы в этом разделе. Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.