Vilz Опубликовано 4 Марта 2008 Жалоба Поделиться Опубликовано 4 Марта 2008 (изменено) Возникла необходимость добавить дополнительный параметр в тему.в моём случае это необходимость критики выложенной в тему работы.На самом деле модификация гораздо глубже и при необходимости её можно подстроить под ваши нужды ну поскольку в моём случае мне нужна была критика на форуме все переменные так и называются critic, их можно сменить на любые другие (поиск, найти и заменить всё), какие вам захочется и впринципе просто меняя имя переменной добавлять другие параметры Шаг 1 База данныхдобавим новую ячейку в базу // ACP - Прочее - Управление SQL - Инструменты - выполнить запросы (внизу страницы) ALTER TABLE `ibf_topics` ADD `critic` TINYINT( 1 ) DEFAULT '0'; ALTER TABLE - в конец таблицы `ibf_topics` поле `critic` типа TINYINT разрядностью в 1 символ, стандартное значение 0 в зависимости от типа данных, которые вы будете добавлять параметр тип TINYINT может менять на любой другойнапример для текста нужен тип TEXT /*запросы можно делать через phpMyAdmin, там все параметры можно выбрать из списков*/ Шаг 2 Изменения в шаблонах // ACP - внешний вид - ваши скины - изменить html шаблоны Начнём с добавления нового шаблона //2.1//skin post - добавить шаблон//**********************************имя шаблона: criticвходящие переменные: $data="" содержание шаблона:<tr> <td colspan='2' align='center' class='bg1'> <div style='width:100%;' align='center' class='borderwrap'> <table cellpadding='0' cellspacing='0' width='100%' class='darkrow3'> <tr><td align="right" width='20%'>Критика:</td> <td align="left" width='80%'> <input type="radio" class="radiobutton" name="critic" value="1" <if="$data['CRITIC'] < 2">checked="checked"</if> />- требуется <input type="radio" class="radiobutton" name="critic" <if="$data['CRITIC'] > 1">checked="checked"</if> value="2" />- не требуется </td> </tr> </table> </div></td></tr> в этом куске у нас определяется внешний вид того как будут выглядеть дополнительный параметрв моём случае это "радио баттн" из списка всего списка с общим именем можно выбрать какой-то один <input type="radio" class="radiobutton" name="critic" value="1" <if="$data['CRITIC'] < 2">checked="checked"</if> />- требуется <input type="radio" class="radiobutton" name="critic" <if="{$data['CRITIC'] > 1">checked="checked"</if> value="2" />- не требуется он может быть текстом<input type="text" size="50" maxlength="70" name="critic" value="{$data['CRITIC']}" tabindex="3" /> /*при моём запросе в этом поле могут быть только цифры*/ или флажком<input type="checkbox" size="40" value="1" name="critic" class="checkbox" /> Критика не требуется или любой другой формой тега <input > после добавления такой формы в код форума будет посылаться переменная name="" со значением value=""там мы с можем делать с ней всё что угодно 2.2 добавим наш шаблон в структуру ответа //skin post -> table_structure <!--FORUM RULES--><br /> <!--START TABLE--> <!--NAME FIELDS--> <!--TOPIC TITLE--> <!--CRITIC--> <!--POLL BOX--> <!--POST BOX--> <!--MOD OPTIONS--> <!--POST ICONS--> <!--END TABLE--> это порядок того как располагаются наши шаблоны в форме "полного ответа"я добавил свой шаблон <!--CRITIC--> сразу за заголовками 2.3 добавим дополнительный параметр в список форумов // skin_forum -> render_forum_row // Найти заголовок и описание темы, мне было удобно написать это чуть ниже описания темы<div class="desc"><span onclick='return span_desc_to_input("{$data['tid']}");' id='tid-desc-{$data['tid']}'>{$data['description']} </span></div>// Добавить ниже <div class="lastaction"> <if="$data['critic'] == 1">Критика требуется</if> <if="$data['critic'] == 2">Критика не требуется</if> </div>в базу для экономии я заносил цифру, в шаблоне условие, если 1 то пишем такое, если 2 - другое, можно добавить сколько угодно вариантов или выводить само значение $data['critic'] 2.3 добавим дополнительный параметр в заголовок темы // skin_topic -> topic_page_top // Найти <td width='99%' style='word-wrap:break-word;'><div><{CAT_IMG}> <b>{$data['TOPIC']['title']}</b>{$data['TOPIC']['description']} // Добавить ниже<if="$data['TOPIC']['critic'] == 1"> <b>Критика требуется</b></if> <if="$data['TOPIC']['critic'] == 2"> <b>Критика не требуется</b></if> смысл абсолютно такой же как выше, только переменная тут берется из массива иначе $data['TOPIC']['critic']как она берется можно выяснить по аналогии с рядом лежащими переменными Шаг 3 Изменения в файлахвсе изменения в оригинальном коде я огораживаю коментариями приметными, а те строчки, в которых что-то меняю дублирую и коментирую целиком, что бы потом можно было обратить изменения без использования бэкапа ... да и написать инструкцию так значительно прощенаписание нового поста //3.1 sources/classes/post/class_post_new.php берем наше значение из массива $_POST, в котором лежат все значения формы отправки по именам // Найти //----------------------------------------- // Build the master array //----------------------------------------- // Добавить выше //Vilz's critic { $critic = $_POST['critic']; //Vilz's critic } добавляем в ячейку 'critic' значение из переменной $critic // Найти 'topic_close_time' => intval( $this->times['close'] ), // Добавить ниже //Vilz's critic { 'critic' => $critic, //Vilz's critic }дальше нам надо сделать, что бы шаблон, который мы добавили в админцентре показывался при написании нового постапо аналогии с остальными элементами формы обозначаем переменной шаблон // Найти //----------------------------------------- // START TABLE //----------------------------------------- // Добавить ниже // Vilz's critic { $topic_critic = $this->ipsclass->compiled_templates['skin_post']->critic(); // Vilz's critic } добавляем значение для замены в структуру формы ответа // Найти $this->output = str_replace( "<!--TOPIC TITLE-->" , $topic_title , $this->output ); // Добавить ниже // Vilz's critic { $this->output = str_replace( "<!--CRITIC-->" , $topic_critic , $this->output ); // Vilz's critic } //3.2 sources/classes/post/class_post_edit.php редактирование поста Если значение нашего параметра изменилось, вносим новые данные в базу //найти //----------------------------------------- // If the post icon has changed, update the topic post icon //-----------------------------------------//выше // Vilz's critic { if ( $this->orig_post['new_topic'] == 1 ) { if ($this->ipsclass->input['critic'] != $this->topic['critic']) { $this->ipsclass->DB->do_update( 'topics', array( 'critic' => $_POST['critic'] ),'tid='.$this->topic['tid']); } } // Vilz's critic } дальше тоже самое что мы делали в новом посте с двумя отличиямипоказывать изменения только если мы редактируем первый пост темы, соответственно добавляем инициализацию рядом с заголовками //найти //----------------------------------------- // Is this the first post in the topic? //----------------------------------------- $topic_title = ""; $topic_desc = "";//ниже // Vilz's critic { $topic_critic =""; // Vilz's critic } и еще нам надо передать старое значение, что бы видно было, что на что мы меняем //найти $topic_title = $this->ipsclass->compiled_templates['skin_post']->topictitle_fields( array( 'TITLE' => $topic_title, 'DESC' => $topic_desc ) );//ниже // Vilz's critic { $topic_critic = $this->ipsclass->compiled_templates['skin_post']->critic( array( 'CRITIC' => $this->topic['critic'], ) ); // Vilz's critic }//найти $this->output = str_replace( "<!--TOPIC TITLE-->" , $topic_title , $this->output );//ниже // Vilz's critic { $this->output = str_replace( "<!--CRITIC-->" , $topic_critic , $this->output ); // Vilz's critic } Изменено 4 Марта 2008 пользователем Vilz Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
Sannis Опубликовано 4 Марта 2008 Жалоба Поделиться Опубликовано 4 Марта 2008 Вполне возможно. Особенно если вы опишите, как создавать не только поля "флажки", но и другие типы Либо могу разделить этот пост или перенести всю тему в Tips'n'tricks. Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
Vilz Опубликовано 4 Марта 2008 Автор Жалоба Поделиться Опубликовано 4 Марта 2008 (изменено) не надо ко мне на "вы"... в типс энд трикс наверное самое правильное ... на полноценный мод это никак не тянетдругие типы могу описать без проблем разница то по сути только в шаблонной части ... Изменено 4 Марта 2008 пользователем Vilz Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
Vilz Опубликовано 4 Марта 2008 Автор Жалоба Поделиться Опубликовано 4 Марта 2008 переделал первый пост в описание с коментами ... может и правда пригодится кому Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
Sannis Опубликовано 4 Марта 2008 Жалоба Поделиться Опубликовано 4 Марта 2008 Многим начинающим будет полезно Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
DerSpinner Опубликовано 7 Марта 2008 Жалоба Поделиться Опубликовано 7 Марта 2008 примерно понял, что это=)но можно пример (скриншот) ?=)думаю всем будет понятно=) Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
Vilz Опубликовано 7 Марта 2008 Автор Жалоба Поделиться Опубликовано 7 Марта 2008 скриншот Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
KveSteR Опубликовано 25 Февраля 2009 Жалоба Поделиться Опубликовано 25 Февраля 2009 А как реализовать это, что бы эти кнокпи выводились в конкретном разделе? Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
Sannis Опубликовано 25 Февраля 2009 Жалоба Поделиться Опубликовано 25 Февраля 2009 Покурить IPB HTML Logic или условия в PHP поставить. А лучше заглянуть в архив и найти там мод "Релиз-мастер". Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
Рекомендуемые сообщения
Присоединиться к обсуждению
Вы можете ответить сейчас, а зарегистрироваться позже. Если у вас уже есть аккаунт, войдите, чтобы ответить от своего имени.