That 0 03/04/19 22:21 Здравствуйте. Версия форума 3.4.9 + Content. Немного кастумизируем форум и появилась необходимость правый блок последних тем и дополнительный кастумный блок (некоторые запросы из БД) прикрепить по всему форуму. Темы, ответы и тп. То есть эти 2 блока должны быть везде, как футер к примеру. Подскажите пожалуйста, как это лучше сделать? Спасибо за любую информацию! Поделиться сообщением Ссылка на сообщение
siv1987 2628 03/04/19 22:26 Эти блоки относятся только к шаблону boardIndexTemplate и в глобальном шаблоне они работать не будут.Тема вроде обсуждалась, но единственный кто реализовал такие блоки, и не без костылей, это Lesovsky. 1 Поделиться сообщением Ссылка на сообщение
That 0 03/04/19 22:30 Хмм. Спасибо большое за оперативный ответ, хотя и не очень позитивный) Поделиться сообщением Ссылка на сообщение
siv1987 2628 03/04/19 22:34 Но способ есть - (DP34) Global Sidebars Как отобразить боковую панель на всех станицах форумаСайдбар на всех страницах в ipb 3.2.3 Поделиться сообщением Ссылка на сообщение
That 0 03/04/19 22:37 Эхх. Ссылка то мёртвая на зарубежный форум) Поделиться сообщением Ссылка на сообщение
Trotor 27 03/05/19 01:19 Наверное включение боковых блоках в темах довольно сильно сделает нагрузку на форум. Рискованно... Поделиться сообщением Ссылка на сообщение
siv1987 2628 03/05/19 08:18 Сейчас ресурсы серверов и простых шаред хостингов сильно выросли. Пару тройку дополнительных запросов уже не так принципиально для простого форума. Поделиться сообщением Ссылка на сообщение
That 0 03/05/19 10:11 (изменено) Хостинг само собой не шаровый, поэтому данная проблема не волнует). Важнее была возможность реализации, но раз сложно - значит не судьба. Изменено 5 марта 2019 пользователем That Поделиться сообщением Ссылка на сообщение
Lesovsky 183 03/05/19 10:39 Я реализовывал это на одном достаточно крупном проекте, там была как раз такая задача, работало всё стабильно, единственный минус, полуручной режим. Для этого нужно воспользоваться блоками IP.Content, идея такова, что 1 сайдбар = 1 блок IP.Content, если нужен один глобальный, то соответственно будет 1 блок. 1. Создаёте блок с типом Custom и ключом блока например customsidebar.2. В созданных блок вставляете соответственно тоже блоки IP.Content Последних тем и т.д., через {parse block="КЛЮЧБЛОКА"}.3. Определиться, а) вставить в глобальный шаблон, чтобы совершенно на всех вставить или, б) вставить на индексные страницы разделов (советую б)).4. Созданный сайдбар вставляем на необходимую страницу, все шаблоны индексных страниц разделов имеют название nameIndexTemplate, например boardIndexTemplate.5. Открываем boardIndexTemplate (это шаблон главной страницы), смотрим по разметке, к сожалению нет под рукой 3.4, ищете вывод блоков сайдбара, и вставляете {parse block="customsidebar"}. Очень кратко указал, но думаю ясно, что вставляя в необходимое место в шаблоне {parse block="КЛЮЧБЛОКА"}, можно вывести почти всё что хочешь. 2 Поделиться сообщением Ссылка на сообщение
That 0 03/05/19 11:55 Хмм. Спасибо большое за "толчок", сегодня буду экспериментировать). А почему даёте совет "Б"? Подводные камни? Поделиться сообщением Ссылка на сообщение
siv1987 2628 03/05/19 12:27 А приложение Global Sidebars не смотрели? Там вроде то, что вам нужно. Правда не знаю если можно перенести блоки главной странице в глобальный сайдбар. Поделиться сообщением Ссылка на сообщение
Lesovsky 183 03/05/19 13:50 Хмм. Спасибо большое за "толчок", сегодня буду экспериментировать). А почему даёте совет "Б"? Подводные камни?Потому что если у вас используются IP.Content для вывода каких-либо страниц и т.д., то и там будет выводится сайдбар, при использовании враппера форума конечно, да и в целом, на мой взгляд лучше выводить информацию там где нужно, а не глобально. Смотрите сами конечно. 1 Поделиться сообщением Ссылка на сообщение
That 0 03/05/19 16:31 Ну собственно добился чего хотел, правда кажется где то что-то упустил. Тут скрин контента. Тут уже форума и хук последних тем, который был установлен ранее занимается ерундой))). Закрыв его - всё становится как и требовалось. Ладно. Думаю удалю его и всё станет нормально. Но не тут то было).В globalTemplate я нашёл <if test="mainpageContent:|:$html">{$html}</if> и после чего сделал следующее:<div class='ipsLayout ipsLayout_withright ipsLayout_largeright'> <div class='ipsLayout_right'> {parse block="customsidebar"} </div> <div class='ipsLayout_content'> <if test="mainpageContent:|:$html">{$html}</if> </div> </div>Подозреваю что проблема в этом... Поделиться сообщением Ссылка на сообщение
Lesovsky 183 03/05/19 17:15 Пришлите код шаблона boardIndexTemplate, а то нет 3.4 под рукой. 1 Поделиться сообщением Ссылка на сообщение
That 0 03/05/19 17:24 (изменено) Тут. И опять же, если кастум блоки прописать boardIndexTemplate, то в контенте и в темах эти блоки вроде фигурировать не будут. А они нужны там. {parse js_module="board"} {parse variable="sidebar_enabled" default="$show_side_blocks"} <if test="boardIndexTop:|:true"></if> <div id='board_index' class='ipsLayout <if test="sideBarEnabledL:|:$this->templateVars['sidebar_enabled']">ipsLayout_withright</if> ipsLayout_largeright clearfix <if test="sidebarclosed:|:IPSCookie::get('hide_sidebar') == '1'">no_sidebar</if>'> <div id='categories' class='ipsLayout_content clearfix'> <!-- CATS AND FORUMS --> <if test="cats_forums:|:is_array( $cat_data ) AND count( $cat_data )"> <foreach loop="categories:$cat_data as $_data"> <if test="cat_has_forums:|:is_array( $_data['forum_data'] ) AND count( $_data['forum_data'] )"> <div id='category_{$_data['cat_data']['id']}' class='category_block block_wrap'> <h3 class='maintitle'> <a class='toggle right' href='#' title="{parse expression="sprintf( $this->lang->words['toggle_cat'], IPSText::striptags( IPSText::htmlspecialchars($_data['cat_data']['name'] ) ) )"}">{parse expression="sprintf( $this->lang->words['toggle_cat'], $_data['cat_data']['name'] )"}</a> <a href="{parse url="showforum={$_data['cat_data']['id']}" seotitle="{$_data['cat_data']['name_seo']}" template="showforum" base="public"}" title='{parse expression="sprintf( $this->lang->words['view_cat'], IPSText::striptags( IPSText::htmlspecialchars($_data['cat_data']['name'] ) ) )"}'>{$_data['cat_data']['name']}</a> </h3> <div class='ipsBox table_wrap'> <div class='ipsBox_container'> <table class='ipb_table' summary="{$this->lang->words['forums_in_cat']} '{$_data['cat_data']['name']}'"> <tr class='header hide'> <th scope='col' class='col_c_icon'> </th> <th scope='col' class='col_c_forum'>{$this->lang->words['cat_name']}</th> <th scope='col' class='col_c_stats stats'>{$this->lang->words['stats']}</th> <if test="canSeeLastInfoHeader:|:$this->memberData['gbw_view_last_info']"><th scope='col' class='col_c_post'>{$this->lang->words['last_post_info']}</th></if> </tr> <!-- / CAT HEADER --> <foreach loop="forums:$_data['forum_data'] as $forum_id => $forum_data"> <if test="forumRedirect:|:$forum_data['redirect_on']"> <tr class='redirect_forum' id='f_{$forum_data['id']}'> <td class='col_c_icon'> <img src='{$this->settings['img_url']}/f_redirect.png' /> </td> <td <if test="canSeeLastInfoRedirect:|:$this->memberData['gbw_view_last_info']">colspan='2'</if> class='col_c_forum'> <h4><a href="{parse url="showforum={$forum_data['id']}" seotitle="{$forum_data['name_seo']}" template="showforum" base="public"}" title='{parse expression="IPSText::striptags( IPSText::htmlspecialchars( $forum_data['name'] ) )"}'>{$forum_data['name']}</a></h4> <p class='desc'>{$forum_data['description']}</p> </td> <td class='desc'> <ul class='last_post ipsType_small'> <li class='desc lighter'><em>{parse format_number="$forum_data['redirect_hits']"} {$this->lang->words['rd_hits']}</em></li> </ul> </td> </tr> <else /> <tr class='<if test="hasUnreadClass:|:$forum_data['_has_unread']">unread</if>'> <td class='col_c_icon'> <if test="hasUnread:|:$forum_data['_has_unread']"> <a id='forum_img_{$forum_data['id']}' href="{parse url="app=forums&module=forums§ion=markasread&marktype=forum&forumid={$forum_data['id']}&returntoforumid={$this->request['f']}&i=1&k={$this->member->form_hash}" base="public"}" data-tooltip="{$this->lang->words['bi_markread']}" class='forum_marker'><img src='{$this->settings['img_url']}/f_icon.png' /></a> <else /> <img src='{$this->settings['img_url']}/f_icon_read.png' /> </if> </td> <td class='col_c_forum'> <h4> <if test="hasQueuedAndCanSeeIcon:|:!empty($forum_data['_has_queued_and_can_see_icon'])"> <a href='{parse url="showforum={$forum_data['id']}&modfilter=unapproved" seotitle="{$forum_data['name_seo']}" template="showforum" base="public"}' title='{$this->lang->words['view_unapproved']}' class='ipsBadge ipsBadge_orange' data-tooltip="{parse expression="sprintf( $this->lang->words['f_queued'], $forum_data['queued_topics'], $forum_data['queued_posts'])"}" style='vertical-align: top'>{$this->lang->words['f_queued_badge']}</a> </if> <a href="{parse url="showforum={$forum_data['id']}" seotitle="{$forum_data['name_seo']}" template="showforum" base="public"}" title='{parse expression="IPSText::striptags( IPSText::htmlspecialchars( $forum_data['name'] ) )"}'>{$forum_data['name']}</a> </h4> <if test="showSubForums:|:$forum_data['show_subforums'] AND count( $forum_data['subforums'] ) AND $forum_data['show_subforums']"> <br /> <ol class='ipsList_inline ipsType_small subforums' id='subforums_{$forum_data['id']}'> <foreach loop="subforums:$forum_data['subforums'] as $__id => $__data"> <if test="showSubForumsLit:|:$__data[3]"><li class='unread'><else /><li></if> <a href="{parse url="showforum={$__data[0]}" seotitle="{$__data[2]}" template="showforum" base="public"}" title='{parse expression="IPSText::striptags( IPSText::htmlspecialchars($__data[1]) )"}'>{$__data[1]}</a><if test="isNotLast:|: empty($__data[4] )">,</if> </li> </foreach> </ol> </if> <p class='desc __forum_desc ipsType_small'>{$forum_data['description']}</p> </td> <td class='col_c_stats ipsType_small'> <ul> <li><strong>{$forum_data['topics']}</strong> {$this->lang->words['topics']}</li> <li><strong>{$forum_data['posts']}</strong> {$this->lang->words['replies']}</li> </ul> </td> <if test="canSeeLastInfo:|:$this->memberData['gbw_view_last_info']"> <td class='col_c_post'> <if test="hideLastInfo:|:$forum_data['hide_last_info']"> <ul class='last_post ipsType_small'> <li class='desc lighter'><em>{$this->lang->words['f_protected']}</em></li> </ul> <else /> <if test="hideTopicInTitle:|:$forum_data['_hide_last_date']"> {parse template="userSmallPhoto" group="global" params="array('member_id' => $forum_data['last_poster_id'], 'members_seo_name' => $forum_data['seo_last_name'], 'pp_small_photo' => $forum_data['pp_small_photo'], 'alt' => '' )"} <else /> {parse template="userSmallPhoto" group="global" params="array('member_id' => $forum_data['last_poster_id'], 'members_seo_name' => $forum_data['seo_last_name'], 'pp_small_photo' => $forum_data['pp_small_photo'], 'alt' => sprintf( $this->lang->words['bindex_userphoto_alt'], $forum_data['last_title'], $forum_data['members_display_name'] ) )"} </if> <ul class='last_post ipsType_small'> <if test="!$forum_data['last_id']"> <li class='desc lighter'><em>{$this->lang->words['f_none']}</em></li> <else /> <li> {$forum_data['last_topic_title']} </li> <if test="lastPosterID:|:$forum_data['last_poster_id']"> <li>{$this->lang->words['by']} {parse template="userHoverCard" group="global" params="$forum_data"}</li> </if> <if test="hideDateUrl:|:$forum_data['_hide_last_date']"> <li class='desc lighter blend_links'>{parse date="$forum_data['last_post']" format="DATE"}</li> <else /> <li class='desc lighter blend_links'><a href='{parse url="showtopic={$forum_data['last_id']}&view=getlastpost" base="public" template="showtopic" seotitle="{$forum_data['seo_last_title']}"}' title='{$this->lang->words['view_last_post']}'>{parse date="$forum_data['last_post']" format="DATE"}</a></li> </if> </if> </ul> </if> </td> </if> </tr> </if> </foreach> </table> </div> </div> <br /> </div> </if> </foreach> </if> </div> <if test="sideBarEnabled2:|:$this->templateVars['sidebar_enabled']"> <div id='index_stats' class='ipsLayout_right clearfix' <if test="sidebarclosed2:|:IPSCookie::get('hide_sidebar') == '1'">style='display: none'</if>> <foreach loop="side_blocks:$side_blocks as $block"> {$block} </foreach> </div> <a href='#' id='toggle_sidebar' title='{$this->lang->words['toggle_sidebar']}' data-closed="{$this->lang->words['_laquo']}" data-open="×"> </a> </if> </div> <script type='text/javascript'> //<![CDATA[ var markerURL = ipb.vars['base_url'] + "app=forums&module=ajax§ion=markasread&i=1"; // Ajax URL so don't use & var unreadIcon = "<img src='{$this->settings['img_url']}/f_icon_read.png' />"; <if test="markercatforums:|:is_array( $cat_data ) AND count( $cat_data )"> <foreach loop="markercategories:$cat_data as $_data"> <if test="markerhasforums:|:is_array( $_data['forum_data'] ) AND count( $_data['forum_data'] )"> <foreach loop="markerforums:$_data['forum_data'] as $forum_id => $forum_data"> <if test="markernotredirect:|:!$forum_data['redirect_on']"> <if test="markerhasunread:|:$forum_data['_has_unread']"> ipb.global.registerMarker( "forum_img_{$forum_data['id']}", "{$forum_data['img_new_post']}", markerURL + "&forumid={$forum_data['id']}" ); </if> </if> </foreach> </if> </foreach> </if> //]]> </script> <if test="showTotals:|:$this->settings['show_totals']"> <div id='board_stats'> <ul class='ipsType_small ipsList_inline'> <li class='clear'> <span class='value'>{$stats['info']['total_posts']}</span> {$this->lang->words['total_posts']} </li> <li class='clear'> <span class='value'>{$stats['info']['mem_count']}</span> {$this->lang->words['total_members']} </li> <li class='clear'> {IPSMember::makeProfileLink( $stats['info']['last_mem_name'], $stats['info']['last_mem_id'], $stats['info']['last_mem_seo'], 'value' )} {$this->lang->words['newest_member']} </li> <li class='clear' data-tooltip="{$stats['info']['most_time']}"> <span class='value'>{$stats['info']['most_online']}</span> {$this->lang->words['online_at_once']} </li> </ul> </div> </if> <div id='board_statistics' class='statistics clearfix'> <ul id='stat_links' class='ipsList_inline right ipsType_small'> <if test="statsLinks:|:1==1"> <!-- Hook point --> <li><a href="{parse url="app=forums&module=extras§ion=stats&do=leaders" base="public"}" title="{$this->lang->words['sm_forum_leaders_title']}">{$this->lang->words['sm_forum_leaders']}</a></li> <li><a href="{parse url="app=forums&module=extras§ion=stats" base="public"}" title="{$this->lang->words['sm_all_posters_title']}">{$this->lang->words['sm_today_posters']}</a></li> <li><a href="{parse url="app=members&module=list&max_results=20&sort_key=posts&sort_order=desc&filter=ALL" base="public" seotitle="false"}" title="{$this->lang->words['sm_overall_posters_title']}">{$this->lang->words['sm_overall_posters']}</a></li> <if test="reputationEnabled:|:$this->settings['reputation_enabled']"> <li> <a href="{parse url="app=members&module=reputation§ion=most" base="public" template="most_liked" seotitle="most_liked"}" title="<if test="reputationTypeTitle:|:$this->settings['reputation_point_types'] == 'like'">{$this->lang->words['most_rep_likes']}<else />{$this->lang->words['most_rep_rep']}</if>"> <if test="reputationType:|:$this->settings['reputation_point_types'] == 'like'"> {$this->lang->words['most_rep_likes']} <else /> {$this->lang->words['most_rep_rep']} </if> </a> </li> </if> </if> </ul> <if test="showActive:|:$this->settings['show_active'] && $this->memberData['gbw_view_online_lists']"> <h4 class='statistics_head'>{parse expression="sprintf( $this->lang->words['online_right_now'], $stats['TOTAL'] )"} {$this->lang->words['active_users']}</h4> <p class='statistics_brief desc'> {parse expression="sprintf( $this->lang->words['active_users_detail'], $stats['MEMBERS'], $stats['GUESTS'], $stats['ANON'] )"} <if test="onlineListEnabled:|:$this->settings['allow_online_list']"> <a href='{parse url="app=members&module=online&sort_order=desc" base="public"}' title='{$this->lang->words['online_link']}'>({$this->lang->words['online_link']})</a></if> </p> </if> <if test="activeNames:|:count($stats['NAMES']) && $this->settings['show_active']"> <br /> <p> <span class='name'>{parse expression="implode( ",</span> <span class='name'>", $stats['NAMES'] )"}</span> </p> </if> </div> Изменено 5 марта 2019 пользователем That Поделиться сообщением Ссылка на сообщение