Форум (модуль phpFOX 3)

Форум поддержки движка социальной сети phpFOX.
Аватара пользователя
Slash
Администратор
Сообщения: 2113
Зарегистрирован: Сб авг 11, 2012 7:39 am
Поблагодарили: 71 раз

Форум (модуль phpFOX 3)

Сообщение Slash » Пн мар 21, 2016 8:01 am

Форум - один из модулей phpFOX третей версии, я уже не представляю соцсеть без форума.

Фотографии лайкнувших сообщение в теме форума, отображаются только когда нажмешь на лайк, после перезагрузки страницы фотографий не видно, они спрятаны css свойством display: none. По моему это не правильно. В прежних версиях такого не было, такую ошибку я заметил в 3.8.0, но возможно, что баг появился до этой версии. Покопался и сообразил решение! Открываем файл шаблона: module/feed/template/default/block/comment.html.php, находим:

Код: Выделить всё

<div id="js_feed_like_holder_{$aFeed.type_id}_{$aFeed.item_id}" class="comment_mini_content_holder" {if isset($aFeed.bShowEnterCommentBlock) && $aFeed.bShowEnterCommentBlock == false}style="display:none"{/if} > 
И меняем на:

Код: Выделить всё

<div id="js_feed_like_holder_{$aFeed.type_id}_{$aFeed.item_id}" class="comment_mini_content_holder"{if isset($aFeed.bShowEnterCommentBlock) && $aFeed.bShowEnterCommentBlock == false && !count($aFeed.likes)} style="display: none;"{/if}> 
Чистим кэш. Готово.

После того, как сообщение будет отредактировано, под сообщением будет написано, что данный пост был изменен таким то участником системы, в такое то время. Неважно, кто будет редактировать пост админ или обычный зарегистрированный пользователь. Я думаю, что пользователю не понравится, если он увидит, что его пост отредактировал админ, хотя он просто мог поставить пробел после запятой (многие пробел после запятой пропускают). И я решил не вносить информацию об редактировании поста, если его редактировал админ. Сделал так:
Открываем файл: module/forum/include/service/post/process.class.php, находим:

Код: Выделить всё

        $this->database()->update($this->_sTable, array( 
                'update_time' => PHPFOX_TIME,
                'update_user' => substr(Phpfox::getUserBy('full_name'), 0, 100),
                'total_attachment' => Phpfox::isModule('attachment') ? Phpfox::getService('attachment')->getCountForItem($iId, 'forum') : 0,
            ), 'post_id = ' . (int) $iId
        ); 
И меняем на:

Код: Выделить всё

        if (Phpfox::isAdmin())
        {
            $this->database()->update($this->_sTable, array(
                    'total_attachment' => Phpfox::isModule('attachment') ? Phpfox::getService('attachment')->getCountForItem($iId, 'forum') : 0
                ), 'post_id = ' . (int) $iId
            );            
        }
        else
        {            
            $this->database()->update($this->_sTable, array(
                    'update_time'      => PHPFOX_TIME,
                    'update_user'      => substr(Phpfox::getUserBy('full_name'), 0, 100),
                    'total_attachment' => Phpfox::isModule('attachment') ? Phpfox::getService('attachment')->getCountForItem($iId, 'forum') : 0
                ), 'post_id = ' . (int) $iId
            );
        } 
Дальше открываем файл: module/forum/include/service/thread/process.class.php, находим:

Код: Выделить всё

        $this->database()->update(Phpfox::getT('forum_post'), array(
                'total_attachment' => (Phpfox::isModule('attachment') ? Phpfox::getService('attachment')->getCountForItem($aVals['post_id'], 'forum') : 0),
                'title' => $oParseInput->clean($aVals['title'], 255),
                'update_time' => PHPFOX_TIME,
                'update_user' => substr(Phpfox::getUserBy('full_name'), 0, 100)
            ), 'post_id = ' . (int) $aVals['post_id']
        ); 
Меняем на:

