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

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


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

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

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

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

 

ну поскольку в моём случае мне нужна была критика на форуме все переменные так и называются 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 поставить. А лучше заглянуть в архив и найти там мод "Релиз-мастер".
Ссылка на комментарий
Поделиться на других сайтах

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

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

Гость
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Ответить в этой теме...

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

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

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

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

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

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

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

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