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

[2.1.x]Менеджер Категорий Смайлов


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

  • Ответы 130
  • Создана
  • Последний ответ

Лучшие авторы в этой теме

Лучшие авторы в этой теме

  • 1 месяц спустя...

У меня сейчас 2.2.2, но я помню когда ставил этот мод еще на 2.1.7 и вполне был им доволен...

Можно самим попробовать поковырять и переделать под 2.2.x ))

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

  • 2 месяца спустя...

Ничего не менял и не переделывал. Сегодня стала появляться ошибка. Форум на мастерхосте.

 

При нажатии на "Показать все" в окне смайлов. Выдает пустое окно с ниже приведенной информацией.

 

Not Found

The requested URL /forums/java script:emo_pop() was not found on this server.

 

Подскажите люди добрые :D Форум 2.1.3

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

  • 8 месяцев спустя...

на данный момент категории выводятся.

смайлы вставляются

 

короче, мод будет под 23х в скором времени.

 

или не будет ))))

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

Костыли для версии 2.3.х.

 

комментарий: категории смайлов выводятся в форме быстрого ответа. в форме полного ответа не выводятся. (связано с передачей идентификатора формы ответа.) я не стал ломать структуру форума и делать обе формы с одним именем.

далее... из-за уе*анской системы папок смайлов, реализованной в версии 2.3.х будете иметь редкий геморой на свою задницу с добавлением этих самых категорий (точнее, с сортировкой по категориям).

из всех авторских примочек остался только вывод категорий. размеры окна в админке не настраиваются. почему - хз, мне было влом разбираться :D

 

Итак, если вас это все не пугает, поехали:

 

1. SQL Запросы

 

Перейдите в Управление SQL - > Утилита (или phpMyAdmin->SQL) и запустите запросы:

(Примечание: Если у вас префикс таблиц отличается от ibf_, замените его на соответствущий в запросах)

1.1.

CREATE TABLE `ibf_emo_categories` (
`id` INT( 2 ) NOT NULL AUTO_INCREMENT ,
`name` VARCHAR( 30 ) NOT NULL ,
`dir` VARCHAR( 30 ) NOT NULL ,
`groups` TEXT NOT NULL ,
`active` TEXT NOT NULL ,
`inactive` TEXT NOT NULL ,
PRIMARY KEY ( `id` ) );

1.2.

CREATE TABLE ibf_emo_options (
id INT( 2 ) NOT NULL ,
name VARCHAR( 20 ) NOT NULL ,
value INT( 4 ) NOT NULL ,
PRIMARY KEY (id) );

1.3. Запустите один за одним запросы:

INSERT INTO `ibf_emo_options` VALUES (1, 'W_Width', '250');

INSERT INTO `ibf_emo_options` VALUES (2, 'W_Height', '500');

INSERT INTO `ibf_emo_options` VALUES (3, 'emo_in_row', '6');

INSERT INTO `ibf_emo_options` VALUES (4, 'show_codes', '0');

INSERT INTO `ibf_emo_options` VALUES (5, 'enabled', '1');

 

2. Редактирование ШАБЛОНОВ

 

Перейдите ВНЕШНИЙ ВИД -> Изменить HTML фрагменты -> skin_legends (Легенды форума) (он же Board Legends)

 

2.1 Отредактировать ШАБЛОН "emoticons_row"

 

Отредактировать входящие переменные:

-----------------------------------