Код: Выделить всё

        if (Phpfox::isAdmin())
        {
            $this->database()->update(Phpfox::getT('forum_post'), array(
                    'total_attachment' => (Phpfox::isModule('attachment') ? Phpfox::getService('attachment')->getCountForItem($aVals['post_id'], 'forum') : 0),
                    'title'            => $oParseInput->clean($aVals['title'], 255),
                ), 'post_id = ' . (int) $aVals['post_id']
            );
        }
        else
        {
            $this->database()->update(Phpfox::getT('forum_post'), array(
                    'total_attachment' => (Phpfox::isModule('attachment') ? Phpfox::getService('attachment')->getCountForItem($aVals['post_id'], 'forum') : 0),
                    'title'            => $oParseInput->clean($aVals['title'], 255),
                    'update_time'      => PHPFOX_TIME,
                    'update_user'      => substr(Phpfox::getUserBy('full_name'), 0, 100)
                ), 'post_id = ' . (int) $aVals['post_id']
            );            
        } 
Готово, теперь информация о изменениях сообщениях будет в том случаи, если пост отредактировал простой участник.

Читайте ещё:
Локальные URL в названия тем форума (Форум phpFoX)

Реклама
Аватара пользователя
Slash
Администратор
Сообщения: 2113
Зарегистрирован: Сб авг 11, 2012 7:39 am
Поблагодарили: 71 раз

Re: Форум (модуль phpFOX 3)

Сообщение Slash » Пт апр 22, 2016 7:45 am

При цитировании сообщения, после тега [quote=xxx] текст сообщения переносится на новую строку, так же переносится на новую строку закрывающий тег [/quote]. Мне показалось это не красиво, так как в блоке цитаты получается много свободного места, и убираю эти переносы на новые строки.

Делаем так: Открываем: module/forum/include/service/post/post.class.php, находим:

Код: Выделить всё

            $sQuotes .= "[quote={$aPost['user_id']}]\n" . Phpfox::getLib('parse.bbcode')->stripCode($aPost['text'], array('quote', 'attachment')) . "\n[/quote]\n\n\n";
Меняем на:

Код: Выделить всё

            $sQuotes .= "[quote={$aPost['user_id']}]" . Phpfox::getLib('parse.bbcode')->stripCode($aPost['text'], array('quote', 'attachment')) . "[/quote]\n\n"; 

Аватара пользователя
Slash
Администратор
Сообщения: 2113
Зарегистрирован: Сб авг 11, 2012 7:39 am
Поблагодарили: 71 раз

Re: Форум (модуль phpFOX 3)

Сообщение Slash » Пт май 06, 2016 12:56 pm

Форум по адресу: site/index.php?do=/forum/ или site/forum/ (в зависимости от настроек сайта), мне показалось, что между двумя блоками слишком маленький отступ (левая сторона):
Форум модуль phpFOX 3  - Форум.jpg
Чтобы сделать отступ, как с правой стороны, пока решил сделать так:
Открываю: module/forum/template/default/controller/index.html.php, нахожу:

Код: Выделить всё

{template file='forum.block.entry'}
Меняю на:

Код: Выделить всё

{if Phpfox::isUser()}
<div style="margin-right: 10px;">
    {template file='forum.block.entry'}
</div>
{else}
{template file='forum.block.entry'}
{/if} 
После очищаю кэш и вот результат:
Форум модуль phpFOX 3  - Форум.jpg

Аватара пользователя
Slash
Администратор
Сообщения: 2113
Зарегистрирован: Сб авг 11, 2012 7:39 am
Поблагодарили: 71 раз

Re: Форум (модуль phpFOX 3)

Сообщение Slash » Сб май 07, 2016 10:39 pm

В мобильной версии сайта можно получить 502 ошибку. Как её получить: создаём страницу (сайт/pages/add/), изменяем её URL, то есть в место сайт/pages/ID/ будет, например: сайт/namepage/. Дальше переходим в мобильный стиль сайта, заходим на страницу, и переходим на форум страницы: (сайт/mobile/namepage/forum/). Вместо списка тем, вылетит 502 ошибка.

Покопавшись, решил проблему так:
Открываю: module/forum/include/component/controller/forum.class.php, нахожу:

