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

Автор 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;    :-[