Добавляем в BulletEnergy 1.3 вторую кнопку "Обсудить на форуме"
Выкладывал я такой хак как то давно, на не которых сайтах, но вот решил выложить здесь у про родителя так сказать.
Как то мне на сайте нужно была возможность, чтобы в новости было две кнопки
"Обсудить на форуме" очень понравилась мне эта функция, одна из которых ссылалась бы в одни категории обсуждения со своим префиксом, другая же в категории информативные со своим префиксом, но уже с другим наклоном (будь то ГИД, ГАЙД или полезные советы). То есть, Создал 1 раздел с форумом и его подфорумами и к нему привязал одну кнопку "Обсудить", далее создал 2 раздел с форумом и его подфорумами, а к нему уже привязал вторую кнопку "Обсудить", тем самым получив два разных направления обсуждения новостей.
Может есть не которые недочеты в этом хаке, так как искал сам готовое решение, но в итоге решил сделать сам, в принципе все работает хорошо, чего я и добился, то и получилось. Может кому не будь такая вещь тоже будет по нраву.
Началось все из-за текста, где эта кнопка отображается и что пишется после его нажатия, вроде все то, да не так.
Итак, не забываем сделать резервную копию
редактируемых файлов и своей
Базы ДанныхДелаем запрос в БД:
ALTER TABLE dle_post ADD dispute_id int(11) unsigned DEFAULT '0';
ALTER TABLE dle_be_attachment ADD dispute_id int(11) unsigned NOT NULL DEFAULT '0';
engine\bullet_energy\classes\admin.class.php
Ищем: if($row['action'] == 'discussion') {
$row['param'] = unserialize($row['param']) ;
}
Ниже вставляем: if($row['action'] == 'disputation') {
$row['param'] = unserialize($row['param']) ;
}
Ищем такие строки: } elseif(in_array(self::$action['get'], array(
'category',
'questions',
'advertising',
'trophies',
'discussion',
Ниже вставляем: 'disputation',
Ищем: $menu .= '<li><a class="template" href="' . self::$path . '?mod=bullet_energy&action=discussion">' . self::$bullet_energy_lang['setting_300'] . '</a></li>' ;
Ниже вставляем:
$menu .= '<li><a class="template" href="' . self::$path . '?mod=bullet_energy&action=disputation">' . self::$bullet_energy_lang['setting_300'] . '</a></li>' ;
engine\bullet_energy\classes\link.class.php
Ищем: public function discussion($id = 0)
{
if($this->cpu) {
$result = "{$this->root}{$this->router['main']}/discussion-{$id}{$this->endLinckSymbol}" ;
} else {
$result = "{$this->root}?do={$this->router['main']}&action=discussion&id={$id}" ;
}
return $result ;
}
Ниже вставляем: public function disputation($id = 0)
{
if($this->cpu) {
$result = "{$this->root}{$this->router['main']}/disputation-{$id}{$this->endLinckSymbol}" ;
} else {
$result = "{$this->root}?do={$this->router['main']}&action=disputation&id={$id}" ;
}
return $result ;
}
engine\bullet_energy\action\admin\references.php
Ищем: $rewRulle[] = 'RewriteRule ^' . parent::$bulletRouter['main'] . '/discussion-([0-9]+)(/?)+$ index.php?do=' . parent::$bulletRouter['main'] . '&action=discussion&id=$1 [L]' ;
Ниже вставляем: $rewRulle[] = 'RewriteRule ^' . parent::$bulletRouter['main'] . '/disputation-([0-9]+)(/?)+$ index.php?do=' . parent::$bulletRouter['main'] . '&action=disputation&id=$1 [L]' ;
engine\bullet_energy\api\bullet_api.class.php
Ищем: if($row['action'] == 'discussion') {
$row['param'] = unserialize($row['param']) ;
}
Ниже вставляем: if($row['action'] == 'disputation') {
$row['param'] = unserialize($row['param']) ;
}
Ищем: public function setLinckDiscus(array $data = array())
Выше вставляем: public function setLinckDisput(array $data = array())
{
$this->cache['template'] = $this->getCache('template') ;
if(!is_array($this->cache['template'])) {
$this->_setCache();
return $this->setLinckDisput($data) ;
}
if($this->member_id['user_group'] == 0 OR !isset($this->cache['template']['disputation']['tree'][$data['tree']])) {
return false ;
}
if(empty($data['id'])) {
return '<a href="' . $this->link->disputation($data['idPost']) . '">' . $this->bullet_energy_lang['topic_148_1'][0] . '</a>' ;
} else {
$row = $this->db->super_query("SELECT reply_count, title FROM " . PREFIX . "_be_topic WHERE id = {$data['id']}") ;
if ( !$row ) {
$this->db->query("UPDATE " . PREFIX . "_post SET dispute_id = 0 WHERE id = {$data['idPost']}");
return '<a href="' . $this->link->disputation($data['idPost']) . '">' . $this->bullet_energy_lang['topic_148_1'][0] . '</a>' ;
}
else return '<a href="' . $this->link->topic_linck($data['id'], totranslit($row['title'], true, true)) . '">' . $this->bullet_energy_lang['topic_148_1'][1] . '(' . $this->bullet_energy_lang['topic_148'][2] . $row['reply_count'] . ')' . '</a>' ;
}
}
engine\bullet_energy\library\language\utf-8\Russian\site.lng
Ищем:'topic_148' => array(
Выше вставляем: 'topic_148_1' => array(
'<strong>ОБСУДИТЬ НА ФОРУМЕ 2</strong>',
'Перейти к обсуждению на форуме ',
'Ответов '),
.htaccess
Ищем:RewriteRule ^forum/discussion-([0-9]+)(/?)+$ index.php?do=forum&action=discussion&id=$1 [L]
Ниже вставляем:RewriteRule ^forum/disputation-([0-9]+)(/?)+$ index.php?do=forum&action=disputation&id=$1 [L]
engine\modules\show.full.php
Ищем:$tpl->copy_template = preg_replace ( "#\{date=(.+?)\}#ie", "langdate('\\1', '{$row['date']}')", $tpl->copy_template );
или
$tpl->copy_template = preg_replace_callback ( "#\{date=(.+?)\}#i", "formdate", $tpl->copy_template );
Ниже вставляем: if ( $view_template != "print" AND $is_logged) $tpl->set('{forumDisput}', $apiBullet->setLinckDisput(array(
'idPost' => $row['id'],
'id' => $row['dispute_id'],
'tree' => $category_id))) ;
else $tpl->set('{forumDisput}', '');
или
if ( $view_template != "print") {
$tpl->set('{forumDisput}', $apiBullet->setLinckDisput(array(
'idPost' => $row['id'],
'id' => $row['dispute_id'],
'tree' => $category_id))) ; }
или
if( $row['forum_disput'] ) {
if ( $view_template != "print") {$tpl->set('{forumDisput}', $apiBullet->setLinckDisput(array(
'idPost' => $row['id'],
'id' => $row['dispute_id'],
'tree' => $category_id))) ;}
$tpl->set( '[forum_Disput]', "" );
$tpl->set( '[/forum_Disput]', "" );
} else {
$tpl->set( '{forumDisput}', "" );
$tpl->set_block( "'\\[forum_Disput\\](.*?)\\[/forum_Disput\\]'si", "" );
}
Где if( $row['forum_disput'] ) {
Если создавали Чекбокс "обсудить на форуме" для новостей, только я изначально менял тег на
forum_disput, так как мне была нужна 2 кнопка с чекбоксом
В шаблоне полной новости доступен тег:[forum_Disput]{forumDisput}[/forum_Disput]
СКАЧАТЬ ФАЙЛ: