Приветствую. Есть хук, который создает кнопку на главной странице форума, при нажатии на которую можно выбрать в каком разделе создать тему. Очень удобно, не нужно лазить по всему форуму. Хук рабочий, я проверял. Но дело в том, что у меня стоит IP.Content 2.3.2. Причем нюанс - он стоит ГЛАВНОЙ страницей, а не форум. Из-за этого хук не устанавливается, вернее устанавливается, но не работает. Я головой понимаю, что нужно менять код хука, но, к сожалению, сам я сделать это не могу. Буду благодарен за помощь. Надеюсь, что изъяснил все понятно. В initdata.php менял 'forums' на 'ccs' для того, чтобы IP.Content стал главной. Думается, что и в хуке нужно пояснить где что и как. Но я возился, так и не смог. Ниже привожу код хука. Код: <?xml version="1.0" encoding="utf-8" ?> - <hookexport> - <hookdata> - <config> <hook_name>New Topic Button on Board Index</hook_name> <hook_desc>Shows a button for starting a new topic on the Board Index</hook_desc> <hook_author>Michael McCune</hook_author> <hook_email>[email protected]</hook_email> <hook_website>http://invisionfocus.com/</hook_website> <hook_update_check>http://invisionfocus.com/resource_updates.php?resource=newTopicButtonBoardIndex</hook_update_check> - <hook_requirements> - <![CDATA[ a:3:{s:21:"required_applications";a:1:{s:4:"core";a:3:{s:8:"app_name";s:6:"System";s:11:"min_version";i:30001;s:11:"max_version";i:0;}}s:20:"hook_php_version_min";s:0:"";s:20:"hook_php_version_max";s:0:"";} ]]> </hook_requirements> <hook_version_human>1.0.1</hook_version_human> <hook_version_long>10001</hook_version_long> - <hook_extra_data> - <![CDATA[ a:6:{s:7:"display";a:4:{s:8:"language";s:102:"From forums_public_boards: hookNewTopic_no_forums, hookNewTopic_select_forum, hookNewTopic_start_topic";s:9:"templates";s:68:"From skin_boards: hookNewTopicBoardIndex, hookNewTopicBoardIndexList";s:8:"settings";s:47:"Setting groups: New Topic Button on Board Index";s:3:"css";s:21:"CSS Files: ipb_ntbbi";}s:9:"templates";a:1:{s:11:"skin_boards";a:2:{s:22:"hookNewTopicBoardIndex";s:22:"hookNewTopicBoardIndex";s:26:"hookNewTopicBoardIndexList";s:26:"hookNewTopicBoardIndexList";}}s:8:"database";a:0:{}s:8:"language";a:1:{s:20:"forums_public_boards";a:3:{s:0:"";s:22:"hookNewTopic_no_forums";i:1;s:25:"hookNewTopic_select_forum";i:2;s:24:"hookNewTopic_start_topic";}}s:13:"settingGroups";a:1:{s:0:"";s:24:"newTopicButtonBoardIndex";}s:3:"css";a:1:{s:0:"";s:9:"ipb_ntbbi";}} ]]> </hook_extra_data> <hook_key>newTopicButtonBoardIndex</hook_key> <hook_global_caches /> </config> </hookdata> - <hookfiles> - <file> <hook_file_real>newTopicButtonBoardIndex.php</hook_file_real> <hook_type>templateHooks</hook_type> <hook_classname>newTopicButtonBoardIndex</hook_classname> - <hook_data> - <![CDATA[ a:8:{s:12:"dataLocation";s:0:"";s:14:"libApplication";s:0:"";s:15:"classToOverload";s:0:"";s:9:"skinGroup";s:11:"skin_global";s:12:"skinFunction";s:14:"globalTemplate";s:4:"type";s:2:"if";s:2:"id";s:11:"showhomeurl";s:8:"position";s:11:"pre.startif";} ]]> </hook_data> - <hooks_source> - <![CDATA[ <?php class newTopicButtonBoardIndex { protected $registry; public function __construct() { /* Make registry objects */ $this->registry = ipsRegistry::instance(); } public function getOutput() { /* Simply return the button */ return $this->registry->output->getTemplate('boards')->hookNewTopicBoardIndex(); } } ]]> </hooks_source> </file> - <file> <hook_file_real>newTopicButtonBoardIndexAjax.php</hook_file_real> <hook_type>commandHooks</hook_type> <hook_classname>newTopicButtonBoardIndexAjax</hook_classname> - <hook_data> - <![CDATA[ a:8:{s:12:"dataLocation";s:0:"";s:14:"libApplication";s:0:"";s:15:"classToOverload";s:25:"public_forums_ajax_forums";s:9:"skinGroup";N;s:12:"skinFunction";N;s:4:"type";N;s:2:"id";N;s:8:"position";N;} ]]> </hook_data> - <hooks_source> - <![CDATA[ <?php class newTopicButtonBoardIndexAjax extends (~extends~) { private $cnt = 0; public function doExecute( ipsRegistry $registry ) { if ( $this->request['do'] == 'fetchNewTopicForums' ) { /* Language */ $this->lang->loadLanguageFile( array( 'public_boards' ), 'forums' ); /* Get our list of forums */ $links = array(); $depth = 0; /* Loop over categories */ if ( is_array( $this->registry->class_forums->forum_cache['root'] ) && count( $this->registry->class_forums->forum_cache['root'] ) ) { foreach ( $this->registry->class_forums->forum_cache['root'] as $forum_data ) { /* Add to our array */ $links[] = array( 'important' => true, 'depth' => $depth, 'title' => $forum_data['name'], 'url' => '#' ); /* Loop over forums */ if ( isset( $this->registry->class_forums->forum_cache[ $forum_data['id'] ] ) && is_array( $this->registry->class_forums->forum_cache[ $forum_data['id'] ] ) ) { $depth++; foreach ( $this->registry->class_forums->forum_cache[ $forum_data['id'] ] as $forum_data ) { /* Can we start a topic here? */ if ( !$forum_data['redirect_on'] && $this->registry->class_forums->canStartTopic( $forum_data['id'] ) ) { $this->cnt++; $links[] = array( 'depth' => $depth, 'title' => $forum_data['name'], 'url' => $this->registry->output->buildSEOUrl( 'app=forums&module=post&section=post&do=new_post&f=' . $forum_data['id'], 'public' ) ); } $links = $this->_getDataRecursively( $forum_data['id'], $links, $depth ); } $depth--; } } } /* If we got no postable forums, give an error */ if ( !$this->cnt ) { $this->returnJsonArray( array( 'error' => $this->lang->words['hookNewTopic_no_forums'] ) ); } else { /* Return the list */ $this->returnJsonArray( array( 'html' => $this->registry->output->getTemplate('boards')->hookNewTopicBoardIndexList( $links ) ) ); } } /* Return */ return parent::doExecute( $registry ); } private function _getDataRecursively( $root_id, $links=array(), $depth=0 ) { /* Loop over forums */ if ( isset( $this->registry->class_forums->forum_cache[ $root_id ] ) && is_array( $this->registry->class_forums->forum_cache[ $root_id ] ) ) { $depth++; foreach ( $this->registry->class_forums->forum_cache[ $root_id ] as $forum_data ) { /* Can we start a topic here? */ if ( !$forum_data['redirect_on'] && $this->registry->class_forums->canStartTopic( $forum_data['id'] ) ) { $this->cnt++; $links[] = array( 'depth' => $depth, 'title' => $forum_data['name'], 'url' => $this->registry->output->buildSEOUrl( 'app=forums&module=post&section=post&do=new_post&f=' . $forum_data['id'], 'public' ) ); } $links = $this->_getDataRecursively( $forum_data['id'], $links, $depth ); } } /* Return */ return $links; } } ]]> </hooks_source> </file> </hookfiles> - <hookextras_settings> - <setting> <conf_is_title>1</conf_is_title> <conf_title_title>New Topic Button on Board Index</conf_title_title> <conf_title_desc>Settings for the New Topic Button on Board Index hook</conf_title_desc> <conf_title_noshow>0</conf_title_noshow> <conf_title_keyword>newTopicButtonBoardIndex</conf_title_keyword> <conf_title_app>forums</conf_title_app> <conf_title_tab>Hooks</conf_title_tab> </setting> - <setting> <conf_id>1070</conf_id> <conf_title>Groups that can see the button</conf_title> <conf_description>Select which group(s) you want to be able to see and use the New Topic button</conf_description> <conf_group>117</conf_group> <conf_type>multi</conf_type> <conf_key>ntbbi_groups</conf_key> <conf_value /> <conf_default /> <conf_extra>#show_groups#</conf_extra> - <conf_evalphp> - <![CDATA[ if ( $save == 1 ) { if ( is_array( $_POST['ntbbi_groups'] ) ) { $_POST['ntbbi_groups'] = implode( ",", $_POST['ntbbi_groups'] ); } else { $_POST['ntbbi_groups'] = ""; } $key = 'ntbbi_groups'; } if ( $show == 1 ) { $key='ntbbi_groups[]'; } ]]> </conf_evalphp> <conf_protected>1</conf_protected> <conf_position>1</conf_position> <conf_start_group /> <conf_add_cache>1</conf_add_cache> <conf_keywords /> <conf_title_keyword>newTopicButtonBoardIndex</conf_title_keyword> <conf_is_title>0</conf_is_title> </setting> </hookextras_settings> - <hookextras_language> - <language> <word_app>forums</word_app> <word_pack>public_boards</word_pack> <word_key>hookNewTopic_no_forums</word_key> <word_default>Sorry, you do not have access to post a new topic in any forums</word_default> </language> - <language> <word_app>forums</word_app> <word_pack>public_boards</word_pack> <word_key>hookNewTopic_select_forum</word_key> <word_default>Select a forum:</word_default> </language> - <language> <word_app>forums</word_app> <word_pack>public_boards</word_pack> <word_key>hookNewTopic_start_topic</word_key> <word_default>Start New Topic</word_default> </language> </hookextras_language> <hookextras_modules /> <hookextras_help /> - <hookextras_templates> - <templates> <template_group>skin_boards</template_group> - <template_content> - <![CDATA[ <if test="showButton:|:IPSMember::isInGroup( $this->memberData, explode( ',', $this->settings['ntbbi_groups'] ) ) && IPS_APP_COMPONENT == 'forums' && ipsRegistry::$current_module == 'forums' && ipsRegistry::$current_section == 'boards'"> <li class="right"> <a href="#" id="new_topic_index" title="{$this->lang->words['hookNewTopic_start_topic']}">{$this->lang->words['hookNewTopic_start_topic']}</a> </li> <script type="text/javascript"> document.observe("dom:loaded", function() { $('new_topic_index').observe('click', function(e) { if ( !$('new_topic_index_menucontent') ) { var url = ipb.vars['base_url'] + 'app=forums&module=ajax§ion=forums&do=fetchNewTopicForums'; new Ajax.Request ( url, { method: 'post', evalJSON: 'force', parameters: { secure_key: ipb.vars['secure_hash'] }, onSuccess: function(t) { if ( t.responseJSON['error'] ) { alert( t.responseJSON['error'] ); } else { $('new_topic_index').addClassName('ipbmenu'); $('ipboard_body').insert( t.responseJSON['html'] ); var _newMenu = new ipb.Menu( $('new_topic_index'), $('new_topic_index_menucontent') ); _newMenu.doOpen(); } } } ); } }); }); </script> </if> ]]> </template_content> <template_name>hookNewTopicBoardIndex</template_name> <template_data /> <template_updated>1328378304</template_updated> <template_removable>0</template_removable> <template_added_to>0</template_added_to> <template_user_added>0</template_user_added> <template_user_edited>0</template_user_edited> <template_master_key>root</template_master_key> </templates> - <templates> <template_group>skin_boards</template_group> - <template_content> - <![CDATA[ <div id="new_topic_index_menucontent"> <h3 class="header bar">{$this->lang->words['hookNewTopic_select_forum']}</h3> <div> <ul class="ipbmenu_content boxShadow"> <foreach loop="$links as $t"> <li><a href="{$t['url']}"<if test="isCategory:|:$t['important']"> style="font-weight: bold;"</if>><if test="depth:|:!empty($t['depth'])">{parse expression="str_repeat( ' ', $t['depth'])"}</if>{$t['title']}</a></li> </foreach> </ul> </div> </div> ]]> </template_content> <template_name>hookNewTopicBoardIndexList</template_name> <template_data>$links=array()</template_data> <template_updated>1328378713</template_updated> <template_removable>0</template_removable> <template_added_to>0</template_added_to> <template_user_added>0</template_user_added> <template_user_edited>0</template_user_edited> <template_master_key>root</template_master_key> </templates> </hookextras_templates> - <hookextras_css> - <css> <css_updated>1328378701</css_updated> <css_group>ipb_ntbbi</css_group> <css_content>div#new_topic_index_menucontent { margin-top: 1px; } div#new_topic_index_menucontent div { max-height: 500px; overflow: auto; } div#new_topic_index_menucontent ul.ipbmenu_content li { white-space: nowrap; } div#new_topic_index_menucontent ul.ipbmenu_content li a { padding-right: 24px; }</css_content> <css_position>0</css_position> <css_added_to>0</css_added_to> <css_app>forums</css_app> <css_app_hide>1</css_app_hide> - <css_attributes> - <![CDATA[ title="Main" media="screen" ]]> </css_attributes> <css_modules>forums</css_modules> <css_removed>0</css_removed> <css_master_key>root</css_master_key> </css> </hookextras_css> <hookextras_tasks /> <hookextras_database_create /> <hookextras_database_alter /> <hookextras_database_update /> <hookextras_database_insert /> </hookexport>