Код: Выделить всё

        if (Phpfox::isMobile() && Phpfox::getLib('module')->getFullControllerName() == 'forum.forum' && !$this->request()->getInt('req2') && !in_array($this->request()->get('view'), array('subscribed','new','my-thread')))
        {
            return Phpfox::getLib('module')->setController('forum.index');
        }
И удаляю эти строки. Готово.

Добавлено в ошибки разработчиков: Re: Ошибки разработчиков (баги движка phpFOX) (Пост Slash #6753)

Аватара пользователя
Slash
Администратор
Сообщения: 2113
Зарегистрирован: Сб авг 11, 2012 7:39 am
Поблагодарили: 71 раз

Re: Форум (модуль phpFOX 3)

Сообщение Slash » Пн янв 30, 2017 7:10 am

Запрет редактировать сообщение если оно не последнее в теме
Изначально, если у пользователей есть право редактировать свои сообщения, то они могут редактировать любой пост (свой) в теме, не важно первый он по счету или, где то в середине темы. Я подумал, что кому то может ударить в голову отредактировать свои посты, которые находятся в середине. Отредактировав пару постов топика, можно изменить суть всей теме... Я считаю, что это не правильно и ограничил пользователей на редактирование своих постов, теперь они могут редактировать сообщение, только в том случае, если сообщение последнее в теме.

Делал так: открываю: module/core/include/plugin/core.template_block_comment_border_new.php, нахожу:

Код: Выделить всё

		echo '<li><a href="#" onclick="$Core.box(\'forum.reply\', 800, \'id=' . $aPost['thread_id'] . '&amp;edit=' . $aPost['post_id'] . '\'); return false;">' . Phpfox::getPhrase('forum.edit') . '</a></li>';
		echo '<li>&middot;</li>';
Меняю на:

Код: Выделить всё

		if (Phpfox::isAdmin() || $iTotalPosts == $aPost['count'])
		{
			echo '<li><a href="#" onclick="$Core.box(\'forum.reply\', 800, \'id=' . $aPost['thread_id'] . '&amp;edit=' . $aPost['post_id'] . '\'); return false;">' . Phpfox::getPhrase('forum.edit') . '</a></li>';
			echo '<li>&middot;</li>';
		}
Готово. Изменения вступят в силу, только после очистки кеша.

Аватара пользователя
Slash
Администратор
Сообщения: 2113
Зарегистрирован: Сб авг 11, 2012 7:39 am
Поблагодарили: 71 раз

Re: Форум (модуль phpFOX 3)

Сообщение Slash » Чт фев 02, 2017 11:32 am

Если с форума, который находится на какой нибудь странице (модуль pages) удалить тему или один пост, то информация об посте останется в таблице pages_feed и будет висеть там, как мусор. При избытке такого мусора, некоторые каналы могут не отображаться. Я столкнулся с такой проблемой, пришлось написать инструмент для удаления мусора с таблицы. А чтобы мусор не скапливался, вот что сделал:
Открываю: module/forum/include/service/thread/process.class.php, нахожу:

Код: Выделить всё

		if ($aThread['group_id'] == '0')
		{
			foreach (Phpfox::getService('forum')->id($aThread['forum_id'])->getParents() as $iForumId)
			{
				Phpfox::getService('forum.process')->updateCounter($iForumId, 'total_thread', true);
				Phpfox::getService('forum.process')->updateCounter($iForumId, 'total_post', true, $iTotal);
			}		
		}
Ниже добавляю:

Код: Выделить всё

		else
		{
			# Удаление записи из таблицы "pages_feed"
			$this->database()->delete(Phpfox::getT('pages_feed'), 'type_id = \'forum\' AND item_id = ' . (int) $aThread['thread_id']);

			foreach ($aPosts as $aPost)
			{
				$this->database()->delete(Phpfox::getT('pages_feed'), 'type_id = \'forum_post\' AND item_id = ' . (int) $aPost['post_id']);
			}
			# Удаление записи из таблицы "pages_feed" END
		}
Дальше открываю: module/forum/include/service/post/process.class.php, нахожу:

Код: Выделить всё

		if ($aPost['forum_id'] > 0)
		{
			foreach (Phpfox::getService('forum')->id($aPost['forum_id'])->getParents() as $iForumid)
			{
				Phpfox::getService('forum.process')->updateCounter($iForumid, 'total_post', true);
				Phpfox::getService('forum.process')->updateLastPost($iForumid, $aPost['thread_id']);
			}
		}
Ниже вставляю:

Код: Выделить всё

		else
		{
			# Удаление записи из таблицы "pages_feed"
			if ($iPostCount > 0)
			{
				$this->database()->delete(Phpfox::getT('pages_feed'), 'type_id = \'forum_post\' AND item_id = ' . (int) $aPost['post_id']);
			}
			else
			{
				$this->database()->delete(Phpfox::getT('pages_feed'), 'type_id = \'forum\' AND item_id = ' . (int) $aPost['thread_id']);
			}
			# Удаление записи из таблицы "pages_feed" END
		}
Готово.

Аватара пользователя
Slash
Администратор
Сообщения: 2113
Зарегистрирован: Сб авг 11, 2012 7:39 am
Поблагодарили: 71 раз

Re: Форум (модуль phpFOX 3)

Сообщение Slash » Пн фев 06, 2017 8:43 am

Даже если отключить канал новостей форума, над списком тем все ровно будет находиться значок RSS.
Я исправил так: открываю: forum.html.php, нахожу:

Код: Выделить всё

		<li class="sub_menu_bar_li">
			<a href="{if $aCallback === null}{url link='forum.rss' forum=$aForumData.forum_id}{else}{url link='forum.rss' pages=$aCallback.item_id}{/if}" title="{phrase var='forum.subscribe_to_this_forum'}" class="no_ajax_link">
				{img theme='rss/tiny.png' class='v_middle'}
			</a>
		</li>
Меняю на:

Код: Выделить всё

		{if Phpfox::getParam('forum.rss_feed_on_each_forum') && Phpfox::isModule('rss')}
		<li class="sub_menu_bar_li">
			<a href="{if $aCallback === null}{url link='forum.rss' forum=$aForumData.forum_id}{else}{url link='forum.rss' pages=$aCallback.item_id}{/if}" title="{phrase var='forum.subscribe_to_this_forum'}" class="no_ajax_link">
				{img theme='rss/tiny.png' class='v_middle'}
			</a>
		</li>
		{/if}
Чищу кеш. Готово, теперь при отключении RSS форума, значок исчезает.

Аватара пользователя
Slash
Администратор
Сообщения: 2113
Зарегистрирован: Сб авг 11, 2012 7:39 am
Поблагодарили: 71 раз

Re: Форум (модуль phpFOX 3)

Сообщение Slash » Чт фев 09, 2017 8:08 pm

Поправил правки из этого поста: Re: Форум (модуль phpFOX 3) (Пост Slash #8002), теперь эти правки не нужны. Мое условие теперь выглядит так:

Код: Выделить всё

	if ((Phpfox::getUserParam('forum.can_edit_own_post') && $post['user_id'] == Phpfox::getUserId() && $total == $post['count'] && Phpfox::getLib('common')->inspectionTime($post['time_stamp'])) || Phpfox::getUserParam('forum.can_edit_other_posts') || Phpfox::getService('forum.moderate')->hasAccess($post['forum_id'], 'edit_post'))
	{
		echo '<li><a href="#" onclick="$Core.box(\'forum.reply\', 800, \'id=' . $post['thread_id'] . '&amp;edit=' . $post['post_id'] . '\'); return false;">' . Phpfox::getPhrase('forum.edit') . '</a></li>';
		echo '<li>&nbsp;</li>';
	}
Phpfox::isAdmin() - не нужно.

Добавил еще одно ограничение на редактирование. Теперь редактировать можно только если ваше сообщение последнее и с момента написание поста не прошло еще пять минут. Для этого написал отдельную функцию Phpfox::getLib('common')->inspectionTime($post['time_stamp']).

Ответить Пред. темаСлед. тема

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 1 гость