ДОБАВИТЬ В КОНЦЕ СТРОКИ

    function show_emoticons()
        {
               $tid = intval( $this->ipsclass->input['t'] );
               $this->page_title = $this->ipsclass->lang['emo_title'];
                $smilie_id        = 0;
                 $editor_id        = $this->ipsclass->txt_alphanumerical_clean( $this->ipsclass->input['editor_id'] );
                $cat_count = 0;

               $this->ipsclass->DB->simple_construct( array( 'select' => '*',
                                                                                                                         'from'   => 'topics',
                                                                                                                         'where'  => "tid=".$tid,
                                                                                                       )      );
               $this->ipsclass->DB->simple_exec();
               $topic = $this->ipsclass->DB->fetch_row();
                $this->output .= $this->ipsclass->compiled_templates['skin_legends']->emoticon_javascript( $editor_id );


               $this->output .= $this->ipsclass->compiled_templates['skin_legends']->emo_categories_top($this->ipsclass->lang['cat_title']);

         $this->ipsclass->DB->simple_construct(array('select' => '*', 'from' => 'emo_categories'));
               $this->ipsclass->DB->simple_exec();

               if ( $this->ipsclass->DB->get_num_rows() )
               {
                       while ( $r = $this->ipsclass->DB->fetch_row() )
                       {
                          $checkA='true';
                          $checkInactive='true';
                          $checkGroups='true';

                          // ------------------------------------------------------------
                          // ---------- Checking INactive Topics and Folders ------------
                          if ($r[inactive]!="")
                          {
                                  $inactives=explode(",",trim($r[inactive]));

                                  for ($k=0;$k<count($inactives);$k++)
                                  $inactives[$k]=trim($inactives[$k]);

                                  if (in_array($this->ipsclass->cache['forum_cache'][ $this->ipsclass->input['f'] ][ 'name' ],$inactives) OR
                                in_array(trim($topic['title']),$inactives))
                                  $checkInactive='false';
                                  else $checkInactive='true';
                          }
                          else $checkInactive='true';

       // ------------------------------------------------------------
                          // ------------ Checking Active Topics and Folders ------------
                          if ($r[active]!="")
                          {
                                  $actives=explode(",",trim($r[active]));

                                  for ($k=0;$k<count($actives);$k++)
                                  $actives[$k]=trim($actives[$k]);

                                  if (in_array($this->ipsclass->cache['forum_cache'][ $this->ipsclass->input['f'] ][ 'name' ],$actives) OR
                                in_array(trim($topic['title']),$actives))
                                  $checkA='true';
                          else $checkA='false';
                          }
                          else $checkA='true';

                          // ------------------------------------------------------------
                          // ------------ Checking Groups Access -------------------------
                          if ($r[groups]!="")
                          {
                                 $groupes=explode(",",trim($r[groups]));
                            $mgroups = explode( ",", trim($this->ipsclass->member['mgroup_others']) );

                                  $mgroups[]=trim($this->ipsclass->member['mgroup']);

                                  $CheckCount=0;

                                  for ($k=0;$k<count($groupes);$k++)
                                    for ($j=0;$j<count($mgroups);$j++)
                                      if (trim($groupes[$k])==$this->ipsclass->cache['group_cache'][ trim($mgroups[$j]) ]['g_title'] and trim($groupes[$k]!=""))
                                                          $CheckCount++;

                                  if ($CheckCount>0)
                                    $checkGroups='true';
                            else $checkGroups='false';
                          }
                          else $checkGroups='true';


                          if ($checkInactive=='true' AND $checkA=='true' AND $checkGroups=='true')
                          {
                                  $cat_count++;
                                 if ($this->ipsclass->input['category']==NULL)
                                   $this->ipsclass->input['category']=$r[id];

                                  if ($this->ipsclass->input['category']==$r[id])
                                       {
                                               $r2='<b>'.$r[name].'</b>';
                                               $cat_dir=$r[dir];
                                       }
                            else $r2=$r[name];

                            $this->output .= $this->ipsclass->compiled_templates['skin_legends']->emo_categories_row($r[id],$r2,$this->ipsclass->input['f'],$tid);
                          }
                       }
               }

               if($cat_count==0)
                 $this->output .= $this->ipsclass->compiled_templates['skin_legends']->emo_categories_row(0,$this->ipsclass->lang['cat_no_active']);

         $this->output .= $this->ipsclass->compiled_templates['skin_legends']->emo_categories_end();

                $this->output .= $this->ipsclass->compiled_templates['skin_legends']->page_header( $this->ipsclass->lang['emo_title'], $this->ipsclass->lang['emo_type'], $this->ipsclass->lang['emo_img']);

                       $emo_opts=array();
                       $this->ipsclass->DB->simple_select( '*', 'emo_options');
                        $this->ipsclass->DB->exec_query();
                       while( $row = $this->ipsclass->DB->fetch_row() )
                       {
                                 $emo_opts[$row['name']]=$row['value'];
                       }

                $this->ipsclass->DB->simple_construct( array( 'select' => 'typed, image', 'from' => 'emoticons', 'where' => "emo_set='".$cat_dir."'" ) );
               $this->ipsclass->DB->simple_exec();

               if ( $this->ipsclass->DB->get_num_rows() )
               {
                       while ( $r = $this->ipsclass->DB->fetch_row() )
                       {
                               $num_in_row=$emo_opts['emo_in_row'];

                               if ( $smilie_id%$num_in_row == 0)
                                       $this->output .= $this->ipsclass->compiled_templates['skin_legends']->emoticons_row_top();

                               $smilie_id++;

                               if (strstr( $r['typed'], """ ) )
                               {
                                       $in_delim  = "'";
                                       $out_delim = '"';
                               }
                               else
                               {
                                       $in_delim  = '"';
                                       $out_delim = "'";
                               }

                   if ($emo_opts['show_codes'])
                $this->output .= $this->ipsclass->compiled_templates['skin_legends']->emoticons_row_code( stripslashes($r['typed']), $in_delim, $out_delim, $smilie_id );

                               $this->output .= $this->ipsclass->compiled_templates['skin_legends']->emoticons_row( stripslashes($r['typed']), stripslashes($r['image']), $in_delim, $out_delim, $smilie_id,$cat_dir );

                               if ( $smilie_id%$num_in_row == 0)
                                       $this->output .= $this->ipsclass->compiled_templates['skin_legends']->emoticons_row_end();

                       }
               }

               $this->output .= $this->ipsclass->compiled_templates['skin_legends']->page_footer();
        }

 

4.2 ОТКРЫТЬ sources/acp_loaders/acp_pages_lookandfeel.php

----------------------------------------------------------------------------------------------------------------------------------

НАЙТИ

    function emo_cat_manage()
{
$emodirs = array();
$emodirs2 = array( 0 => array("",""));

$dh = opendir( CACHE_PATH.'style_emoticons' );

while ( $file = readdir( $dh ) )
      if (($file != ".") && ($file != ".."))
	if ( is_dir(CACHE_PATH.'style_emoticons/'.$file) )
	{
		$emodirs[] = array($file,$file);
		$emodirs2[] = array($file,$file);
	}

closedir( $dh );


$this->ipsclass->admin->page_title = "Категории Смайлов";
$this->ipsclass->admin->page_detail = "Настройки Категорий";
$this->ipsclass->adskin->td_header[] = array( "" , "1%" );
$this->ipsclass->adskin->td_header[] = array( "Название Категории" , "15%" );
$this->ipsclass->adskin->td_header[] = array( "Связанная папка" , "15%" );
$this->ipsclass->adskin->td_header[] = array( "Доступно группам" , "15%" );
$this->ipsclass->adskin->td_header[] = array( "Активна в Форумах и/или темах" , "20%" );
$this->ipsclass->adskin->td_header[] = array( "НЕактивна в Форумах и/или темах" , "20%" );

$this->ipsclass->html .= $this->ipsclass->adskin->start_table( "Существующие категории");

if ($this->ipsclass->input['new_emo_cat_name'] != "" and $this->ipsclass->input['new_emo_cat_dir'] != "" and $this->ipsclass->input['operation']==1 ) 
{
	$this->ipsclass->DB->do_insert( 'emo_categories', array( 'name' => $this->ipsclass->input['new_emo_cat_name'], 'dir' => $this->ipsclass->input['new_emo_cat_dir'], 'active' => $this->ipsclass->input['new_emo_cat_active'], 'inactive' => $this->ipsclass->input['new_emo_cat_inactive'] ) );
} 

if ($this->ipsclass->input['delete_emo_cat_name'] != "" and $this->ipsclass->input['operation']==0 ) 
{
	$this->ipsclass->DB->simple_exec_query( array( 'delete' => 'emo_categories', 'where' => "name='".$this->ipsclass->input['delete_emo_cat_name']."'" ) );
}
if ($this->ipsclass->input['modify_emo_cat_dir'] != "" and $this->ipsclass->input['operation']==2 )
{
  $this->ipsclass->DB->simple_exec_query( array( 'update' => 'emo_categories', 'set' => "`dir`='".$this->ipsclass->input['modify_emo_cat_dir']."'" , 'where' => "`name`='".$this->ipsclass->input['chosen_emo_cat_name']."'" ) );
 }
if ($this->ipsclass->input['operation']==2 )
{
 $this->ipsclass->DB->do_update( 'emo_categories', array( 'name' => $this->ipsclass->input['modify_emo_cat_name'],'groups' => $this->ipsclass->input['modify_emo_cat_groups'],
                          'active' => $this->ipsclass->input['modify_emo_cat_active'],'inactive' => $this->ipsclass->input['modify_emo_cat_inactive']), "name='".$this->ipsclass->input['chosen_emo_cat_name']."'" );
 }  

$cat_info = array();
$cat_names = array();

$this->ipsclass->DB->simple_select( '*', 'emo_categories');
$this->ipsclass->DB->exec_query();

while( $row = $this->ipsclass->DB->fetch_row() )
{
			$cat_info['id'][] = $row['id'];		
			$cat_info['name'][] = $row['name'];
			$cat_info['dir'][] = $row['dir'];
			$cat_info['active'][] = $row['active'];
			$cat_info['inactive'][] = $row['inactive'];
			$cat_info['groups'][] = $row['groups'];
			$cat_names[] = array($row[name],$row[name]);

}

if ($this->ipsclass->input['operation']==8 AND $this->ipsclass->input['values']>0)
{
	$value=$this->ipsclass->input['values'];

	$cats = array();
	foreach($cat_info as $key => $v)
	{
		$cats[$key]=$cat_info[$key][$value];
		$cat_info[$key][$value]=$cat_info[$key][$value-1];
		$cat_info[$key][$value-1]=$cats[$key];
	}
 $this->ipsclass->DB->do_update( 'emo_categories',array( 'name' => $cats['name'],'dir' => $cats['dir'],'groups' => $cats['groups'],
                          'active' => $cats['active'],'inactive' => $cats['inactive']), "id='".$cat_info['id'][$value]."'" );
 $this->ipsclass->DB->do_update( 'emo_categories', array( 'name' => $cat_info['name'][$value],'dir' => $cat_info['dir'][$value],'groups' => $cat_info['groups'][$value],
                          'active' => $cat_info['active'][$value],'inactive' => $cat_info['inactive'][$value]), "id='".$cat_info['id'][$value-1]."'" );

}

	if ($this->ipsclass->input['operation']==9 AND $this->ipsclass->input['values']<count($cat_info['name'])-1)
{
	$value=$this->ipsclass->input['values'];

	$cats = array();
	foreach($cat_info as $key => $v)          
	{
		$cats[$key]=$cat_info[$key][$value];
		$cat_info[$key][$value]=$cat_info[$key][$value+1];
		$cat_info[$key][$value+1]=$cats[$key];
	}
 $this->ipsclass->DB->do_update( 'emo_categories',array( 'name' => $cats['name'],'dir' => $cats['dir'],'groups' => $cats['groups'],
                          'active' => $cats['active'],'inactive' => $cats['inactive']), "id='".$cat_info['id'][$value]."'" );
 $this->ipsclass->DB->do_update( 'emo_categories', array( 'name' => $cat_info['name'][$value],'dir' => $cat_info['dir'][$value],'groups' => $cat_info['groups'][$value],
                          'active' => $cat_info['active'][$value],'inactive' => $cat_info['inactive'][$value]), "id='".$cat_info['id'][$value+1]."'" );
}


for ($i=0;$i<count($cat_info['inactive']);$i++)
{
$this->ipsclass->html .= $this->ipsclass->adskin->add_td_row( array(
      "<a href='{$this->ipsclass->base_url}&{$this->ipsclass->form_code}&code=emo_cat&operation=8&values=".$i."'><img src='{$this->ipsclass->skin_acp_url}/images/arrow_up.png' border='0' class='ipd' /></a><br>
       <a href='{$this->ipsclass->base_url}&{$this->ipsclass->form_code}&code=emo_cat&operation=9&values=".$i."'><img src='{$this->ipsclass->skin_acp_url}/images/arrow_down.png' border='0' class='ipd' /></a><br>
      ",
    $cat_info["name"][$i],$cat_info["dir"][$i],$cat_info["groups"][$i],$cat_info["active"][$i],$cat_info["inactive"][$i]));}


$this->ipsclass->html .= $this->ipsclass->adskin->end_table();


$this->ipsclass->html .= $this->ipsclass->adskin->start_form( array( 
		1 => array( 'code' , 'emo_cat' ),
		2 => array( 'act' , 'emoticons' ),
		4 => array( 'section', $this->ipsclass->section_code ),
		5 => array( 'operation', 1 ),
		 ) );

		$this->ipsclass->html .= $this->ipsclass->adskin->start_table( "Добавить категорию" );

		$this->ipsclass->adskin->td_header[] = array( " " , "50%" );
  	$this->ipsclass->adskin->td_header[] = array( " " , "50%" );

		$this->ipsclass->html .= $this->ipsclass->adskin->add_td_row( array(
															  "<b>Введите название категории</b><div style='color:gray'>Можно вводить на любом языке</div>",
															  $this->ipsclass->adskin->form_input( 'new_emo_cat_name' )
													   )      );
		$this->ipsclass->html .= $this->ipsclass->adskin->add_td_row( array(
															  "<b>Связать с существующей папкой со смайлами</b><div style='color:gray'>Примечение: Разные категории не должны иметь одинаковые связанные папки</div>",
															  $this->ipsclass->adskin->form_dropdown( 'new_emo_cat_dir', $emodirs )
													   )      );			
		$this->ipsclass->html .= $this->ipsclass->adskin->add_td_row( array(
															  "<b>Введите группы, которым будет доступна эта категория</b><div style='color:gray'>Разделяйте несколько запятыми.<br> Оставить чистым для общего доступа</div>",
															  $this->ipsclass->adskin->form_input( 'new_emo_cat_groups')
													   )      );		
		$this->ipsclass->html .= $this->ipsclass->adskin->add_td_row( array(
															  "<b>Введите названия форумов и/или темах, где категория будет доступной</b><div style='color:gray'>Если введено, категория будет доступна только в указанных форумах и/или темах. Вы можете смешивать названия форумов и тем.<br> Разделяйте несколько запятыми.<br> Оставить чистым для полного доступа.</div>",
															  $this->ipsclass->adskin->form_input( 'new_emo_cat_active')
													   )      );		
		$this->ipsclass->html .= $this->ipsclass->adskin->add_td_row( array(
															  "<b>Введите названия форумов и/или темах, где категория будет неактивна</b><div style='color:gray'>Если введено, категория будет доступна везде, кроме указанных форумом и/или тем. Вы можете смешивать названия форумов и тем.<br> Разделяйте несколько запятыми.<br> Оставить чистым для полного доступа.</div>",


															  $this->ipsclass->adskin->form_input( 'new_emo_cat_inactive' )
													   )      );		
		$this->ipsclass->html .= $this->ipsclass->adskin->end_form("Добавить категорию");

		$this->ipsclass->html .= $this->ipsclass->adskin->end_table();


		$this->ipsclass->html .= $this->ipsclass->adskin->start_form( array( 
		1 => array( 'code' , 'emo_cat' ),
		2 => array( 'act' , 'emoticons' ),
		4 => array( 'section', $this->ipsclass->section_code ),
		5 => array( 'operation', 2 ),
		 ) );

		$this->ipsclass->html .= $this->ipsclass->adskin->start_table( "Изменить категорию" );

		$this->ipsclass->adskin->td_header[] = array( " " , "50%" );
    $this->ipsclass->adskin->td_header[] = array( " " , "50%" );


	$this->ipsclass->html .=
	"<script type='text/javascript'>

	 	function update(n,m,k,g)
	 	{
      var s1 = n.split('-?|-');
		 var s2 = m.split('-?|-');
		 var s3 = k.split('-?|-');
		 var s4 = g.split('-?|-');

			document.forms[1].modify_emo_cat_active.value = s1[document.forms[1].chosen_emo_cat_name.selectedIndex];
			document.forms[1].modify_emo_cat_inactive.value = s2[document.forms[1].chosen_emo_cat_name.selectedIndex];
			document.forms[1].modify_emo_cat_name.value = s3[document.forms[1].chosen_emo_cat_name.selectedIndex];
			document.forms[1].modify_emo_cat_groups.value = s4[document.forms[1].chosen_emo_cat_name.selectedIndex];
		}
	</script>
	";

	if ($cat_info['active']!="")
    $n = implode("-?|-", $cat_info['active']);
 	if ($cat_info['inactive']!="")
		$m = implode("-?|-", $cat_info['inactive']);
	if ($cat_info['name']!="")
		$k = implode("-?|-", $cat_info['name']);
	if ($cat_info['groups']!="")
		$g = implode("-?|-", $cat_info['groups']);

		$this->ipsclass->html .= $this->ipsclass->adskin->add_td_row( array(
															  "<b>Выберите название категории, которую вы хотите изменить</b>",
															  $this->ipsclass->adskin->form_dropdown( 'chosen_emo_cat_name', $cat_names,1,'onchange="update('."'$n','$m','$k','$g'".')"')
													   )      );
		$this->ipsclass->html .= $this->ipsclass->adskin->add_td_row( array(
															  "<b>Имя категории</b>",
															  $this->ipsclass->adskin->form_input( 'modify_emo_cat_name',$cat_info['name'][0] )
													   )      );	
		$this->ipsclass->html .= $this->ipsclass->adskin->add_td_row( array(
															  "<b>Доступ группам</b><div style='color:gray'>Если вы оставите поле пустым, категория будет доступна всем</div>",
															  $this->ipsclass->adskin->form_input( 'modify_emo_cat_groups',$cat_info['groups'][0])
													   )      );	
		$this->ipsclass->html .= $this->ipsclass->adskin->add_td_row( array(
															  "<b>Активные Форумы и Темы</b><div style='color:gray'>Если вы оставите поле пустым, категория будет доступна везде.</div>",
															  $this->ipsclass->adskin->form_input( 'modify_emo_cat_active',$cat_info['active'][0])
													   )      );	
		$this->ipsclass->html .= $this->ipsclass->adskin->add_td_row( array(
															  "<b>НЕактивные Форумы и Темы</b><div style='color:gray'>Если вы оставите поле пустым, категория будет доступна везде.</div>",
															  $this->ipsclass->adskin->form_input( 'modify_emo_cat_inactive',$cat_info['inactive'][0] )
													   )      );															   
		$this->ipsclass->html .= $this->ipsclass->adskin->add_td_row( array(
															  "<b>Связать с другой папкой смайлов</b>",
															  $this->ipsclass->adskin->form_dropdown( 'modify_emo_cat_dir', $emodirs2 )
													   )      );													   


		$this->ipsclass->html .= $this->ipsclass->adskin->end_form("Сохранить");

		$this->ipsclass->html .= $this->ipsclass->adskin->end_table();




		$this->ipsclass->html .= $this->ipsclass->adskin->start_form( array( 
		1 => array( 'code' , 'emo_cat' ),
		2 => array( 'act' , 'emoticons' ),
		4 => array( 'section', $this->ipsclass->section_code ),
		5 => array( 'operation', 0 ),
		 ) );

		$this->ipsclass->html .= $this->ipsclass->adskin->start_table( "Удалить категорию" );

	$this->ipsclass->adskin->td_header[] = array( " " , "50%" );
	$this->ipsclass->adskin->td_header[] = array( " " , "50%" );

		$this->ipsclass->html .= $this->ipsclass->adskin->add_td_row( array(
															  "<b>Выберите имя категории для удаления</b>",
															  $this->ipsclass->adskin->form_dropdown( 'delete_emo_cat_name', $cat_names )
													   )      );

		$this->ipsclass->html .= $this->ipsclass->adskin->end_form("Удалить");

		$this->ipsclass->html .= $this->ipsclass->adskin->end_table();


// This modification is free to use only if you leave next text without changings!
	$this->ipsclass->html .= "<div align=center>Emoticons Category Managment v1.01, Created by Kostik.</div>";

	$this->ipsclass->admin->output(); 
}
//----------------------------------------------------------------------------
// -----  Emoticons Categories Managment. Created by Kostik. --------------------
//----------------------------------------------------------------------------

function emo_options()
{
 $this->ipsclass->admin->page_title = "Настройка окна смайлов";
$this->ipsclass->admin->page_detail = "Определение размеров и содержания окна";

if ($this->ipsclass->input['W_Width'] != "" and $this->ipsclass->input['operation']==3 ) 
{
	 $this->ipsclass->DB->simple_exec_query( array( 'update' => 'emo_options', 'set' => "`value`='".$this->ipsclass->input['W_Width']."'" , 'where' => "`name`='W_Width'" ) );
 }	
if ($this->ipsclass->input['W_Height'] != "" and $this->ipsclass->input['operation']==3 ) 
{
	 $this->ipsclass->DB->simple_exec_query( array( 'update' => 'emo_options', 'set' => "`value`='".$this->ipsclass->input['W_Height']."'" , 'where' => "`name`='W_Height'" ) );
 }
if ($this->ipsclass->input['emo_in_row'] != "" and $this->ipsclass->input['operation']==3 ) 
{
	 $this->ipsclass->DB->simple_exec_query( array( 'update' => 'emo_options', 'set' => "`value`='".$this->ipsclass->input['emo_in_row']."'" , 'where' => "`name`='emo_in_row'" ) );
 }  	
if ($this->ipsclass->input['show_codes'] != "" and $this->ipsclass->input['operation']==3 ) 
{
	 $this->ipsclass->DB->simple_exec_query( array( 'update' => 'emo_options', 'set' => "`value`='".$this->ipsclass->input['show_codes']."'" , 'where' => "`name`='show_codes'" ) );
 }  
		$this->ipsclass->html .= $this->ipsclass->adskin->start_form( array( 
		1 => array( 'code' , 'emo_options' ),
		2 => array( 'act' , 'emoticons' ),
		4 => array( 'section', $this->ipsclass->section_code ),
		5 => array( 'operation', 3 ),
		 ) );

  	$emo_opts=array();
		$this->ipsclass->DB->simple_select( '*', 'emo_options');
			$this->ipsclass->DB->exec_query();
		while( $row = $this->ipsclass->DB->fetch_row() )
		{
			  $emo_opts[$row['name']]=$row['value'];
		}

	$this->ipsclass->html .= $this->ipsclass->adskin->start_table( "Настройка окна смайлов" );

	$this->ipsclass->adskin->td_header[] = array( " " , "30%" );
	$this->ipsclass->adskin->td_header[] = array( " " , "70%" );

	$this->ipsclass->html .= $this->ipsclass->adskin->add_td_row( array(
																  "<b>Размер окна</b>",
															  $this->ipsclass->adskin->form_simple_input( 'W_Width',$emo_opts['W_Width'],5 )." x ".$this->ipsclass->adskin->form_simple_input( 'W_Height',$emo_opts['W_Height'],5  )." пикселей"
													   )      );	
  $row_nums=array();

  for ($i=1;$i<11;$i++)
    $row_nums[] = array($i,$i);


	$this->ipsclass->html .= $this->ipsclass->adskin->add_td_row( array(
																  "<b>Количвество смайлов в строке</b>",
															  $this->ipsclass->adskin->form_dropdown( 'emo_in_row', $row_nums, $emo_opts['emo_in_row'])
													   )      );
   $this->ipsclass->html .= $this->ipsclass->adskin->add_td_row( array(
												 		 "<b>Отображать коды смайлов?</b><div style='color:gray'>Опция добавляет текстовый код смайла слева от смайла</div>",
												  		$this->ipsclass->adskin->form_yes_no( 'show_codes', $emo_opts['show_codes'] )
												   )      );

   $this->ipsclass->html .= $this->ipsclass->adskin->end_form("Обновить");

	$this->ipsclass->html .= $this->ipsclass->adskin->end_table();	

	// This modification is free to use only if you leave next text without changings!
	$this->ipsclass->html .= "<div align=center>Emoticons Category Managment v1.01, Created by Kostik.</div>";

$this->ipsclass->admin->output();
}

 

Итак, самая легкая часть закончена.

Теперь приступим к самой дебильной (дружно говорим спасибо IPS)

 

Суть такова:

у нас есть родительская папка default в папке style_emoticons

создавая другую папку в админке, форум помещает ее в папку default и заливает в новую папку все смайлы из папки default. соответственно в базе прописываются все смайлы (только с другим идентификатором)

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

поэтому все смайлы благополучно вливаются в default и там валяются кашей.

 

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

описывать я буду на своем примере.

 

1. подготовлено три пака иконок.

пак-1: имя каждого файла начинается на qip- (это важно! для каждого своего пака переименуйте все файлы по шаблону: имя+номер. тотал с этой задачей справляется аж бегом)

пак-2 и пак-3 точно также.

все три пака сделаны с помощью утилитки smilexmlizer или как-то так.. есть на форуме.

это было сделано для будущей фильтрации по категориям

2. импортируем наши смайлы. (тут возможны варианты. теоретически, вам повезет, и каждый такой файл сделает себе запись в новую папку с новым именем в базе. эта мысль только что пришла в голову, но проверять на боевом сервере желания уже нет. работает, и пусть работает)

3. далее я делал такие запросы в БД:

UPDATE `database`.`ibf_emoticons` SET `emo_set` = 'qipp' WHERE `image` LIKE '%qip-%' AND `emo_set`='qip';

таким запросом я менял значение emo_set с qip на qipp только для файлов которые начинаются на "qip-"

это я делал по нескольким причинам:

- у меня все залитые смайлы были в трех экземплярах. каждый смайл в базе имел три записи (с разными emo_set)

- менял qip на qipp именно для категорий смайлов.

 

после того как я сделал эти запросы, я сменил имена папок на фтп с qip на qipp

 

ну и в АЦ - Добавить категорию указываем имя категории и папку для нее.

указывать форумы и группы смыслу нет. я его не трогал, и не проверял. и не вносил изменения для его работы.

 

да, это костыли. дикий ужас и все такое.

зато оно работает.

и мои 300+ смайликов теперь раскиданы по категориям, а не валятся одним скопом, который слабые машинки просто убивает.

 

за сим вроде все

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


×
×
  • Создать...

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

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