Сортировка смайлов

Автор deadbead, 20 марта 2007, 03:21:04

« назад - далее »

0 Пользователи и 1 гость просматривают эту тему.

deadbead

Вот на досуге набросал мини хак... тестирвал на 1.1.2

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

В админке можно вкл./выкл. эту фичу и указать сколько смайлов отображать над формой ввода (остальные в попап окне)

Приступим!


Themes/default/ManageSmileys.template.php (строка где-то #42)
перед

	
	
	
<
tr class="windowbg2">
	
	
	
	
<
td colspan="2"><hr /></td>
	
	
	
</
tr>

добавляем

	
	
	
<
tr class="windowbg2">
	
	
	
	
<
td colspan="2"><hr /></td>
	
	
	
</
tr>
	
	
	
<
tr class="windowbg2">
	
	
	
	
<
td align="right" width="50%"><label for="smileysSort_enable">', $txt['smileysSort_enable_customized'], '</label>:</td>
	
	
	
	
<
td><input type="checkbox" name="smileysSort_enable" id="smileysSort_enable"', empty($modSettings['smileysSort_enable']) ? '' : ' checked="checked"', ' class="check" /></td>
	
	
	
</
tr>
	
	
	
<
tr class="windowbg2">
	
	
	
	
<
td align="right" width="50%"><label for="smileysSort_showCount">', $txt['smileysSort_showCount'], '</label>:<div class="smalltext" style="font-weight: bold;">', $txt['smileysSort_showCount_note'], '</div></td>
	
	
	
	
<
td><input type="text" name="smileysSort_showCount" id="smileysSort_showCount" value="', $modSettings['smileysSort_showCount'], '" size="10" /></td>
	
	
	
</
tr>



Themes/default/languages/Modifications.russian.php (в конец)
добавляем

// Smileys sort
$txt['smileysSort_enable_customized'] = 'Разрешить упорядочивание смайлов';
$txt['smileysSort_showCount'] = 'Количество отображаемых смайлов';
$txt['smileysSort_showCount_note'] = '(остальные выбираются в отдельном окне)';



Sources/ManageSmileys.php (строка где-то #154)
после

	
	
updateSettings(array(
	
	
	
'smiley_sets_default' => empty($context['smiley_sets'][$_POST['default_smiley_set']]) ? 'default' $context['smiley_sets'][$_POST['default_smiley_set']],
	
	
	
'smiley_sets_enable' => isset($_POST['smiley_sets_enable']) ? '1' '0',
	
	
	
'smiley_enable' => isset($_POST['smiley_enable']) ? '1' '0',
	
	
	
'messageIcons_enable' => isset($_POST['messageIcons_enable']) ? '1' '0',
	
	
	
'smileys_url' => $_POST['smiley_sets_url'],
	
	
	
'smileys_dir' => $_POST['smiley_sets_dir'],
	
	
));

добавляем

	
	
updateSettings(array(
	
	
	
'smileysSort_enable' => isset($_POST['smileysSort_enable']) ? '1' '0',
	
	
	
'smileysSort_showCount' => $_POST['smileysSort_showCount'],
	
	
));



Sources/Subs-Post.php (строка где-то #1205)
это

	
	
	
$request db_query("
	
	
	
	
SELECT code, filename, description, smileyRow, hidden
	
	
	
	
FROM 
{$db_prefix}smileys
	
	
	
	
WHERE hidden IN (0, 2)
	
	
	
	
ORDER BY smileyRow, smileyOrder"
__FILE____LINE__);

меняем на

	
	
	
if (!empty(
$modSettings['smileysSort_enable']) && $modSettings['smileysSort_enable'] == '1')
	
	
	
	
$request db_query("
	
	
	
	
	
SELECT s.code, s.filename, s.description, s.smileyRow, s.hidden, COUNT(m.body) as popular
	
	
	
	
	
FROM 
{$db_prefix}smileys as s
	
	
	
	
	
left join 
{$db_prefix}messages as m ON m.body LIKE
	
	
	
	
	
REVERSE(CONCAT(REVERSE(CONCAT(s.code, '%')),'%'))
	
	
	
	
	
WHERE hidden IN (0, 2)
	
	
	
	
	
"
.(($context['user']['is_logged']) ? " and m.ID_MEMBER={$context['user']['id']} " "").
	
	
	
	
	
"GROUP BY s.code, s.filename, s.description, s.smileyRow, s.hidden
	
	
	
	
	
ORDER BY popular DESC"
__FILE____LINE__);
	
	
	
else
	
	
	
	
$request db_query("
	
	
	
	
	
SELECT code, filename, description, smileyRow, hidden
	
	
	
	
	
FROM 
{$db_prefix}smileys
	
	
	
	
	
WHERE hidden IN (0, 2)
	
	
	
	
	
ORDER BY smileyRow, smileyOrder"
__FILE____LINE__);
	
	
	

	
	
	
$i 0;

а так же это

	
	
	
	
$context['smileys'][empty($row['hidden']) ? 'postform' 'popup'][$row['smileyRow']]['smileys'][] = $row;

меняем на

	
	
	
	
if (!empty(
$modSettings['smileysSort_enable']) && $modSettings['smileysSort_enable'] == '1')
	
	
	
	
	
$context['smileys'][($i++<$modSettings['smileysSort_showCount']) ? 'postform' 'popup'][$row['smileyRow']]['smileys'][] = $row;
	
	
	
	
else
	
	
	
	
	
$context['smileys'][empty($row['hidden']) ? 'postform' 'popup'][$row['smileyRow']]['smileys'][] = $row;



Моды я писать не умею... поэтому был бы рад если бы ктоньть собрал все это в кучу, сделал это и поделился результатом :) (будет мне хелоу ворлд :) )
Это же самый страшный разум во вселенной. Высылайте беспилотный модуль.

Bic

#1
Сделал в виде мода, только почему-то один смайлик отображается, и ссылки на дополнительные нету, где-то вероятно ошибка, только не пойму где... 

deadbead

Хм... странно...
А на странице админки был?
(Если скинешь таблицу смайлов и месаджев - посматрю...)
Это же самый страшный разум во вселенной. Высылайте беспилотный модуль.

Bic

В админке если выключить мод, то смайлики появляются, как только включаю, остается один вот этот :) смайлик.

