Размещение поста на форуме от имени пользователя.

+8
1.62K
Любой кто ведёт свой сайт сталкивался с необходимостью иногда размещать запись не под своим основным аккаунтом, а под другим.
Что бы лишний раз не разлогиниваться и перелогиниваться, добавил возможность админу при написании поста указать от чьего имени он будет опубликован.

Иллюстрация




Перед началом сделайте копии изменяемых файлов.



---templates/_default_/components/forum_add.html

после

<input type="text" name="description" class="text-input" style="width: 350px" value="{$thread.description|escape:html}" />

вставить

  1. {if $is_admin}<input placeholder="user id" name="userid" type="input" value="" />{/if}
---com_forum_view_thread.tpl

после

<textarea id="message" name="message" rows="7"></textarea>

вставить

  1. {if $is_admin}<input placeholder="user id" name="userid" type="input" value="" />{/if}


---/components/forum/fronted.php

Заменить

  1. $post_id = $model->addPost(array(
  2. 'thread_id' => $thread['id'],
  3. 'user_id' => $inUser->id,
  4. 'pinned' => $post_pinned,
  5. 'content' => $message_bb,
  6. 'content_html' => $message_html,
  7. 'pubdate' => date("Y-m-d H:i:s"),
  8. 'editdate' => date("Y-m-d H:i:s")
  9. ));
на

  1. $topic_user_id = cmsCore::request('userid', 'int', '0');
  2. if($topic_user_id&&$inUser->is_admin){
  3. $topic_user = $topic_user_id;
  4. $topic_user_logdate = date("Y-m-d H:i:s");
  5. $inDB->query("UPDATE cms_users SET logdate = '$topic_user_logdate' WHERE id= '$topic_user'");
  6. } else {
  7. $topic_user = $inUser->id;
  8. }
  9.  
  10.  
  11.  
  12. $post_id = $model->addPost(array(
  13. 'thread_id' => $thread['id'],
  14. 'user_id' => $topic_user,
  15. 'pinned' => $post_pinned,
  16. 'content' => $message_bb,
  17. 'content_html' => $message_html,
  18. 'pubdate' => date("Y-m-d H:i:s"),
  19. 'editdate' => date("Y-m-d H:i:s")
  20. ));

В этом же файле ниже

  1. cmsActions::log('add_thread', array(
  2. 'object' => $thread['title'],
  3. 'object_url' => '/forum/thread'.$thread['id'].'-1.html',
  4. 'object_id' => $thread['id'],
  5. 'target' => $forum['title'],
  6. 'target_url' => '/forum/'.$forum['id'],
  7. 'target_id' => $forum['id'],
  8. 'description' => $message_post
  9. ));
Заменить на

  1. cmsActions::log('add_thread', array(
  2. 'object' => $thread['title'],
  3. 'object_url' => '/forum/thread'.$thread['id'].'-1.html',
  4. 'object_id' => $thread['id'],
  5. 'target' => $forum['title'],
  6. 'target_url' => '/forum/'.$forum['id'],
  7. 'target_id' => $forum['id'],
  8. 'description' => $message_post,
  9. 'user_id' => $topic_user
  10.  
  11. ));
И

  1. cmsActions::log('add_fpost', array(
  2. 'object' => $_LANG['MESSAGE'],
  3. 'object_url' => '/forum/thread'.$thread['id'].'-'.$total_pages.'.html#'.$post_id,
  4. 'object_id' => $post_id,
  5. 'target' => $thread['title'],
  6. 'target_url' => '/forum/thread'.$thread['id'].'-1.html',
  7. 'target_id' => $thread['id'],
  8. 'description' => $message_post
  9. ));
заменить на

  1. cmsActions::log('add_fpost', array(
  2. 'object' => $_LANG['MESSAGE'],
  3. 'object_url' => '/forum/thread'.$thread['id'].'-'.$total_pages.'.html#'.$post_id,
  4. 'object_id' => $post_id,
  5. 'target' => $thread['title'],
  6. 'target_url' => '/forum/thread'.$thread['id'].'.html',
  7. 'target_id' => $thread['id'],
  8. 'description' => $message_post,
  9. 'user_id' => $topic_user
  10. ));

По идее, для удобства надо бы сделать выпадающий список пользователей, может быть позже добавлю...
Вроде ничего не забыл, у меня работает, побочных эффектов пока не обнаружил.
0
Реклама Реклама #
+1
Kantona Kantona 4 года назад #
Полезная вещь))) Спасибо! Еще бы оформить в виде компонента, и не менять стандартные файлы!))
+2
Нил™ Нил™ 4 года назад #
Чуть не забыл один момент, при добавлении поста от имени другого пользователя, нужно обновить ему дату последнего визита на сайт, что бы совпадало со временем размещения поста. Исправил в посте, если копировали, посмотрите изменения.
+1
Pasechnik Pasechnik 4 года назад #
Спасибо! Добавить бы возможность отложенной публикации всех этих постов, получилась бы стоящая вещь. Заказывал подобный компонент у буржуев для SMF форума. Позволяет набить постов на несколько месяцев вперед, с фотками, цитатами и видео. Создается иллюзия живого форума. Для комментов такое тоже бы не помешало. Хрен юзеров уже заставишь писать. 99,99% новых форумов мертвы. Комментарии пишут школьники с бирж за руб.

Сделал бы кто на платной основе, от покупателей отбоя бы не было. smile
+1
Нил™ Нил™ 4 года назад #
Для другим компонентов примерно то же самое, отличаются только название некоторых переменных.
Использую подобное на одном сайте в доске объявлений: от имени гостя, от имени какого то пользователя, время будет может оформлю в пост.
По поводу смещения во времени если набивать посты сразу тоже думал, но пока ограничился этим.
Развернутый компонент как вы описали, парсер который предлагает letsgo вроде умеет что то такое, если не ошибаюсь.
Если же делать что то такое как вы описали, я бы пошел по такому пути (пара идей для тех, кто возможно захочет заняться) Ввел бы для постов форума флаг опубликован/не опубликован (заодно можно устроить премодерацию форума). Потом нужную тему набивал бы прямо с сайта, можно не только картинки видео но и цитирование использовать, и уже потом по крону включать посты, в принципе можно в каждом посте указывать время его включения.
Но сам пока не думаю, что буду этим заниматься.
0
Pasechnik Pasechnik 4 года назад #
Развернутый компонент как вы описали, парсер который предлагает letsgo вроде умеет что то такое, если не ошибаюсь.
У letsgo комбайн, узкоспециализированные плюшки лучше.

На SMF у меня публикация через редактор с выбором пользователя и времени публикации, с правами на Админа. Там же выбирается id и название темы куда публиковать, можно задать новую, закрыть тему.
+1
Def Def 4 года назад #
для двойки бы такой вариант, чтобы через реавторизатор не делать)
Используя этот сайт, вы соглашаетесь с тем, что мы используем файлы cookie.