Знаю, что все любят посылать в поиск, но уже устал искать иголку в стогу сена.
Стоит задача «Разработка сервиса публикации пользовательских материалов».
Суть задачи:
«Пользователь должен иметь возможность заполнить форму в своём личном кабинете, указав категорию и описание своего материала, прикрепив, если необходимо, изображения или видеоматериалы.
Необходимо разработать инструментарий модератора для просмотра, редактирования и удаления нежелательных пользовательских материалов и сообщений. Информация о новом, отправленном пользователем портала, материале, отзыве, комментарии должна отправляться редактору портала. Публикация данного материала должна быть доступна для чтения пользователям портала только после одобрения редактором портала.»
Сложность для меня в том, что сделать это надо именно в личном кабинете, а не в админке!
Пытался искать что-то готовое – не нашел... потом прочитал кучу статей и книжку почитал, в итоге попытался написать свой модуль.
Но всё равно не хватает еще мозгов своих реализовать это. Модуль получился невнятный, надерганный кусками кода из статей и книжки.
А ведь сроки, как всегда, жмут.
И вот убежден, что изобретаю велосипед, и что существует модуль, позволяющий делать это. Может кто знает его?
Ну или на крайний случай, несколько раз натыкался на информацию, что «во всех книжках описана куча примеров как это сделать» – может ссылку дадите на эти статьи или книжки?
UPD
Решил задачу таким способом:
- Поставил и включил модуль Administration menu (http://drupal.org/project/admin_menu);
- Отключил тему админки;
- Теперь управление содержимым доступно в оформлении основной темы, а следовательно и добавление материала легко реализуется обычной ссылкой из личного кабинета. Никаких модулей, хуков – всё средствами из коробки теперь сделаю.
Всем кто откликнулся – спасибо за помощь!
Комментарии
готового решения нет.
А просто ссылка или кнопка на создание материала, расположенная на странице "личный кабинет" и открывающая в оверлее форму добавления материала заказчика не устроит? После создания и сохранения материала пользователь снова окажется на странице своего кабинета. Вроде как не противоречит ТЗ "«Пользователь должен иметь возможность заполнить форму в своём личном кабинете....".
Очень хорошая идея. Понять бы еще, как это сделать. Пока что моих навыков не достаточно, чтобы с ходу это сделать.
Если не сложно, подскажите как начать? А пока что снова в гугл полез.
UPD. Как я понял, есть модуль Overlay в ядре 7-ки. У меня Drupal 6. На нём такое возможно?
гуглите на тему вывода модальных окон через колорбокс
В чем сложности?
Пользователь регается, создает ноду, она не публикуется.
Админ просматривает ноды и публикует.
Все довольны, все смеются.
Вы описали понятный мне алгоритм. Именно это я и хочу сделать.
Сложность в реализации. Не щелкнуло еще в мозгу – как это реализовать средствами Друпала.
Возможно ли это сделать средствами Views + CCK? Сделать форму добавления ноды в админке – без проблем, разобрался, а вот в личном кабинете как выводить такую форму – не понимаю (гугл меня ведёт в сторону API форм). Всё таки верной дорогой иду, что пытаюсь это сделать в собственном модуле или таки есть решение средствами Views / CCK?
Топчусь на одном месте, не хватает какого-то «пинка» в понимании кухни Друпала.
Правильно ли я понимаю, что надо из своего модуля создать закладку в личном кабинете, разместить там форму и потом, после валидации использовать hook_nodeapi(&$node, $op, $a3 = NULL, $a4 = NULL) или hook_node_type($op, $info)?
Зачем свой модуль?
Создайте тип материала "публикация" и дайте права на ее создание зарегистрированным пользователям.
Задача, чтобы зарегистрированный пользователь мог создавать публикацию из личного кабинета. Как вывести форму из админки в личный кабинет?
drupal_get_form()
Этой функции возможно передать параметр, идентифицирующий тип ноды?
Допустим в админке у меня есть тип материала Галерея. Значит от этого типа ноды надо взять какой-то идентификатор, передать функции drupal_get_form() и при выводе в личном кабинете получу те же поля, что и в админке при выборе "Создать материал" -> "Галерея"? Правильно понимаю? Или всё таки такое не возможно?
api не пробовали читать?
Господи, добавьте ссылку на страницу создания ноды: /node/add/type
Вот и будет вам форма.
Пробовал. И дальше продолжаю знакомиться.
Это уже будет переход на админ-панель. А по ТЗ это категорически запрещено – в этом и весь гемор.
Пользователь должен находиться в своём личном кабинете.
Что вы имеете в виду под личным кабинетом?
На портале отделены друг от друга личный кабинет пользователя и админ-панель.
Админ-панель – отдельный вход, своё оформление.
Личный кабинет (my account, расположенный на странице /user) – встроен в оформление сайта, и с админкой никак не перекликается. Т.е. зарегистрированный пользователь никак админку не видит и вход в неё для него не доступен.
Надеюсь доступно передал )
В этом и сложность, что форма создания ноды выносится за пределы админки. Стандартными методами, сделать в админке форму добавления ноды – это делов на 10 минут от силы. А вот вынести форму за пределы – вот тут и затупил я.
Добавьте блок, формат ему php, укажите на какой странице и внутрь него следующий код:
<?php
$file = DRUPAL_ROOT . '/' . drupal_get_path('module', 'node') . "/node.pages.inc";
require_once $file;
print render(node_add('article'));
?>
Это для типа ноды article накидал
Спасибо, дельный совет.
Пытаюсь сделать, но как всегда – в самых неожиданных местах начинаются глюки.![Sad](https://drupal.ru/sites/all/modules/contrib/smiley/packs/kolobok/sad.gif)
Создал регион, прописал его в шаблоне page.tpl. В админке создал блок с форматом php, вставил его в свой регион.
В настройках блока указал права (поставил галочку для авторизованных пользователей), выбрал «Показывать только на перечисленных страницах» и ввёл user.
Пытаюсь для проверки в регион вывести
<?php
print "test-test-test";
?>
Ничего не выводит
А если указывать страницу user/*, то вообще страница личного кабинета не открывается и вываливается ошибка:
Fatal error: Cannot redeclare declofnum() (previously declared in ...\www\sites\all\themes\portal\block-docs.tpl.php:3) in ...\www\sites\all\themes\portal\block-docs.tpl.php on line 6
Не понос, так золотуха. Скоро корвалол начну пить с этим Друпалом...
а вы зачем функции в шаблонах объявляете? тем более повторно
лучше друпалу накапайте корвалола, он с вами намучается
Не объявлял я там функции...
1. В portal.info добавил регион regions[materials_add] = Регион для блока добавления пользовательских материалов
2. Добавил в шаблоне page.tpl:
<?php
print $materials_add;
?>
3. Включил свой блок в свой регион.
4. В настройках своего блока формат ввода сменил с PHP на Full HTML. Ввёл в окне просто слово TEST. Выбираю показ только на определенных страницах (пока что только user).
Ничего не выводит, в том числе и ошибки нету. Ошибка появляется, если пытаюсь по другому прописать страницу, для вывода блока, например – user/*.
Где в этих пунктах повторное объявление функций? )
напишите строку 6 из этого шаблона
<?php
function declOfNum($number, $titles) {
$cases = array(2, 0, 1, 1, 1, 2);
return $number . " " . $titles[($number % 100 > 4 && $number % 100 < 20) ? 2 : $cases[min($number % 10, 5)]];
}
?>
Получается, что строчка 6 – это закрывающая фигурная скобка.
Вот только не понимаю, причем тут этот block-docs.tpl.php...
получается что вы все таки объявляете функции в шаблонах
Это наследство от предшественников, видимо. Чужой портал – потёмки.
Странно, но до этого ошибка нигде не выскакивала и никак себя не проявляла...
Интересно, каким образом это связано с созданием моего блока?
натемизовано там походу наславу...
Перенеси эту ф-цию в template.php
это как в анекдоте про наркоманов. у тебя руль - ты и рули)
вот и выясните почему она выскакивает
Закомментировал временно функцию из block-docs.tpl.php
Теперь при заходе в личный кабинет новая ошибка:
Решил задачу таким способом:
1. Поставил и включил модуль Administration menu (http://drupal.org/project/admin_menu);
2. Отключил тему админки;
3. Теперь управление содержимым доступно в оформлении основной темы, а следовательно и добавление материала легко реализуется обычной ссылкой из личного кабинета. Никаких модулей, хуков – всё средствами из коробки теперь сделаю.
Всем кто откликнулся – спасибо за помощь!
связь то какая между меню и то что вы хотели?
Отключив тему админки, у меня пропала навигация.
Модулем я вернул навигацию, к тому же удобным образом расположенную.
В рамках моего проекта – отличное решение.
Возможно, что на базовых темах Друпала такого танца с бубном не понадобилось бы.
Мне же приходится работать с «левым» шаблоном, видимо это его грех.
Можно было бы вставить регион и там разместить основную навигацию (изначально я так и пытался), но решение с модулем мне понравилось гораздо больше.
Не самый удачный проект мне достался для «втыкания» в Друпал )