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

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

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




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



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

после

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

вставить

Код PHP:
  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>

вставить

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


---/components/forum/fronted.php

Заменить

Код 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. ));
на

Код PHP:
  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. ));

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

Код PHP:
  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. ));
Заменить на

Код PHP:
  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. ));
И

Код PHP:
  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. ));
заменить на

Код PHP:
  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. ));

По идее, для удобства надо бы сделать выпадающий список пользователей, может быть позже добавлю...
Вроде ничего не забыл, у меня работает, побочных эффектов пока не обнаружил.
Счетчик посещений для раздела Мои гости | Превью изображений из блогов для модуля "Блог" и плагина "Похожие посты".
Комментарии (6)
Kantona 8 апреля 2017 в 19:03 +1
Полезная вещь))) Спасибо! Еще бы оформить в виде компонента, и не менять стандартные файлы!))
Нил™ 8 апреля 2017 в 19:10 +2
Чуть не забыл один момент, при добавлении поста от имени другого пользователя, нужно обновить ему дату последнего визита на сайт, что бы совпадало со временем размещения поста. Исправил в посте, если копировали, посмотрите изменения.
Pasechnik 8 апреля 2017 в 19:57 +1
Спасибо! Добавить бы возможность отложенной публикации всех этих постов, получилась бы стоящая вещь. Заказывал подобный компонент у буржуев для SMF форума. Позволяет набить постов на несколько месяцев вперед, с фотками, цитатами и видео. Создается иллюзия живого форума. Для комментов такое тоже бы не помешало. Хрен юзеров уже заставишь писать. 99,99% новых форумов мертвы. Комментарии пишут школьники с бирж за руб.

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

На SMF у меня публикация через редактор с выбором пользователя и времени публикации, с правами на Админа. Там же выбирается id и название темы куда публиковать, можно задать новую, закрыть тему.
Def 8 апреля 2017 в 21:54 +1
для двойки бы такой вариант, чтобы через реавторизатор не делать)