Kunena избавимся от лишних quote
Для тех кто действительно делает сайт для людей, моя следующая заметка. Расскажу вам, как избавиться от лишних quote в постах на форуме kunena. У меня несколько тематических сайтов с нормальной посещаемостью и часто приходится встречаться в реале, в разговорах всплывает проблема излишнего цитирования постов, которое затрудняет освоение информации.
Сейчас мы вскроем форум kunena послндней версии на сегоднешний день и поставим отлов с дальнейшей обработкой тегов цитирвоания при добавлении новых постов на форум.
/domains/mirnahlysta.ru/components/com_kunena/controllers/topic.php
$fields = array (
'catid' => $this->catid,
'name' => JRequest::getString ( 'authorname', $this->me->getName () ),
'email' => JRequest::getString ( 'email', null ),
'subject' => JRequest::getVar ( 'subject', null, 'POST', 'string', JREQUEST_ALLOWRAW ),
'message' => JRequest::getVar ( 'message', null, 'POST', 'string', JREQUEST_ALLOWRAW ),
'icon_id' => JRequest::getInt ( 'topic_emoticon', null ),
'anonymous' => JRequest::getInt ( 'anonymous', 0 ),
'poll_title' => JRequest::getString ( 'poll_title', '' ),
'poll_options' => JRequest::getVar('polloptionsID', array (), 'post', 'array'),
'poll_time_to_live' => JRequest::getString ( 'poll_time_to_live', 0 ),
'tags' => JRequest::getString ( 'tags', null ),
'mytags' => JRequest::getString ( 'mytags', null ),
'subscribe' => JRequest::getInt ( 'subscribeMe', 0 )
);
Добавим обработку полученного содержания нового поста отдельно и присвоим его переменной $message.
$message=JRequest::getVar ( 'message', null, 'POST', 'string', JREQUEST_ALLOWRAW );
в масиве указывем 'message' => $message,
Теперь мы можем обрабатывать полученный текст, добавим пару регулярок, регулярки могут быть разные, я взял уже готовую из предыдущей версии пропаченной kunenы
$quote = preg_replace('/\[quote\].*\[\/quote\]/is', '', $message);
$quote = preg_replace('/\[b\].*\[\/b\]/is', '', $quote);
$quote = preg_replace('/ +/', ' ', $quote);
$message =str_replace("
","",$quote);
В результате получаем следующий код:
$message=JRequest::getVar ( 'message', null, 'POST', 'string', JREQUEST_ALLOWRAW );
preg_match_all('|(.*)\[\/quote\](.*)|se', $message, $post, PREG_PATTERN_ORDER);
preg_match_all('/\[\/quote\](.*?)\[\/quote\](.*)\[\/quote\]/se', $message, $matches, PREG_PATTERN_ORDER);
$message = $matches[2][0]?'[quote]'.$matches[2][0].'[/quote]'.$post[2][0]:'';
if(!$matches[2][0]){
preg_match_all('/\[quote\](.*?)\[\/quote\](.*)\[\/quote\]/se', $message, $matches, PREG_PATTERN_ORDER);
$message = $post[1][0]?$post[1][0].'[/quote]'.$post[2][0]:'';
}
//если регулярки пусные знаит нету цитирвоания и вывожу прсото текст
$message= $message?$message:JRequest::getVar ( 'message', null, 'POST', 'string', JREQUEST_ALLOWRAW );
$fields = array (
'catid' => $this->catid,
'name' => JRequest::getString ( 'authorname', $this->me->getName () ),
'email' => JRequest::getString ( 'email', null ),
'subject' => JRequest::getVar ( 'subject', null, 'POST', 'string', JREQUEST_ALLOWRAW ),
'message' => $message,
'icon_id' => JRequest::getInt ( 'topic_emoticon', null ),
'anonymous' => JRequest::getInt ( 'anonymous', 0 ),
'poll_title' => JRequest::getString ( 'poll_title', '' ),
'poll_options' => JRequest::getVar('polloptionsID', array (), 'post', 'array'),
'poll_time_to_live' => JRequest::getString ( 'poll_time_to_live', 0 ),
'tags' => JRequest::getString ( 'tags', null ),
'mytags' => JRequest::getString ( 'mytags', null ),
'subscribe' => JRequest::getInt ( 'subscribeMe', 0 )
);
Теперь возможно цитирование не боле двух раз в сообщении, код конечно можно модифицирвоать и заточить, но это уже нужно время.
Kunena избавимся от лишних quote - Генератор расширений Joomla и многое другое на нашем сайте посвященном работе расширений, компонентов, модулей, плагинов для линейки Joomla. Отправляйте ссылку на страницу своим друзьям и в социальные сети воспользовавшись графическими иконками выше.