Разделение смайликов на группы

Chumaster59

Пользователь
#1
##############################################################
## Название: Разделение смайликов на группы (как на тапках)
## Автор: kaspergreen
## Адаптация: Chumaster59 ( _Xz_ build_smilies.php)
## Сложность: Норм
## Время: 5мин
##############################################################

Выполнить запрос в БД
Код:
ALTER TABLE `bb_smilies` ADD `type` TINYINT( 1 ) NOT NULL DEFAULT '1'
Открыть posting.php и заменить
PHP:
if ($mode == 'smilies')
{
    generate_smilies('window');
    exit;
}
на
PHP:
if ($mode == 'smilies')
{
if(isset($_GET['smtid'])) $smtid = (int)$_GET['smtid'];
else $smtid=1;

switch($smtid) {
case 1:
$smtype = 1;
break;
case 2:
$smtype = 2;
break;
default:
$smtype = 1;
}
    generate_smilies('window', $smtype);
    exit;
}
Открыть includes/bbcode.php и заменить
PHP:
function generate_smilies($mode)
{
    global $bb_cfg, $template, $lang, $images, $user, $datastore;

    $inline_columns = 4;
    $inline_rows = 7;
    $window_columns = 8;

    if ($mode == 'window')
    {
        $user->session_start();
    }

    $data = $datastore->get('smile_replacements');

    if ($sql = $data['smile'])
на
PHP:
function generate_smilies($mode, $smtype=1)
{
    global $bb_cfg, $template, $lang, $images, $user, $datastore;

    $inline_columns = 4;
    $inline_rows = 7;
    $window_columns = 8;

    if ($mode == 'window')
    {
        $user->session_start();
    }

    $data = $datastore->get('smile_replacements');

    if ($sql = $data['smile'][$smtype])
Открыть и заменить содержимое includes/datastore/build_smilies.php на
PHP:
<?php

if (!defined('BB_ROOT')) die(basename(__FILE__));

global $bb_cfg;

$smilies = array();

$rowset = DB()->fetch_rowset("SELECT * FROM ". BB_SMILIES ." ORDER BY smilies_id");

foreach ($rowset as $smile)
{
  $smilies['orig'][] = '#(?<=^|\W)'. preg_quote($smile['code'], '#') .'(?=$|\W)#';
  $smilies['repl'][] = ' <img class="smile" src="'. $bb_cfg['smilies_path'] .'/'.  $smile['smile_url'] .'" alt="'. $smile['emoticon'] .'" align="absmiddle" border="0" />';
  $smilies['smile'][$smile['type']][] = $smile;
}

$this->store('smile_replacements', $smilies);
Открыть templates/default/posting_smilies.tpl и найти
Код:
        <tr>
                <th>{L_EMOTICONS}</th>
            </tr>
вставить после
Код:
        <tr>
                <td class="row2" align=center><a href=posting.php?mode=smilies&smtid=1>Стандартные</a> | <a href=posting.php?mode=smilies&smtid=2>Anime</a></td>
            </tr>
изменить кодировку на UTF-8
или возимся с лангами
заменяем слово Стандартные например на {L_SMILES1} а Anime на {L_SMILES2}
в оба lang_main.php добавляем в конец
PHP:
//Группы смайлов
$lang['SMILES1'] = 'Стандартные';
$lang['SMILES2'] = 'Anime';
Всё сохраняем и закрываем
В таблицу bb_smilies БД добавляем новые смайлы с типом 2 после чего выполняем Datastore в админке

Безымянный.png

-----
Дополнение для админки (20.09.2011)
Открыть оба lang_admin.php
найти
PHP:
$lang['SMILEY_EMOT']
вставить на следующею строку
PHP:
$lang['SMILEY_TYPE'] = 'Номер группы';
Открыть templates/admin/admin_smilies.tpl
найти
Код:
    <tr>
        <td class="row2">{L_SMILEY_EMOT}</td>
        <td class="row2"><input class="post" type="text" name="smile_emotion" value="{SMILEY_EMOTICON}" /></td>
    </tr>
вставить после
Код:
    <tr>
        <td class="row2">{L_SMILEY_TYPE}</td>
        <td class="row2"><input class="post" type="text" name="smile_type" value="{SMILEY_TYPE}" /></td>
    </tr>
Открыть admin/admin_smilies.php
Найти
PHP:
            $smile_emotion = ( isset($_POST['smile_emotion']) ) ? trim($_POST['smile_emotion']) : trim($_GET['smile_emotion']);
вставить после
PHP:
            $smile_type = ( isset($_POST['smile_type']) ) ? trim($_POST['smile_type']) : trim($_GET['smile_type']);
Найти
PHP:
SET code = '" . DB()->escape($smile_code) . "', smile_url = '" . DB()->escape($smile_url) . "', emoticon = '" . DB()->escape($smile_emotion) . "'
вставить на линии после
PHP:
, type = '" . DB()->escape($smile_type) . "'
Найти
PHP:
            $smile_emotion = ( isset($_POST['smile_emotion']) ) ? $_POST['smile_emotion'] : $_GET['smile_emotion'];
вставить после
PHP:
            $smile_type = ( isset($_POST['smile_type']) ) ? $_POST['smile_type'] : $_GET['smile_type'];
Ниже найти
PHP:
            $smile_emotion = trim($smile_emotion);
вставить после
PHP:
            $smile_type = trim($smile_type);
Найти два раза
PHP:
$sql = "INSERT INTO " . BB_SMILIES . " (code, smile_url, emoticon)
вставить на линии после emoticon
PHP:
, type
Найти
PHP:
VALUES ('" . DB()->escape($smile_code) . "', '" . DB()->escape($smile_url) . "', '" . DB()->escape($smile_emotion) . "'
вставить на линии после
PHP:
, '" . DB()->escape($smile_type) . "'
всё сохраняем и закрываем
Безымянный2.png
 

Didier

Пользователь
#2
Самое главное, что нет возможности из админки ставить номер группы для смайликов :) Мне конечно не лень сгонять до ветру базы, но тем не менее. :) _Xz_ на тебя одна надежда :)
 

Didier

Пользователь
#5
Скромно молчу в тряпочку. Мод прекрасно работает, но хотелось бы изменения в админке :)
 
H

Harry

Гость
#7
Код:
Notice: Undefined offset: 2 in /includes/bbcode.php on line 113
Код:
    if ($sql = $data['smile'][$smtype])
 

Chumaster59

Пользователь
#8
Скромно молчу в тряпочку. Мод прекрасно работает, но хотелось бы изменения в админке :)
Добавил в инструкцию
---

Код:
Notice: Undefined offset: 2 in /includes/bbcode.php on line 113
Код:
    if ($sql = $data['smile'][$smtype])
Проверил только что, поставил на чистую R292
всё работает, логи чисты
Проверяйте внимательно всё по инструкции (в админке не забываем про Datestore)
 
H

Harry

Гость
#9
если айди группы к примеру 3, и она пуста (т.е. нет смайлов в ней) то вылазит ошибка
Notice: Undefined offset: 3 in /home/x360boxc/public_html/xbt-tracker.ru/includes/bbcode.php on line 113

if ($sql = $data['smile'][$smtype])
 

Didier

Пользователь
#10
Hу раз пошла такая пьянка и назвался груздем и даже есть кузов, то нужно в админке сделать создание групп :) Хотя это будет уже сложнее :)