Перейти к контенту

Добавление новых "параметров" темы, с возможностью изменения


Рекомендуемые сообщения

Возникла необходимость добавить дополнительный параметр в тему.

в моём случае это необходимость критики выложенной в тему работы.

На самом деле модификация гораздо глубже и при необходимости её можно подстроить под ваши нужды

 

ну поскольку в моём случае мне нужна была критика на форуме все переменные так и называются 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 }

Изменено пользователем Vilz
Ссылка на комментарий
Поделиться на других сайтах

Вполне возможно. Особенно если вы опишите, как создавать не только поля "флажки", но и другие типы :D

 

Либо могу разделить этот пост или перенести всю тему в Tips'n'tricks.

Ссылка на комментарий
Поделиться на других сайтах

не надо ко мне на "вы"...

в типс энд трикс наверное самое правильное ... на полноценный мод это никак не тянет

другие типы могу описать без проблем

 

разница то по сути только в шаблонной части ...

Изменено пользователем Vilz
Ссылка на комментарий
Поделиться на других сайтах

Многим начинающим будет полезно :D
Ссылка на комментарий
Поделиться на других сайтах

  • 11 месяцев спустя...
Покурить IPB HTML Logic или условия в PHP поставить. А лучше заглянуть в архив и найти там мод "Релиз-мастер".
Ссылка на комментарий
Поделиться на других сайтах

Присоединиться к обсуждению

Вы можете ответить сейчас, а зарегистрироваться позже. Если у вас уже есть аккаунт, войдите, чтобы ответить от своего имени.

Гость
Ответить в этой теме...

×   Вы вставили отформатированный текст.   Удалить форматирование

  Допустимо не более 75 смайлов.

×   Ваша ссылка была автоматически заменена на медиа-контент.   Отображать как ссылку

×   Ваши публикации восстановлены.   Очистить редактор

×   Вы не можете вставить изображения напрямую. Загрузите или вставьте изображения по ссылке.

Зарузка...
×
×
  • Создать...

Важная информация

Находясь на нашем сайте, вы соглашаетесь на использование файлов cookie, а также с нашим положением о конфиденциальности Политика конфиденциальности и пользовательским соглашением Условия использования.