deadbead

Без исходных данных сложно что-либо сказать.....
Это же самый страшный разум во вселенной. Высылайте беспилотный модуль.

Bic

А какие исходные данные? Мод в аттаче, посмотри в нем код, может где ошибка?
А так у меня стоит SMF 1.1.2+TinyPortal v0.9.8, набор смайликов дефолтный ставил и свой - ситуация одинаковая.

deadbead

Хм... У мень весь набор тот же.... (щаз нет возможности мод опробовать....)

А ты своим модом ставил или ручками?
Это же самый страшный разум во вселенной. Высылайте беспилотный модуль.

Bic

Ставил модом..., ладно, потом попробую разобраться.

deadbead

Псиб за мод :) Тож поковыряю....
Это же самый страшный разум во вселенной. Высылайте беспилотный модуль.

deadbead

Проблема точно в этом запросе
	
	
	
	
$request db_query("
	
	
	
	
	
SELECT s.code, s.filename, s.description, s.smileyRow, s.hidden, COUNT(m.body) as popular
	
	
	
	
	
FROM 
{$db_prefix}smileys as s
	
	
	
	
	
left join 
{$db_prefix}messages as m ON m.body LIKE
	
	
	
	
	
REVERSE(CONCAT(REVERSE(CONCAT(s.code, '%')),'%'))
	
	
	
	
	
WHERE hidden IN (0, 2)
	
	
	
	
	
"
.(($context['user']['is_logged']) ? " and m.ID_MEMBER={$context['user']['id']} " "").
	
	
	
	
	
"GROUP BY s.code, s.filename, s.description, s.smileyRow, s.hidden
	
	
	
	
	
ORDER BY popular DESC"
__FILE____LINE__);

Вероятно если его надо изменить так
	
	
	
	
$request db_query("
	
	
	
	
	
SELECT s.code, s.filename, s.description, s.smileyRow, s.hidden, COUNT(m.body) as popular
	
	
	
	
	
FROM 
{$db_prefix}smileys as s
	
	
	
	
	
left join 
{$db_prefix}messages as m ON m.body LIKE
	
	
	
	
	
REVERSE(CONCAT(REVERSE(CONCAT(s.code, '%')),'%'))
	
	
	
	
	
"
.(($context['user']['is_logged']) ? " and m.ID_MEMBER={$context['user']['id']} " "").
	
	
	
	
	
"WHERE hidden IN (0, 2)
	
	
	
	
	
GROUP BY s.code, s.filename, s.description, s.smileyRow, s.hidden
	
	
	
	
	
ORDER BY popular DESC"
__FILE____LINE__);
Проверить немогу.... (У меня и так все пашет, а базы где не пашет смоделировать не могу)
Это же самый страшный разум во вселенной. Высылайте беспилотный модуль.

Bic

Это помогло, теперь вроде работает нормально.
В аттаче исправленный мод.

deadbead

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

romashkin

мод работает нормально.
у меня на форуме смайлы в форме быстрого ответа.
Соответственно, код вставил еще и у Display.template.php
Но вот проблемма, в логе ошибок форума, при откритии страницы  топика, соответствено и формы ответа со смайлами, собираються ошибки:

8: Undefined variable: i
Файл: .........forum/Themes/default/languages/Post.ukrainian.php (eval?)
Строка: 796


как с этим бороться?


Mavn

Ну так пропиши языковые стринги в своем украинском языке
<file name="$themedir/languages/Modifications.russian.php">
   <operation>
   <search position="end"></search>
    <add><![CDATA[// Smileys sort
$txt['smileysSort_enable_customized'] = 'Разрешить упорядочивание смайлов';
$txt['smileysSort_showCount'] = 'Количество отображаемых смайлов';
$txt['smileysSort_showCount_note'] = '(остальные выбираются в отдельном окне)';]]></add>
</operation>
SimpleMachines Russian Community Team
п.1 Пройду курсы гадалок для определения исходного кода по скриншоту.

п.2 У вас нет желания читать правила раздела, у меня нет желания одобрять темы, которые не соответствуют этим правилам.

romashkin

#14
это я сделал, еще при установке мода я в нем исправил russian на ukrainian.
и этот текст в админке отображается нормально.

Проблема как раз в форме Быстрого ответа.
Если открывать простой ответ, то ошибки в логе нет.

Я делал замену кода в Display.template.php, так же, как и в Subs-Post.php. Возможно есть особенности?

romashkin

#15
это 796 строка Display.template.php
$context['smileys'][($i++<$modSettings['smileysSort_showCount']) ? 'postform' : 'popup'][$row['smileyRow']]['smileys'][] = $row;


Проблему решил
При вставке кода в Display.template.php
пропустил $i=0;    :-[