Black_Sun Опубликовано 15 Апреля 2009 Жалоба Поделиться Опубликовано 15 Апреля 2009 Собсно сабж, помогите поменять тут //----------------------------------------- // Get jax firstpost //----------------------------------------- @header( "Content-type: text/plain;charset={$this->ipsclass->vars['gb_char_set']}" ); $this->ipsclass->DB->simple_construct( array( 'select' => '*', 'from' => 'posts', 'where' => "pid=".intval($this->ipsclass->input['pid'] > 0 ? $this->ipsclass->input['pid'] : $this->topic['topic_firstpost']), ));что-то чтобы брался не 1 пост, а последний. Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
0 FatCat Опубликовано 15 Апреля 2009 Жалоба Поделиться Опубликовано 15 Апреля 2009 Это в списке топиков форума аяксом тянет первое сообщение?Если айдишник последнего сообщения не определен, нужно в нескольких местах код править: сначала сделать, чтобы на страницу топиков форума отдавался последний айдишник каждому топику, и лишь потом менять этот код, заменив $this->topic['topic_firstpost'] на новое значение. Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
0 Arhar Опубликовано 16 Апреля 2009 Жалоба Поделиться Опубликовано 16 Апреля 2009 $this->ipsclass->input['pid'] же используется, зачем менять, надо просто его знать заранее и передавать в аяксеесли бы автор темы нормально описал, с чем имеет дело, можно было бы даже сказать, где Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
0 Black_Sun Опубликовано 16 Апреля 2009 Автор Жалоба Поделиться Опубликовано 16 Апреля 2009 а, сорри, я просто подумал что надо тут менять, а так запросто, это мод Topic Preview для версии 2.3.х Открыть файл ./sources/action_public/topics.php Найти: else if ($this->ipsclass->input['view'] == 'findpost') { //----------------------------------------- // Find a post //----------------------------------------- Добавить выше:else if ($this->ipsclass->input['view'] == 'getpost') { if( !is_object( $this->parser ) ) { //----------------------------------------- // Load and config the post parser //----------------------------------------- $_load = $this->ipsclass->memory_debug_make_flag(); require_once( ROOT_PATH."sources/handlers/han_parse_bbcode.php" ); $this->parser = new parse_bbcode(); $this->parser->ipsclass = $this->ipsclass; $this->parser->allow_update_caches = 1; $this->parser->bypass_badwords = intval($this->ipsclass->member['g_bypass_badwords']); $this->ipsclass->memory_debug_add( "TOPIC: Loaded han_parse_bbcode.php", $_load ); } //----------------------------------------- // Get jax firstpost //----------------------------------------- @header( "Content-type: text/plain;charset={$this->ipsclass->vars['gb_char_set']}" ); $this->ipsclass->DB->simple_construct( array( 'select' => '*', 'from' => 'posts', 'where' => "pid=".intval($this->ipsclass->input['pid'] > 0 ? $this->ipsclass->input['pid'] : $this->topic['topic_firstpost']), )); $this->ipsclass->DB->simple_exec(); $row = $this->ipsclass->DB->fetch_row(); $this->parser->parse_html = ( $this->forum['use_html'] and $row['post_htmlstate'] ) ? 1 : 0; $this->parser->parse_nl2br = $row['post_htmlstate'] == 2 ? 1 : 0; $input = $this->parser->pre_display_parse( $row['post'] ); $macros = unserialize(stripslashes($this->ipsclass->skin['_macro'])); if ( is_array( $macros ) ) { foreach( $macros as $i => $row ) { if ($row['macro_value'] != "") { $input = str_replace( "<{".$row['macro_value']."}>", $row['macro_replace'], $input ); } } } $input = str_replace( "<#IMG_DIR#>", $this->ipsclass->skin['_imagedir'], $input ); $input = str_replace( "<#EMO_DIR#>", $this->ipsclass->skin['_emodir'] , $input ); die($input); } Открыть файл ./jscripts/ipb_forum.js Найти:var _this_select_all = 0; var tid_date = new Array(); var click_delay = 1200; //microseconds (1.2 seconds) Добавить после:Код из http://cyber-city.ru/jscripts/ipb_topic_preview.js - спасибо за отдельный файл function getData(str,fld,textfield){field=document.getElementById(fld);do_request_function=function(){if(!xmlobj.readystate_ready_and_ok()){xmlobj.show_loading();return;}xmlobj.hide_loading();field.innerHTML=xmlobj.xmlhandler.responseText;};xmlobj=new ajax_request();xmlobj.onreadystatechange(do_request_function);xmlobj.process(ipb_var_base_url+Math.random()+"&"+str);return false;} ДалееАдминцентр > ВНЕШНИЙ ВИД > стиль > Изменить CSS(расширенный режим) В самое начало вставляем: .topicpreview{border:1px solid #000;position:absolute;width:500px;padding:3px 5px 3px 3px;background: #EEF2F7;text-align:left;margin-left:0px} Далее Админцентр > ВНЕШНИЙ ВИД > стиль > Изменить HTML > skin_forum > render_forum_row Найти: <span id='tid-span-{$data['tid']}'><a id="tid-link-{$data['tid']}" href="{$this->ipsclass->base_url}showtopic={$data['tid']}" title="{$this->ipsclass->lang['topic_started_on']} {$data['start_date']}">{$data['title']}</a></span>Добавить после: <span onmouseout='toggleview("{$data['tid']}_preview");' onmouseover='toggleview("{$data['tid']}_preview");getData("act=st&t={$data['tid']}&view=getpost","{$data['tid']}_preview")'>[b]СЮДА ВСТАВИТЬ ЛЮБОЙ ТЕКСТ/КАРТИНКУ(что угодно) ПО НАВЕДЕНИЮ НА КОТОРЫЙ(УЮ) БУДЕТ ВСПЛЫВАТЬ ТЕКСТ КАК ВСТАВЛЯТЬ КАРТИНКУ НИЖЕ[/b]</span><div id='{$data['tid']}_preview' class='topicpreview' style='display:none'></div> Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
0 Arhar Опубликовано 16 Апреля 2009 Жалоба Поделиться Опубликовано 16 Апреля 2009 проще будет запрос типа $this->ipsclass->DB->simple_construct( array( 'select' => '*', 'from' => 'posts', 'where' => "topic_id=".$this->topic['tid'], 'order' => 'post_date DESC', 'limit' => array( 0,1 ) ) ); Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
0 Black_Sun Опубликовано 16 Апреля 2009 Автор Жалоба Поделиться Опубликовано 16 Апреля 2009 Кул спс, всё работает.Вообще идея изначально была такая что пользователь в настройках выбирал какой пост ему показывать первый или последний, но после долгих изучений PHP и MySql я понял что это будет очень сложно поэтому решил сделать только по последнему посту, ещё раз спасибо Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
0 Arhar Опубликовано 16 Апреля 2009 Жалоба Поделиться Опубликовано 16 Апреля 2009 ну тык запросы можно выполнять по настройкамif($this->ipsclass->member['var_how_to_display_posts_in_ajax']=='last') { $this->ipsclass->DB->simple_construct( array( 'select' => '*', 'from' => 'posts', 'where' => "topic_id=".$this->topic['tid'], 'order' => 'post_date DESC', 'limit' => array( 0,1 ) ) ); } else { $this->ipsclass->DB->simple_construct( array( 'select' => '*', 'from' => 'posts', 'where' => "pid=".intval($this->topic['topic_firstpost']), )); } Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
0 Black_Sun Опубликовано 16 Апреля 2009 Автор Жалоба Поделиться Опубликовано 16 Апреля 2009 а как в опция его зарегить? Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
0 Arhar Опубликовано 16 Апреля 2009 Жалоба Поделиться Опубликовано 16 Апреля 2009 как, ALTER TABLE ibf_members и потом usercp.php и func_ucp.php или как там они называются, не помню уже... Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
0 Black_Sun Опубликовано 16 Апреля 2009 Автор Жалоба Поделиться Опубликовано 16 Апреля 2009 Неа не работает, добавил в ibf_profile_portal пункт pp_postas varchar(10) ну по принципу gender дальше в lang_ucp'panel_postas' => '<b>Вид предпросмотра</b>', 'panel_postas_l' => 'Последний', 'panel_postas_f' => 'Первый',и в lang_global'js_postas_last' => 'Последний', 'js_postas_first' => 'Первый',дальше по вашему принципу сделалif($this->ipsclass->member['pp_postas']=='last') { $this->ipsclass->DB->simple_construct( array( 'select' => '*', 'from' => 'posts', 'where' => "topic_id=".$this->topic['tid'], 'order' => 'post_date DESC', 'limit' => array( 0,1 ) ) ); } else { $this->ipsclass->DB->simple_construct( array( 'select' => '*', 'from' => 'posts', 'where' => "pid=".intval($this->topic['topic_firstpost']), )); }потом в ipsclass добавил $member['_pp_postas_text'] = $member['pp_postas'] == 'last' ? $this->lang['js_postas_last'] : ( $member['pp_postas'] == 'first' ? $this->lang['js_postas_first'] : $this->lang['js_gender_mystery'] );далее добавил в memberlist //----------------------------------------- // Postas. //----------------------------------------- if ( $pp_postas ) { if ( $pp_postas == 'last' ) { $query[] = "pp.pp_postas='last'"; $url[] = "pp_postas=last"; } else if ( $pp_postas == 'first' ) { $query[] = "pp.pp_postas='first'"; $url[] = "pp_postas=first"; } } затем в xmlout case 'postas': $_postas = ( $this->ipsclass->input['pp_postas'] == 'last' ) ? 'last' : ( $this->ipsclass->input['pp_postas'] == 'first' ? 'first' : '' ); $this->ipsclass->DB->simple_construct( array( 'select' => 'pp_member_id', 'from' => 'profile_portal', 'where' => "pp_member_id=".$member_id ) ); $this->ipsclass->DB->simple_exec(); if ( $this->ipsclass->DB->get_num_rows() ) { $this->ipsclass->DB->do_update( 'profile_portal', array( 'pp_postas' => $_postas ), 'pp_member_id='.$member_id ); } else { $this->ipsclass->DB->do_insert( 'profile_portal', array( 'pp_postas' => $_postas, 'pp_member_id' => $member_id ) ); } $return_string = $_postas; break;далее в в func_usercp добавил следующие строки $_postas = $this->ipsclass->input['postas'] == 'last' ? 'last' : ( $this->ipsclass->input['postas'] == 'first' ? 'first' : '' );и //----------------------------------------- // Update the DB //----------------------------------------- $this->ipsclass->DB->force_data_type = array( 'title' => 'string' ); $this->ipsclass->DB->do_update( 'members' , $set, 'id='.$this->ipsclass->member['id'] ); $this->ipsclass->DB->do_update( 'member_extra', $bet, 'id='.$this->ipsclass->member['id'] ); $check = $this->ipsclass->DB->build_and_exec_query( array( 'select' => 'pp_member_id', 'from' => 'profile_portal', 'where' => 'pp_member_id=' . $this->ipsclass->member['id'] ) ); if( $check['pp_member_id'] ) { $this->ipsclass->DB->do_update( 'profile_portal', array( 'pp_gender' => $_gender ), 'pp_member_id=' . $this->ipsclass->member['id'] ); } else { $this->ipsclass->DB->do_insert( 'profile_portal', array( 'pp_gender' => $_gender, 'pp_member_id' => $this->ipsclass->member['id'] ) ); } $check = $this->ipsclass->DB->build_and_exec_query( array( 'select' => 'pp_member_id', 'from' => 'profile_portal', 'where' => 'pp_member_id=' . $this->ipsclass->member['id'] ) ); if( $check['pp_member_id'] ) { $this->ipsclass->DB->do_update( 'profile_portal', array( 'pp_postas' => $_postas ), 'pp_member_id=' . $this->ipsclass->member['id'] ); } else { $this->ipsclass->DB->do_insert( 'profile_portal', array( 'pp_postas' => $_postas, 'pp_member_id' => $this->ipsclass->member['id'] ) ); }и в соответсвенно в skin_ucp (личные данные пользователя)->personal_panel добавил <td width="30%" class="row1" style='padding:6px;'>{$this->ipsclass->lang['panel_postas']}</td> <td width="70%" class="row2" style='padding:6px;'><select class='select' name='postas'> <option value='last'<if="$this->ipsclass->member['pp_postas']=='last'"> selected='selected'</if>>{$this->ipsclass->lang['panel_postas_l']}</option> <option value='first'<if="$this->ipsclass->member['pp_postas']=='first'"> selected='selected'</if>>{$this->ipsclass->lang['panel_postas_f']}</option> </select> </td>всё сохраняется добавляется в мускул и даже по ID пользователя но не работает где я ошибся? Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
0 Arhar Опубликовано 16 Апреля 2009 Жалоба Поделиться Опубликовано 16 Апреля 2009 мы же добавляем в profile_portal, а надо создать поле в таблице ibf_members, после чего в class_session.php выбирать это при загрузке мембераа как сделать настройку - можно посмотреть на примере мода репутации, то место, где мы добавляем "уведомлять меня по лс об изменениях репутации" Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
0 Black_Sun Опубликовано 16 Апреля 2009 Автор Жалоба Поделиться Опубликовано 16 Апреля 2009 Перевёл таблицу в ibf_members с полным переписыванием всего вышенаписанного и всё равно не работает, а про "уведомлять меня по лс об изменениях репутации" для меня сложно Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
0 Arhar Опубликовано 16 Апреля 2009 Жалоба Поделиться Опубликовано 16 Апреля 2009 давай по пунктамсоздать поле в таблице мемберс. через утилиту или phpmyadminсделать выборку его значения в class_session Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
0 Black_Sun Опубликовано 16 Апреля 2009 Автор Жалоба Поделиться Опубликовано 16 Апреля 2009 давай по пунктамсоздать поле в таблице мемберс. через утилиту или phpmyadminсделать выборку его значения в class_session1. Есть ALTER TABLE `ibf_members` ADD (pp_postas varchar( 10 ) NOT NULL default ' ');2. Есть добавить после? "$this->ipsclass->DB->build_query( array( 'select' => "id, name, mgroup, member_login_key, member_login_key_e..........", pp_postas Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
0 Arhar Опубликовано 16 Апреля 2009 Жалоба Поделиться Опубликовано 16 Апреля 2009 да, в этом стилепишется туда правильно значение? Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
0 Black_Sun Опубликовано 16 Апреля 2009 Автор Жалоба Поделиться Опубликовано 16 Апреля 2009 угу, всё так как выбирается в настройках Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
0 Arhar Опубликовано 16 Апреля 2009 Жалоба Поделиться Опубликовано 16 Апреля 2009 теперь перед if($this->ipsclass->member['pp_postas']=='last') {сделать print $this->ipsclass->member['pp_postas']; exit; Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
0 Black_Sun Опубликовано 16 Апреля 2009 Автор Жалоба Поделиться Опубликовано 16 Апреля 2009 Выводит last при наводке если в настройках Последний и first если Первый А всё спасибо. Всё работает Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
0 Arhar Опубликовано 16 Апреля 2009 Жалоба Поделиться Опубликовано 16 Апреля 2009 закэшировался результат - надо отправлять header("HTTP/1.0 200 OK"); header("HTTP/1.1 200 OK"); header("Cache-Control: no-cache, must-revalidate, max-age=0"); header("Expires: 0"); header("Pragma: no-cache"); возможно достаточно последних 3, это цитата из xmlout Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
0 Black_Sun Опубликовано 16 Апреля 2009 Автор Жалоба Поделиться Опубликовано 16 Апреля 2009 а это надо куда-то тыкнуть? что-то я не понял к чему и куда это отправлять Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
0 Arhar Опубликовано 17 Апреля 2009 Жалоба Поделиться Опубликовано 17 Апреля 2009 изучай php Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
0 Black_Sun Опубликовано 17 Апреля 2009 Автор Жалоба Поделиться Опубликовано 17 Апреля 2009 кул, теперь после принятия настроек не приходится страницу обновлять надо автору мода передать ещё раз спасибо.Последних трех действительно хватило. Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
Вопрос
Black_Sun
Собсно сабж, помогите поменять тут
что-то чтобы брался не 1 пост, а последний.
Ссылка на комментарий
Поделиться на других сайтах
21 ответ на этот вопрос
Рекомендуемые сообщения
Присоединиться к обсуждению
Вы можете ответить сейчас, а зарегистрироваться позже. Если у вас уже есть аккаунт, войдите, чтобы ответить от своего имени.