мод добавляет возможность создания отдельных категорий смайликов и отдельного выбора для вставки в сообщение.
сканы мода:



наверное пригодится тем, у кого много смайликов и кто хочет выводить их группами (типа животные, знаки, аниме и так далее).
Если вас заинтересовал мод - ставим. Мод создан для версии 3.0.7, но я его протестировал на 3.0.14 - всё встало без подгонок.
1. Скачать мод из архива сайта:
Скачать из файлового архива сайта
распаковать и содержимое папки root загрузить в корень сайта (где файл config.php).
в папке root присутствует папка umil - если у вас на сервере уже есть эта папка - заново копировать не надо.
2. Редактируем файлы форума:
Код: Выделить всё
<!-- IF S_ADD -->
<td>{L_ADD}</td>
<!-- ENDIF -->
Вставить после найденного
Код: Выделить всё
<!-- IF S_SMILIES --><td>{L_CATEGORY}</td><!-- ENDIF -->
Код: Выделить всё
<!-- IF S_ADD -->
<td><input type="checkbox" class="radio" name="add_img[{items.IMG}]" value="1" /></td>
<!-- ENDIF -->
Вставить после найденного
Код: Выделить всё
<!-- IF S_SMILIES --><td>{items.SMILIES_CATEGORIES_SELECT}</td><!-- ENDIF -->
Код: Выделить всё
<form id="acp_icons" method="post" action="{U_ACTION}">
<div style="text-align: right;"><a href="{U_IMPORT}">{L_IMPORT}</a> | <a href="{U_EXPORT}">{L_EXPORT}</a></div>
Вставить перед найденным
Код: Выделить всё
<!-- IF S_SMILIES -->
<div>
<form method="post" id="categories" action="{U_ACTION}">
{L_CATEGORY}: <select name="cat_id" id="cat_id" onchange="document.forms['categories'].submit()">
{CATEGORIES_OPTIONS}
</select>
</form>
</div>
<!-- ENDIF -->
Код: Выделить всё
$this->tpl_name = 'acp_icons';
Вставить после найденного
Код: Выделить всё
// Start Smiles Categories
$user->add_lang('mods/smilies_categories');
include($phpbb_root_path . 'includes/mods/smilies_categories.' . $phpEx);
// End Smiles Categories
Код: Выделить всё
$sql = "SELECT *
FROM $table
ORDER BY {$fields}_order " . (($icon_id || $action == 'add') ? 'DESC' : 'ASC');
$result = $db->sql_query($sql);
Заменить найденное на
Код: Выделить всё
// Start Smilies Categories
$default = true;
$cat_id = request_var('cat_id', 0);
if ($cat_id)
{
$cats = get_cats();
$in_cat = get_smilies_in_cats();
if (isset($cats[$cat_id]) && isset($in_cat[$cat_id]))
{
$default = false;
$sql = 'SELECT *
FROM ' . SMILIES_TABLE . '
WHERE ' . $db->sql_in_set('smiley_id', $in_cat[$cat_id]) . '
ORDER BY smiley_order';
$result = $db->sql_query($sql);
}
}
if ($default)
{
$sql = "SELECT *
FROM $table
ORDER BY {$fields}_order " . (($icon_id || $action == 'add') ? 'DESC' : 'ASC');
$result = $db->sql_query($sql);
}
// End Smilies Categories
Код: Выделить всё
$colspan = (($mode == 'smilies') ? 7 : 5);
Заменить найденное на
Код: Выделить всё
// Start Smilies Categories
$colspan = (($mode == 'smilies') ? '8' : '5');
// End Smilies Categories
Код: Выделить всё
foreach ($data as $img => $img_row)
Вставить перед найденным
Код: Выделить всё
// Start Smilies Categories
if ($mode == 'smilies')
{
$cats_in_smilies = get_cats_in_smilies();
$row_cnt = 0;
}
// End Smilies Categories
Код: Выделить всё
'IMG' => $img,
'A_IMG' => addslashes($img),
'IMG_SRC' => $phpbb_root_path . $img_path . '/' . $img,
Вставить перед найденным
Код: Выделить всё
// Start Smilies Categories
'SMILIES_CATEGORIES_SELECT' => (($mode == 'smilies') ? smilies_categories_select('cat_id_' . ++$row_cnt, ((isset($img_row[$fields . '_id']) && isset($cats_in_smilies[$img_row[$fields . '_id']])) ? $cats_in_smilies[$img_row[$fields . '_id']] : array())) : ''),
// End Smilies Categories
Код: Выделить всё
$icons_updated = 0;
$errors = array();
Вставить после найденного
Код: Выделить всё
// Start Smilies Categories
$row_cnt = 0;
// End Smilies Categories
Код: Выделить всё
if ($mode == 'smilies' && ($image_emotion[$image] == '' || $image_code[$image] == ''))
{
$errors[$image] = 'SMILIE_NO_' . (($image_emotion[$image] == '') ? 'EMOTION' : 'CODE');
}
Вставить перед найденным
Код: Выделить всё
// Start Smilies Categories
$row_cnt++;
// End Smilies Categories
Код: Выделить всё
$sql = "UPDATE $table
SET " . $db->sql_build_array('UPDATE', $img_sql) . "
WHERE {$fields}_id = " . $image_id[$image];
$db->sql_query($sql);
$icons_updated++;
Вставить после найденного
Код: Выделить всё
// Start Smilies Categories
if ($mode == 'smilies')
{
update_smiley_categories($image_id[$image], request_var('cat_id_' . $row_cnt, array(0)));
}
// End Smilies Categories
Код: Выделить всё
$sql = "INSERT INTO $table " . $db->sql_build_array('INSERT', $img_sql);
$db->sql_query($sql);
$icons_updated++;
Вставить после найденного
Код: Выделить всё
// Start Smilies Categories
if ($mode == 'smilies')
{
update_smiley_categories($db->sql_nextid(), request_var('cat_id_' . $row_cnt, array(0)));
}
// End Smilies Categories
Код: Выделить всё
$cache->destroy('_icons');
$cache->destroy('sql', $table);
$level = E_USER_NOTICE;
Вставить перед найденным
Код: Выделить всё
// Start Smilies Categories
if ($mode == 'smilies')
{
resync_cats();
}
// End Smilies Categories
Код: Выделить всё
$sql = "UPDATE $table
SET {$fields}_order = $current_order
WHERE {$fields}_order = $switch_order_id
AND {$fields}_id <> $icon_id";
$db->sql_query($sql);
Вставить перед найденным
Код: Выделить всё
// Start Smilies Categories
$cat_id = request_var('cat_id', 0);
if ($cat_id)
{
$cats = get_cats();
$in_cat = get_smilies_in_cats();
if (isset($cats[$cat_id]) && isset($in_cat[$cat_id]))
{
$sql = 'SELECT *
FROM ' . SMILIES_TABLE . '
WHERE ' . $db->sql_in_set('smiley_id', $in_cat[$cat_id]) . '
ORDER BY smiley_order';
$result = $db->sql_query($sql);
while ($row = $db->sql_fetchrow($result))
{
if ($action == 'move_up' && $row['smiley_id'] == $icon_id)
{
break;
}
$switch_order_id = $row['smiley_order'];
if ($action == 'move_down' && $row['smiley_id'] == $icon_id)
{
$row = $db->sql_fetchrow($result);
$switch_order_id = $row['smiley_order'];
break;
}
}
}
}
// End Smilies Categories
Код: Выделить всё
'U_ACTION' => $this->u_action,
'U_IMPORT' => $this->u_action . '&action=import',
'U_EXPORT' => $this->u_action . '&action=export',
Заменить найденное на
Код: Выделить всё
// Start Smilies Categories
'U_ACTION' => $this->u_action . '&cat_id=' . request_var('cat_id', 0),
// End Smilies Categories
'U_IMPORT' => $this->u_action . '&action=import',
'U_EXPORT' => $this->u_action . '&action=export',
Код: Выделить всё
$sql = "SELECT *
FROM $table
ORDER BY {$fields}_order ASC";
$result = $db->sql_query_limit($sql, $config['smilies_per_page'], $pagination_start);
Заменить найденное на
Код: Выделить всё
// Start Smilies Categories
$cat_id = request_var('cat_id', 0);
if ($cat_id > 0)
{
$cats = get_cats();
$in_cat = get_smilies_in_cats();
if (isset($cats[$cat_id]) && isset($in_cat[$cat_id]))
{
$sql = 'SELECT COUNT(smiley_id) AS count
FROM ' . SMILIES_TABLE . '
WHERE ' . $db->sql_in_set('smiley_id', $in_cat[$cat_id]) . '
GROUP BY smiley_url';
$result = $db->sql_query($sql, 3600);
$item_count = 0;
while ($row = $db->sql_fetchrow($result))
{
++$item_count;
}
$db->sql_freeresult($result);
$sql = 'SELECT *
FROM ' . SMILIES_TABLE . '
WHERE ' . $db->sql_in_set('smiley_id', $in_cat[$cat_id]) . '
ORDER BY smiley_order';
$result = $db->sql_query_limit($sql, $config['smilies_per_page'], $pagination_start);
}
$template->assign_var('PAGINATION',
generate_pagination(($this->u_action . '&cat_id=' . $cat_id), $item_count, $config['smilies_per_page'], $pagination_start, true)
);
}
else
{
$sql = "SELECT *
FROM $table
ORDER BY {$fields}_order ASC";
$result = $db->sql_query_limit($sql, $config['smilies_per_page'], $pagination_start);
$template->assign_var('PAGINATION',
generate_pagination($this->u_action, $item_count, $config['smilies_per_page'], $pagination_start, true)
);
}
$template->assign_var('CATEGORIES_OPTIONS', smilies_categories_options(array($cat_id)));
// End Smilies Categories
Код: Выделить всё
'U_MOVE_UP' => $this->u_action . '&action=move_up&id=' . $row[$fields . '_id'] . '&start=' . $pagination_start,
'U_MOVE_DOWN' => $this->u_action . '&action=move_down&id=' . $row[$fields . '_id'] . '&start=' . $pagination_start,
Заменить найденное на
Код: Выделить всё
// Start Smilies Categories
'U_MOVE_UP' => $this->u_action . '&action=move_up&id=' . $row[$fields . '_id'] . '&cat_id=' . request_var('cat_id', 0) . '&start=' . $pagination_start,
'U_MOVE_DOWN' => $this->u_action . '&action=move_down&id=' . $row[$fields . '_id'] . '&cat_id=' . request_var('cat_id', 0) . '&start=' . $pagination_start
// End Smilies Categories
Код: Выделить всё
$template->assign_var('PAGINATION',
generate_pagination($this->u_action, $item_count, $config['smilies_per_page'], $pagination_start, true)
);
Заменить найденное на
Код: Выделить всё
/* Deleted from Smilie Categories
$template->assign_var('PAGINATION',
generate_pagination($this->u_action, $item_count, $config['smilies_per_page'], $pagination_start, true)
);
*/
Код: Выделить всё
$sql = 'SELECT COUNT(smiley_id) AS item_count
FROM ' . SMILIES_TABLE . '
GROUP BY smiley_url';
$result = $db->sql_query($sql, 3600);
$smiley_count = 0;
while ($row = $db->sql_fetchrow($result))
{
++$smiley_count;
}
$db->sql_freeresult($result);
$template->set_filenames(array(
'body' => 'posting_smilies.html')
);
$template->assign_var('PAGINATION',
generate_pagination(append_sid("{$phpbb_root_path}posting.$phpEx", 'mode=smilies&f=' . $forum_id),
$smiley_count, $config['smilies_per_page'], $start, true)
);
Заменить найденное на
Код: Выделить всё
$template->set_filenames(array(
'body' => 'posting_smilies.html')
);
Код: Выделить всё
$sql = 'SELECT smiley_url, MIN(emotion) as emotion, MIN(code) AS code, smiley_width, smiley_height
FROM ' . SMILIES_TABLE . '
GROUP BY smiley_url, smiley_width, smiley_height
ORDER BY MIN(smiley_order)';
$result = $db->sql_query_limit($sql, $config['smilies_per_page'], $start, 3600);
Заменить найденное на
Код: Выделить всё
include($phpbb_root_path . 'includes/mods/smilies_categories.' . $phpEx);
$cat_id = request_var('cat_id', 0);
if ($cat_id > 0)
{
$cats = get_cats();
$in_cat = get_smilies_in_cats();
if (isset($cats[$cat_id]) && isset($in_cat[$cat_id]))
{
$sql = 'SELECT COUNT(smiley_id) AS item_count
FROM ' . SMILIES_TABLE . '
WHERE ' . $db->sql_in_set('smiley_id', $in_cat[$cat_id]) . '
GROUP BY smiley_url';
$result = $db->sql_query($sql, 3600);
$smiley_count = 0;
while ($row = $db->sql_fetchrow($result))
{
++$smiley_count;
}
$db->sql_freeresult($result);
$sql = 'SELECT *
FROM ' . SMILIES_TABLE . '
WHERE ' . $db->sql_in_set('smiley_id', $in_cat[$cat_id]) . '
ORDER BY smiley_order';
$result = $db->sql_query_limit($sql, $config['smilies_per_page'], $start, 3600);
$template->assign_var('L_SMILIES', $user->lang['SMILIES'] . ' • ' . $cats[$cat_id]['cat_name']);
}
}
else
{
$sql = 'SELECT COUNT(smiley_id) AS item_count
FROM ' . SMILIES_TABLE . '
GROUP BY smiley_url';
$result = $db->sql_query($sql, 3600);
$smiley_count = 0;
while ($row = $db->sql_fetchrow($result))
{
++$smiley_count;
}
$db->sql_freeresult($result);
$sql = 'SELECT smiley_url, MIN(emotion) as emotion, MIN(code) AS code, smiley_width, smiley_height, MIN(smiley_order) AS min_smiley_order
FROM ' . SMILIES_TABLE . '
GROUP BY smiley_url, smiley_width, smiley_height
ORDER BY min_smiley_order';
$result = $db->sql_query_limit($sql, $config['smilies_per_page'], $start, 3600);
}
$template->assign_vars(array(
'PAGINATION' => generate_pagination(append_sid("{$phpbb_root_path}posting.$phpEx", 'mode=smilies&f=' . $forum_id . '&cat_id=' . $cat_id), $smiley_count, $config['smilies_per_page'], $start, true),
'S_CAT_ACTION' => append_sid("{$phpbb_root_path}posting.$phpEx", 'mode=smilies&f=' . $forum_id),
'CATEGORIES_OPTIONS' => smilies_categories_options(array($cat_id))
));
3. Завершение установки:
Для завершения установки необходимо запустить файл через браузер по адресу:
Код: Выделить всё
http://ваш сайт/install_smilie_categories.php
после отработки скрипта удалите файл install_smilie_categories.php с сервера.
Очистите кэш. Всё. Теперь можно идти в админку и создавать новые категории со смайликами.

ссылку на автора писать не буду, так как не нашёл первоисточник и описание, мод и русификатор брал с разных мест. кому интересно ещё почитать об этом моде - наберите в поисковике Smiles Categories для phpbb3.
Успешного применения.