Avatar of poster on Index and Viewforum phpbb3
Модераторы: Vl@d1m1r, Lorem Ipsum, Atlas
Правила форума
----
----
- tralan
- Активно осваиваю Форум
- Сообщения: 235
- Стаж: 11 лет 4 месяца
- Откуда: Таганрог
- Контактная информация:
Avatar of poster on Index and Viewforum phpbb3
В догонку для boroda-max
Вот посмотрите код моего шаблона forumlist_body.html (subsilver2)
Вот что получается: если в форуме есть сообщения, то и будет дата и время последнего сообщения: forumrow.LAST_POST_TIME
Если есть время последнего сообщения: <!-- IF forumrow.LAST_POST_TIME -->
то будет выполняться блок (1), где происходит вывод аватара случайного или пользовательского.
Если нет времени последнего сообщения
то будет выполняться блок (2), где происходит вывод надписи "Нет сообщений".
У вас где-то здесь ошибка.
Вот посмотрите код моего шаблона forumlist_body.html (subsilver2)
Вот что получается: если в форуме есть сообщения, то и будет дата и время последнего сообщения: forumrow.LAST_POST_TIME
Если есть время последнего сообщения: <!-- IF forumrow.LAST_POST_TIME -->
то будет выполняться блок (1), где происходит вывод аватара случайного или пользовательского.
Если нет времени последнего сообщения
то будет выполняться блок (2), где происходит вывод надписи "Нет сообщений".
У вас где-то здесь ошибка.
В любой непонятной ситуации – ложись спать!
- boroda-max
- Активно осваиваю Форум
- Сообщения: 180
- Стаж: 11 лет 6 месяцев
- Откуда: CCCР. Ленинград
- Контактная информация:
Avatar of poster on Index and Viewforum phpbb3
Александр - спасибо большое, благодаря Вам! код стал и все заработало! (даже с "отражением")
Код: Выделить всё
//-- mod : apiv ----------------------------------------------------------------
//-- add
function user_display_avatar($row, $prefix = '', $tpl_switch, $display)
{
if ( !$display || empty($row[$prefix . '_poster_avatar']) )
{
return;
}
global $config, $template;
$avatar = unserialize($row[$prefix . '_poster_avatar']);
if ( $avatar['width'] >= $avatar['height'] )
{
$avatar_width = ($avatar['width'] > $config['avatar_max_dimensions']) ? $config['avatar_max_dimensions'] : $avatar['width'];
$avatar_height = ($avatar_width == $config['avatar_max_dimensions']) ? round($config['avatar_max_dimensions'] / $avatar['width'] * $avatar['height']) : $avatar['height'];
$avatar_max_dimensions = $avatar_width = $avatar_height = 40;
}
else
{
$avatar_height = ($avatar['height'] > $config['avatar_max_dimensions']) ? $config['avatar_max_dimensions'] : $avatar['height'];
$avatar_width = ($avatar_height == $config['avatar_max_dimensions']) ? round($config['avatar_max_dimensions'] / $avatar['height'] * $avatar['width']) : $avatar['width'];
$avatar_max_dimensions = $avatar_width = $avatar_height = 40;
}
if ( !$display || empty($row[$prefix . '_poster_avatar']) )
{
$template->alter_block_array($tpl_switch, array(
strtoupper($prefix) . '_POSTER_AVATAR' => get_user_avatar('', 0, 40, 40),
strtoupper($prefix) . '_POSTER_AVATAR_MARGIN' => ($avatar_width == $config['avatar_max_dimensions']) ? 5 : ($config['avatar_max_dimensions'] - $avatar_width + 5),
), true, 'change');
}
else
{
$template->alter_block_array($tpl_switch, array(
strtoupper($prefix) . '_POSTER_AVATAR' => get_user_avatar($avatar['avatar'], $avatar['type'], $avatar_width, $avatar_height),
strtoupper($prefix) . '_POSTER_AVATAR_MARGIN' => ($avatar_width == $config['avatar_max_dimensions']) ? 5 : ($config['avatar_max_dimensions'] - $avatar_width + 5),
), true, 'change');
}
}
//-- fin mod : apiv ------------------------------------------------------------
- tralan
- Активно осваиваю Форум
- Сообщения: 235
- Стаж: 11 лет 4 месяца
- Откуда: Таганрог
- Контактная информация:
Avatar of poster on Index and Viewforum phpbb3
Очень рад, что удалось Вам помочь.
И еще один моментик: в моей предложенной замене функции user_display_avatar не должно быть в начале кода:
этот код мы удаляем. Посмотрите внимательно мое сообщение и разницу кодов функции до и после замены!!!
Если у Вас работает такой вариант функции, то это очень и очень странно
Ух-ты, а это как? Скриншот глянуть можно?boroda-max писал(а):(даже с "отражением")
И еще один моментик: в моей предложенной замене функции user_display_avatar не должно быть в начале кода:
Код: Выделить всё
if ( !$display || empty($row[$prefix . '_poster_avatar']) )
{
return;
}
Если у Вас работает такой вариант функции, то это очень и очень странно
В любой непонятной ситуации – ложись спать!
- boroda-max
- Активно осваиваю Форум
- Сообщения: 180
- Стаж: 11 лет 6 месяцев
- Откуда: CCCР. Ленинград
- Контактная информация:
Avatar of poster on Index and Viewforum phpbb3
Последний раз редактировалось boroda-max 18 фев 2013, 09:39, всего редактировалось 1 раз.
- boroda-max
- Активно осваиваю Форум
- Сообщения: 180
- Стаж: 11 лет 6 месяцев
- Откуда: CCCР. Ленинград
- Контактная информация:
Avatar of poster on Index and Viewforum phpbb3
удалил, очистил кэш......результат тот же работает все-кроме блока "ПОСЛЕДНИЕ ТЕМЫ"....танцы с бубном и чтение мантр - не помогли....правки http://www.phpbbguru.net/community/topic30408-30.html и https://www.phpbb.com/community/viewtop ... #p13181295 и http://www.phpbbguru.net/community/topi ... ml#p376924 и http://www.phpbbguru.net/community/topi ... ml#p376925 помогли частично))))tralan писал(а):разницу кодов функции до и после замены!!!
настройки 9 на страницу
все на одной
- tralan
- Активно осваиваю Форум
- Сообщения: 235
- Стаж: 11 лет 4 месяца
- Откуда: Таганрог
- Контактная информация:
Avatar of poster on Index and Viewforum phpbb3
этот код там просто лишний. Все мои изменения - только для вывода Случайных аватарок в списке форумов и в списке тем. Для последних сообщений - я правил файлы includes\functions_recenttopics.php и styles\ВАШ СТИЛЬ\template\recent_topics_body.html.boroda-max писал(а):удалил, очистил кэш......результат тот же работает все-кроме блока "ПОСЛЕДНИЕ ТЕМЫ"
К сожалению у меня стиль subsilver2 и правки для Последних сообщений я делал у себя под этот стиль.
Получил. Но в свете Ваших последних сообщений, что все заработало, уже наверное не актуально.boroda-max писал(а):Александр, почту Вам отправил...
Я бы мог посмотреть Ваши файлы includes\functions_recenttopics.php и styles\ВАШ СТИЛЬ\template\recent_topics_body.html (если пришлете в последней редакции), может смог бы Вам что-то посоветовать насчет "Последних сообщений"
В любой непонятной ситуации – ложись спать!
- tralan
- Активно осваиваю Форум
- Сообщения: 235
- Стаж: 11 лет 4 месяца
- Откуда: Таганрог
- Контактная информация:
Avatar of poster on Index and Viewforum phpbb3
В продолжении своего сообщения - теперь об объединении этого мода и "Последних сообщений" для стиля subsilver2
Правка затрагивает файлы /includes/functions_recenttopics.php и /styles/ВАШ СТИЛЬ/template/recent_topics_body.html. Все по аналогии изменений в файлах viewforum.php и /styles/ВАШ СТИЛЬ/template/viewforum_body.html
Открываем /includes/functions_recenttopics.php.
находим:
вставляем после:
Открываем /styles/ВАШ СТИЛЬ/template/recent_topics_body.html.
находим:
вставляем перед:
находим:
вставляем перед:
находим:
вставляем перед:
находим:
вставляем перед:
И еще для красивости находим строки:
в них LAST_POST_AUTHOR_FULL заменяем на TOPIC_AUTHOR_FULL, чтобы показать автора темы (первого сообщения), а не последнего.
в них LAST_POST_TIME заменяем на FIRST_POST_TIME, чтобы показать время первого сообщения (время создания темы), а не последнего сообщения
Не забываем сохранять изменения, чистить кеш. Ну и всего наилучшего!!!
И на всякий случай, так как изменения немного сложноваты, прикладываю свой файл:
Правка затрагивает файлы /includes/functions_recenttopics.php и /styles/ВАШ СТИЛЬ/template/recent_topics_body.html. Все по аналогии изменений в файлах viewforum.php и /styles/ВАШ СТИЛЬ/template/viewforum_body.html
Открываем /includes/functions_recenttopics.php.
находим:
Код: Выделить всё
'U_VIEW_TOPIC' => $view_topic_url,
'U_VIEW_FORUM' => $view_forum_url,
'U_MCP_REPORT' => append_sid("{$phpbb_root_path}mcp.$phpEx", 'i=reports&mode=reports&f=' . $forum_id . '&t=' . $topic_id, true, $user->session_id),
'U_MCP_QUEUE' => $u_mcp_queue,
'S_TOPIC_TYPE_SWITCH' => ($s_type_switch == $s_type_switch_test) ? -1 : $s_type_switch_test,
));
Код: Выделить всё
//-- mod : apiv ----------------------------------------------------------------
//-- add
if ( $config['avatar_topics_last_poster_show'] )
{
$template->assign_var('AVATAR_MAX_DIMENSIONS', $config['avatar_max_dimensions']);
}
user_display_avatar($row, 'topic_first', 'recenttopicrow', $config['avatar_topics_first_poster_show']);
user_display_avatar($row, 'topic_last', 'recenttopicrow', $config['avatar_topics_last_poster_show']);
//-- fin mod : apiv ------------------------------------------------------------
находим:
Код: Выделить всё
<!-- IF recenttopicrow.S_UNREAD_TOPIC --><a href="{recenttopicrow.U_NEWEST_POST}">{NEWEST_POST_IMG}</a><!-- ENDIF -->
Код: Выделить всё
<!-- IF recenttopicrow.TOPIC_FIRST_POSTER_AVATAR -->
<table>
<tr>
<td width="{AVATAR_MAX_DIMENSIONS}">{recenttopicrow.TOPIC_FIRST_POSTER_AVATAR}</td>
<td>
<!-- ENDIF -->
Код: Выделить всё
</td>
<td class="row1" width="50" align="center"><p class="topicdetails">{recenttopicrow.REPLIES}</p></td>
Код: Выделить всё
<!-- IF recenttopicrow.TOPIC_FIRST_POSTER_AVATAR -->
</td>
</tr>
</table>
<!-- ENDIF -->
Код: Выделить всё
<p class="topicdetails" style="white-space: nowrap;">{recenttopicrow.LAST_POST_TIME}</p>
Код: Выделить всё
<!-- IF recenttopicrow.TOPIC_LAST_POSTER_AVATAR -->
<table>
<tr>
<td width="{AVATAR_MAX_DIMENSIONS}">{recenttopicrow.TOPIC_LAST_POSTER_AVATAR}</td>
<td>
<!-- ENDIF -->
Код: Выделить всё
</td>
</tr>
<!-- BEGINELSE -->
Код: Выделить всё
<!-- IF recenttopicrow.TOPIC_LAST_POSTER_AVATAR -->
</td>
</tr>
</table>
<!-- ENDIF -->
Код: Выделить всё
<p class="gensmall">{L_POST_BY_AUTHOR} {recenttopicrow.LAST_POST_AUTHOR_FULL}
{L_POSTED_ON_DATE} {recenttopicrow.LAST_POST_TIME}
в них LAST_POST_AUTHOR_FULL заменяем на TOPIC_AUTHOR_FULL, чтобы показать автора темы (первого сообщения), а не последнего.
в них LAST_POST_TIME заменяем на FIRST_POST_TIME, чтобы показать время первого сообщения (время создания темы), а не последнего сообщения
Не забываем сохранять изменения, чистить кеш. Ну и всего наилучшего!!!
И на всякий случай, так как изменения немного сложноваты, прикладываю свой файл:
В любой непонятной ситуации – ложись спать!
- DeaDRoMeO
- Старожил Форума
- Сообщения: 16763
- Стаж: 13 лет 2 месяца
- Откуда: Витебск
- Контактная информация:
Avatar of poster on Index and Viewforum phpbb3
Спасибо отличный материал)))
На вопросы, связанные с phpBB, по ЛС не отвечаю !!!
- boroda-max
- Активно осваиваю Форум
- Сообщения: 180
- Стаж: 11 лет 6 месяцев
- Откуда: CCCР. Ленинград
- Контактная информация:
Avatar of poster on Index and Viewforum phpbb3
tralan, Александр, спасибо большое! Но мод упорно выборочно подставляет аватарки......
- tralan
- Активно осваиваю Форум
- Сообщения: 235
- Стаж: 11 лет 4 месяца
- Откуда: Таганрог
- Контактная информация:
Avatar of poster on Index and Viewforum phpbb3
У вас только в списке форумов не выводятся случайные аватары?boroda-max писал(а):Но мод упорно выборочно подставляет аватарки
А как в списке тем и в моде "Последние сообщения"?
Проверьте правки в файле functions_display.php, есть там код?:
Код: Выделить всё
//-- mod : apiv ----------------------------------------------------------------
//-- add
user_display_avatar($row, 'forum_last', 'forumrow', $config['avatar_forums_last_poster_show']);
//-- fin mod : apiv ------------------------------------------------------------
и код функции user_display_avatar такой?:
Код: Выделить всё
//-- mod : apiv ----------------------------------------------------------------
//-- add
function user_display_avatar($row, $prefix = '', $tpl_switch, $display)
{
global $config, $template;
$avatar = unserialize($row[$prefix . '_poster_avatar']);
if ( $avatar['width'] >= $avatar['height'] )
{
$avatar_width = ($avatar['width'] > $config['avatar_max_dimensions']) ? $config['avatar_max_dimensions'] : $avatar['width'];
$avatar_height = ($avatar_width == $config['avatar_max_dimensions']) ? round($config['avatar_max_dimensions'] / $avatar['width'] * $avatar['height']) : $avatar['height'];
}
else
{
$avatar_height = ($avatar['height'] > $config['avatar_max_dimensions']) ? $config['avatar_max_dimensions'] : $avatar['height'];
$avatar_width = ($avatar_height == $config['avatar_max_dimensions']) ? round($config['avatar_max_dimensions'] / $avatar['height'] * $avatar['width']) : $avatar['width'];
}
if ( !$display || empty($row[$prefix . '_poster_avatar']) )
{
$template->alter_block_array($tpl_switch, array(
strtoupper($prefix) . '_POSTER_AVATAR' => get_user_avatar('', 0, 40, 40),
strtoupper($prefix) . '_POSTER_AVATAR_MARGIN' => ($avatar_width == $config['avatar_max_dimensions']) ? 5 : ($config['avatar_max_dimensions'] - $avatar_width + 5),
), true, 'change');
}
else
{
$template->alter_block_array($tpl_switch, array(
strtoupper($prefix) . '_POSTER_AVATAR' => get_user_avatar($avatar['avatar'], $avatar['type'], $avatar_width, $avatar_height),
strtoupper($prefix) . '_POSTER_AVATAR_MARGIN' => ($avatar_width == $config['avatar_max_dimensions']) ? 5 : ($config['avatar_max_dimensions'] - $avatar_width + 5),
), true, 'change');
}
}
//-- fin mod : apiv ------------------------------------------------------------
В любой непонятной ситуации – ложись спать!
- tralan
- Активно осваиваю Форум
- Сообщения: 235
- Стаж: 11 лет 4 месяца
- Откуда: Таганрог
- Контактная информация:
Avatar of poster on Index and Viewforum phpbb3
Обнаружилась еще одна проблемка с выводом случайных аватарок. Оказалось что поля forum_last_poster_avatar, topic_first_poster_avatar, topic_last_poster_avatar , после установки мода, для пользователей без аватарок тоже заполняются, поэтому случайные аватары выводились крупные (не 40Х40, а 100Х100), вот пример:
пользователь с аватаром:
пользователь без аватара:
поэтому ранее описанное мной условие и код в функции user_display_avatar неполные:
для устранения данной проблемы нужно еще проверять - пустое или не пустое значение аватара (есть или нет название файла аватара, на картинках они подчеркнуты ) и в коде найти:
и заменить на:
Всем удачи!
пользователь с аватаром:
пользователь без аватара:
поэтому ранее описанное мной условие и код в функции user_display_avatar неполные:
Код: Выделить всё
if ( !$display || empty($row[$prefix . '_poster_avatar']) )
{
$template->alter_block_array($tpl_switch, array(
strtoupper($prefix) . '_POSTER_AVATAR' => get_user_avatar('', 0, 40, 40),
strtoupper($prefix) . '_POSTER_AVATAR_MARGIN' => ($avatar_width == $config['avatar_max_dimensions']) ? 5 : ($config['avatar_max_dimensions'] - $avatar_width + 5),
), true, 'change');
}
Код: Выделить всё
if ( !$display || empty($row[$prefix . '_poster_avatar']) )
Код: Выделить всё
if ( !$display || empty($row[$prefix . '_poster_avatar']) || $avatar['avatar'] == '' )
Последний раз редактировалось tralan 19 фев 2013, 20:03, всего редактировалось 1 раз.
В любой непонятной ситуации – ложись спать!
- boroda-max
- Активно осваиваю Форум
- Сообщения: 180
- Стаж: 11 лет 6 месяцев
- Откуда: CCCР. Ленинград
- Контактная информация:
Avatar of poster on Index and Viewforum phpbb3
да, один в один,tralan писал(а):Проверьте правки в файле
исправил...tralan писал(а):user_display_avatar неполные:
Александр, а что скажите?
ABDev писал(а):Код: Выделить всё
# #-----[ OPEN ]------------------------------------------------ # includes/acp/acp_forums.php # #-----[ FIND ]------------------------------------------------ # // On add, add empty forum_options... else do not consider it (not updating it) # #-----[ BEFORE, ADD ]----------------------------------------- # //-- mod : apiv ---------------------------------------------------------------- //-- add $forum_data += array('forum_last_poster_avatar' => ''); //-- fin mod : apiv ------------------------------------------------------------ # #-----[ SAVE/CLOSE ALL FILES ]-------------------------------- # # EoM
- tralan
- Активно осваиваю Форум
- Сообщения: 235
- Стаж: 11 лет 4 месяца
- Откуда: Таганрог
- Контактная информация:
Avatar of poster on Index and Viewforum phpbb3
не выводятся случайные только в списке форумов?
а откуда эта правка, в инстале этого мода такого нетАлександр, а что скажите?
В любой непонятной ситуации – ложись спать!
- boroda-max
- Активно осваиваю Форум
- Сообщения: 180
- Стаж: 11 лет 6 месяцев
- Откуда: CCCР. Ленинград
- Контактная информация:
Avatar of poster on Index and Viewforum phpbb3
Александр, в 166 сообщении я говорил что все "перерыл" ссылка на сообщение ABDev сайт ABDev
- tralan
- Активно осваиваю Форум
- Сообщения: 235
- Стаж: 11 лет 4 месяца
- Откуда: Таганрог
- Контактная информация:
Avatar of poster on Index and Viewforum phpbb3
boroda-max писал(а):ссылка на сообщение ABDev сайт ABDev
Эта правка для исправления ошибки создания и редактирования форумов.boroda-max писал(а):Александр, а что скажите?
Я по совету Атлант-19 поступил по другому:
через php myadmin, в таблице phpbb_forums, для поля forum_last_poster_avatar, в таблице phpbb_topics - для поля topic_first_poster_avatar и topic_last_poster_avatar установил значение по умолчанию NULL и все работает.
Об ошибках, которые появлялись, я писал. Мод конечно в установке сложноватый. В общем я все делал так: скачал мод из этой темы (версия 1.3.0), установил все по инструкции, установил полям значение по умолчанию (NULL), сделал дополнительные правки, о которых я писал выше (эти правки предназначены для объединения этого мода и модов "Случайные аватары" и "Последние сообщения"). Вот, и как не странно, все работает, пока больше никаких ошибок не появилось.
Если обычно у меня что-то не устанавливается, я возвращаю все правки назад и делаю все сначала с удвоенной внимательностью. Могу Вам посоветовать только это.
В любой непонятной ситуации – ложись спать!
- boroda-max
- Активно осваиваю Форум
- Сообщения: 180
- Стаж: 11 лет 6 месяцев
- Откуда: CCCР. Ленинград
- Контактная информация:
Avatar of poster on Index and Viewforum phpbb3
Спасибо большое Александр, так как пхпАдмин начал общаться со мной с ошибки (#1067 - Invalid default value for 'forum_last_poster_avatar'), пойду путем - вернуть исходное-поставить-тестить-сносить
- tralan
- Активно осваиваю Форум
- Сообщения: 235
- Стаж: 11 лет 4 месяца
- Откуда: Таганрог
- Контактная информация:
Avatar of poster on Index and Viewforum phpbb3
boroda-max, появились на моем форуме новые пользователи и новые сообщения (после установки мода) и заметил туже ошибку:
Проанализировав ситуацию, понял, что ошибка возникает только в списке форумов, в списке тем (где есть первое и последнее сообщение) - нет. Начал искать и нашел в инсталляции в скрипте db_update.php идет первоначальная запись данных в поля forum_last_poster_avatar, topic_first_poster_avatar и topic_last_poster_avatar. Но в запросе из скрипта выбираются только те пользователи у которых есть свой аватар, т.е. не во все строки в таблицах БД в эти поля записывается информация.
Решил попробовать перезапустить скрипт (обновить инфу в полях), но переделав запрос, чтобы выбирались все пользователи и обрабатывались все строки в таблицах phpbb_forums и phpbb_topics.
Т.е. первый раз запустил скрипт - деинсталлировал, а во второй раз запустил - установил.
После этого завел нового пользователя, создал в "сомнительном" форуме сообщение - ошибка больше не повторилась.
Если захочешь - поэкспериментируй, переделанный скрипт здесь: НО ПЕРЕД ЭТИМ ДЕЛАЙ BACKUP БД !!!!!!!
Проанализировав ситуацию, понял, что ошибка возникает только в списке форумов, в списке тем (где есть первое и последнее сообщение) - нет. Начал искать и нашел в инсталляции в скрипте db_update.php идет первоначальная запись данных в поля forum_last_poster_avatar, topic_first_poster_avatar и topic_last_poster_avatar. Но в запросе из скрипта выбираются только те пользователи у которых есть свой аватар, т.е. не во все строки в таблицах БД в эти поля записывается информация.
Решил попробовать перезапустить скрипт (обновить инфу в полях), но переделав запрос, чтобы выбирались все пользователи и обрабатывались все строки в таблицах phpbb_forums и phpbb_topics.
Т.е. первый раз запустил скрипт - деинсталлировал, а во второй раз запустил - установил.
После этого завел нового пользователя, создал в "сомнительном" форуме сообщение - ошибка больше не повторилась.
Если захочешь - поэкспериментируй, переделанный скрипт здесь: НО ПЕРЕД ЭТИМ ДЕЛАЙ BACKUP БД !!!!!!!
В любой непонятной ситуации – ложись спать!
- boroda-max
- Активно осваиваю Форум
- Сообщения: 180
- Стаж: 11 лет 6 месяцев
- Откуда: CCCР. Ленинград
- Контактная информация:
Avatar of poster on Index and Viewforum phpbb3
Спасибо огромное!tralan писал(а):НО ПЕРЕД ЭТИМ ДЕЛАЙ BACKUP БД !!!!!!!
- tralan
- Активно осваиваю Форум
- Сообщения: 235
- Стаж: 11 лет 4 месяца
- Откуда: Таганрог
- Контактная информация:
Avatar of poster on Index and Viewforum phpbb3
Пробовали или еще нет?
Помогло?
Помогло?
В любой непонятной ситуации – ложись спать!
- boroda-max
- Активно осваиваю Форум
- Сообщения: 180
- Стаж: 11 лет 6 месяцев
- Откуда: CCCР. Ленинград
- Контактная информация:
Avatar of poster on Index and Viewforum phpbb3
tralan, помогло уже в том, что при смене кол-ва отображаемых тем (5 или 7 или 15.....и т.д.) аватарки пользователей "встают" на место (ранее баг был-не возвращались)