Правка шаблона, страница тем.

Автор maxville, 11 февраля 2015, 08:05:06

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

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

maxville

Нужно чтобы на странице разделов отображались аватары пользователей в блоке [lastpost], как на главной.

На главной это осуществляется простой вставкой в BoardIndex.template вот такого куска скрипта в начало страницы:


// fetch last posters
$membs = array();
global $smcFunc;

foreach($context['categories'] as $category)
{
if(!empty($category['boards']))
{
foreach($category['boards'] as $b)
$membs[$b['last_post']['member']['id']] = $b['last_post']['member']['id'];
}
}
if(count($membs)>0)
{
$request =  $smcFunc['db_query']('','SELECT mem.id_member as ID_MEMBER, mem.avatar,
IFNULL(a.id_attach, 0) AS ID_ATTACH, a.filename, a.attachment_type as attachmentType
FROM {db_prefix}members AS mem
LEFT JOIN {db_prefix}attachments AS a ON (a.id_member = mem.id_member)
WHERE mem.id_member IN (' . implode(",",$membs) . ')',array());

$avvy = array();
if($smcFunc['db_num_rows']($request)>0)
{
while($row = $smcFunc['db_fetch_assoc']($request))
$avvy[$row['ID_MEMBER']] = $row['avatar'] == '' ? ($row['ID_ATTACH'] > 0 ? (empty($row['attachmentType']) ? $scripturl . '?action=dlattach;attach=' . $row['ID_ATTACH'] . ';type=avatar' : $modSettings['custom_avatar_url'] . '/' . $row['filename']) : '') : (stristr($row['avatar'], 'http://') ? $row['avatar'] : $modSettings['avatar_url'] . '/' . htmlspecialchars($row['avatar']));

$smcFunc['db_free_result']($request);
}
}



и вторая часть скрипта именно выводит картинку в указанном блоке, указанных размеров:


if(empty($settings['no_avvy']) && !$board['is_redirect'] && !empty($board['last_post']['id']))
echo '
<a href="' , $scripturl , '?action=profile;u=' .$board['last_post']['member']['id']. ';type=rss" class="floatleft" style="margin: 5px 5px 1em 0px;">
<img alt=""  class="avyframe" style="width: 35px; height: 35px;" src="' . (!empty($avvy[$board['last_post']['member']['id']]) ? $avvy[$board['last_post']['member']['id']] : $settings['images_url'].'/theme/guest.png') . '" />
</a>';


и появляется это:


т.е. узнать работает ли первая часть кода очень просто, если не отображает аватары, а выводит именно указанный guest.png, значит первая часть кода не активна что ли, хз

В MessageIndex.template именно такой случай, на всех аватарах показывает  guest.png, т.е. первая часть кода не работает.



Кто может подсказать в чём может быть проблема?

GeorG

А просто мод поставить, который делает тоже самое?
Avatar On Board - http://custom.simplemachines.org/mods/index.php?mod=1103
Верстка тем по шаблону, их доработка/переработка, переделка тем с версии smf 1.1 на smf 2.0. Примеры работ - insidestyle.ru
Установка модов (заточка под ваш форум); Моды под заказ; Обновление форума; Правильный перенос; Удаление/лечение вирусов; Устранения ошибок.
Обращаться в ЛС
Мой форум
Модуль анти-спама CleanTalk, сам пользуюсь
Сервера которыми сам пользуюсь - cadedic.ru

maxville

не, он мне не понравился, мне нужно в свой стиль влить, а там отдельной колонкой идёт. В общем, то что хотел с тем модом не получил :(

GeorG

Ну тогда видимо нужно и в файл шаблона MessageIndex.template.php делать ещё один запрос в БД (что не есть правильно).

Цитата: maxville от 11 февраля 2015, 10:23:17мне нужно в свой стиль влить, а там отдельной колонкой идёт.
Что-то мешает поменять стиль в моде?
Верстка тем по шаблону, их доработка/переработка, переделка тем с версии smf 1.1 на smf 2.0. Примеры работ - insidestyle.ru
Установка модов (заточка под ваш форум); Моды под заказ; Обновление форума; Правильный перенос; Удаление/лечение вирусов; Устранения ошибок.
Обращаться в ЛС
Мой форум
Модуль анти-спама CleanTalk, сам пользуюсь
Сервера которыми сам пользуюсь - cadedic.ru

maxville

Мешает то, что на то что есть сейчас уже убил много времени, и всё что нужно только (наверное) поправить первую часть кода который я привёл в первом сообщении. А с вашим модом придётся по новой всё разбирать и возиться. Разумеется, что если в течение дня не найдётся людей с возможностями помочь конкретно по первому моему посту, то после работы буду разбираться уже с существующим модом.

ЗЫ GeorG, вы смотрели на код который я привёл? Неужели одной правкой его дело не решить? Вы же на опыте :)

GeorG

Цитата: maxville от 11 февраля 2015, 11:25:44ЗЫ GeorG, вы смотрели на код который я привёл?
Да и видел там запрос в БД

$request =  $smcFunc['db_query']('','SELECT mem.id_member as ID_MEMBER, mem.avatar,
IFNULL(a.id_attach, 0) AS ID_ATTACH, a.filename, a.attachment_type as attachmentType
FROM {db_prefix}members AS mem
LEFT JOIN {db_prefix}attachments AS a ON (a.id_member = mem.id_member)
WHERE mem.id_member IN (' . implode(",",$membs) . ')',array());


Вы такой же делаете в шаблоне тем?
Верстка тем по шаблону, их доработка/переработка, переделка тем с версии smf 1.1 на smf 2.0. Примеры работ - insidestyle.ru
Установка модов (заточка под ваш форум); Моды под заказ; Обновление форума; Правильный перенос; Удаление/лечение вирусов; Устранения ошибок.
Обращаться в ЛС
Мой форум
Модуль анти-спама CleanTalk, сам пользуюсь
Сервера которыми сам пользуюсь - cadedic.ru

maxville


GeorG

А вы учитываете то, что в разных шаблонах, разные переменные?
Например, в файле шаблона тем, нет переменной - $context['categories'], а именно из неё берутся данные для файла шаблона разделов. Тут у вас вообще все переменные пустые получается.
Верстка тем по шаблону, их доработка/переработка, переделка тем с версии smf 1.1 на smf 2.0. Примеры работ - insidestyle.ru
Установка модов (заточка под ваш форум); Моды под заказ; Обновление форума; Правильный перенос; Удаление/лечение вирусов; Устранения ошибок.
Обращаться в ЛС
Мой форум
Модуль анти-спама CleanTalk, сам пользуюсь
Сервера которыми сам пользуюсь - cadedic.ru

maxville

Учитываю :)

у меня прописаны

function template_main()
{
   global $context, $settings, $options, $txt, $scripturl, $modSettings;

или в MessageIndex.template он вообще не используется - прописывай, не прописывай? Вроде должно всё учитываться.

GeorG

Цитата: maxville от 11 февраля 2015, 12:08:37или в MessageIndex.template он вообще не используется - прописывай, не прописывай?
Ещё раз - в файле шаблона тем, нет переменной - $context['categories']

Сами проверьте:

echo '<pre>';
print_r($context['categories']);
echo '</pre>';


Но там есть - $context['boards'], вот её смотрите.
У вас в коде, может её роль исполнять - $category['boards']
Верстка тем по шаблону, их доработка/переработка, переделка тем с версии smf 1.1 на smf 2.0. Примеры работ - insidestyle.ru
Установка модов (заточка под ваш форум); Моды под заказ; Обновление форума; Правильный перенос; Удаление/лечение вирусов; Устранения ошибок.
Обращаться в ЛС
Мой форум
Модуль анти-спама CleanTalk, сам пользуюсь
Сервера которыми сам пользуюсь - cadedic.ru

maxville

хм... а разве мы не создаём её сами?

foreach($context['categories'] as $category)
{...

upd
ага, теперь понял о чём вы. Сейчас попробую. Спасибо

GeorG

Верстка тем по шаблону, их доработка/переработка, переделка тем с версии smf 1.1 на smf 2.0. Примеры работ - insidestyle.ru
Установка модов (заточка под ваш форум); Моды под заказ; Обновление форума; Правильный перенос; Удаление/лечение вирусов; Устранения ошибок.
Обращаться в ЛС
Мой форум
Модуль анти-спама CleanTalk, сам пользуюсь
Сервера которыми сам пользуюсь - cadedic.ru

maxville

Цитата: GeorG от 11 февраля 2015, 12:21:47Из чего создаёте, из пустоты?

я понял про что вы, просто вы тогда не дописали еще сообщение, поэтому и сразу не дошло.

maxville

Спасибо GeorG за помощь, всё сделал.

нужно было для разделов заменить

foreach($context[[b]boards[/b]] as $bo)
{
  if(!empty($bo))
  {
    $membs[$bo['last_post']['member']['id']] = $bo['last_post']['member']['id'];
  }
}


для топиков

foreach($context[[b]topics[/b]] as $to)
{
  if(!empty($to))
  {
    $membs[$to['last_post']['member']['id']] = $to['last_post']['member']['id'];
  }
}


и во второй части кода, где есть boards заменить на topics.   smitten

PS плюсанул

Yarik

Цитата: GeorG от 11 февраля 2015, 09:07:54
А просто мод поставить, который делает тоже самое?
Avatar On Board - http://custom.simplemachines.org/mods/index.php?mod=1103
Не станет,даже вручную.Я пытался поставить,не удалось.
Попробую полностью вручную поставить.

GeorG

У меня установлен, правда не помню как его ставил.
Верстка тем по шаблону, их доработка/переработка, переделка тем с версии smf 1.1 на smf 2.0. Примеры работ - insidestyle.ru
Установка модов (заточка под ваш форум); Моды под заказ; Обновление форума; Правильный перенос; Удаление/лечение вирусов; Устранения ошибок.
Обращаться в ЛС
Мой форум
Модуль анти-спама CleanTalk, сам пользуюсь
Сервера которыми сам пользуюсь - cadedic.ru


Yarik

А по другому никак нельзя сделать?
Поиском не нашел,как делать выше толком не понял.Мод не ставится.

maxville

Цитата: digger® от 11 февраля 2015, 18:21:59имена переменных типа $bo и $to - печалька.

так мне они на один раз, прописал, и забыл. Для кого мне там расписывать boards и topics если сделано для себя и на вечно..

и насчёт запросов в шаблоне - спросите у http://www.smfpersonal.net/ с их шаблонов выдерал, моё только, как вы уже заметили - bo и to  :coolsmiley:

maxville

Ярик, вам моим способом же устроит? Или вы именно через мод хотите?

Yarik

Цитата: maxville от 11 февраля 2015, 19:07:38
Ярик, вам моим способом же устроит? Или вы именно через мод хотите?
Устроит,не совсем понятно что и где вставлять.Пробовал как в шапке тему,нечего не вышло.
Первый кусок кода я вставил,это ясно.А второй кусок кода куда конкретней?
И далее несовсем понятно где и что подменять?На что понятно.

maxville

#21
для BoardIndex.template

function template_main()
{
global $context, $settings, $options, $txt, $scripturl, $modSettings;


Код (вставить после) Выделить
// fetch last posters
$membs = array();
global $smcFunc;

foreach($context['categories'] as $category)
{
  if(!empty($category['boards']))
  {
   foreach($category['boards'] as $b)
    $membs[$b['last_post']['member']['id']] = $b['last_post']['member']['id'];
  }
}
if(count($membs)>0)
{
  $request =  $smcFunc['db_query']('','SELECT mem.id_member as ID_MEMBER, mem.avatar,
    IFNULL(a.id_attach, 0) AS ID_ATTACH, a.filename, a.attachment_type as attachmentType
    FROM {db_prefix}members AS mem
    LEFT JOIN {db_prefix}attachments AS a ON (a.id_member = mem.id_member)
    WHERE mem.id_member IN (' . implode(",",$membs) . ')',array());
 
  $avvy = array();
  if($smcFunc['db_num_rows']($request)>0)
  {
   while($row = $smcFunc['db_fetch_assoc']($request))
    $avvy[$row['ID_MEMBER']] = $row['avatar'] == '' ? ($row['ID_ATTACH'] > 0 ? (empty($row['attachmentType']) ? $scripturl . '?action=dlattach;attach=' . $row['ID_ATTACH'] . ';type=avatar' : $modSettings['custom_avatar_url'] . '/' . $row['filename']) : '') : (stristr($row['avatar'], 'http://') ? $row['avatar'] : $modSettings['avatar_url'] . '/' . htmlspecialchars($row['avatar']));

   $smcFunc['db_free_result']($request);
  }
}




echo '
<td class="lastpost">

/* The board's and children's 'last_post's have:
time, timestamp (a number that represents the time.), id (of the post), topic (topic id.),
link, href, subject, start (where they should go for the first unread post.),
and member. (which has id, name, link, href, username in it.) */


Код (заменить на) Выделить

echo '
<td class="lastpost">';

/* The board's and children's 'last_post's have:
time, timestamp (a number that represents the time.), id (of the post), topic (topic id.),
link, href, subject, start (where they should go for the first unread post.),
and member. (which has id, name, link, href, username in it.) */
if(empty($settings['no_avvy']) && !$board['is_redirect'] && !empty($board['last_post']['id']))
echo '
<a href="' , $scripturl , '?action=profile;u=' .$board['last_post']['member']['id']. ';type=rss" class="floatleft" style="margin: 5px 5px 1em 0px;">
<img alt=""  class="avyframe" style="width: 35px; height: 35px;" src="' . (!empty($avvy[$board['last_post']['member']['id']]) ? $avvy[$board['last_post']['member']['id']] : $settings['images_url'].'/theme/guest.png') . '" />
</a>';







для MessageIndex.template

function template_main()
{
global $context, $settings, $options, $txt, $scripturl, $modSettings;


Код (вставить после) Выделить
// fetch last posters
$membs = array();
global $smcFunc;

foreach($context[boards] as $bo)
{
  if(!empty($bo))
  {
    $membs[$bo['last_post']['member']['id']] = $bo['last_post']['member']['id'];
  }
}
if(count($membs)>0)
{
  $request =  $smcFunc['db_query']('','SELECT mem.id_member as ID_MEMBER, mem.avatar,
    IFNULL(a.id_attach, 0) AS ID_ATTACH, a.filename, a.attachment_type as attachmentType
    FROM {db_prefix}members AS mem
    LEFT JOIN {db_prefix}attachments AS a ON (a.id_member = mem.id_member)
    WHERE mem.id_member IN (' . implode(",",$membs) . ')',array());
 
  $avvy = array();
  if($smcFunc['db_num_rows']($request)>0)
  {
   while($row = $smcFunc['db_fetch_assoc']($request))
    $avvy[$row['ID_MEMBER']] = $row['avatar'] == '' ? ($row['ID_ATTACH'] > 0 ? (empty($row['attachmentType']) ? $scripturl . '?action=dlattach;attach=' . $row['ID_ATTACH'] . ';type=avatar' : $modSettings['custom_avatar_url'] . '/' . $row['filename']) : '') : (stristr($row['avatar'], 'http://') ? $row['avatar'] : $modSettings['avatar_url'] . '/' . htmlspecialchars($row['avatar']));

   $smcFunc['db_free_result']($request);
  }
}




echo '
<td class="lastpost">

/* The board's and children's 'last_post's have:
time, timestamp (a number that represents the time.), id (of the post), topic (topic id.),
link, href, subject, start (where they should go for the first unread post.),
and member. (which has id, name, link, href, username in it.) */


Код (заменить на) Выделить

echo '
<td class="lastpost">';

/* The board's and children's 'last_post's have:
time, timestamp (a number that represents the time.), id (of the post), topic (topic id.),
link, href, subject, start (where they should go for the first unread post.),
and member. (which has id, name, link, href, username in it.) */
if(empty($settings['no_avvy']) && !$board['is_redirect'] && !empty($board['last_post']['id']))
     echo '
     <a href="' , $scripturl , '?action=profile;u=' .$board['last_post']['member']['id']. ';type=rss" class="floatleft" style="margin: 5px 5px 1em 0px;">
      <img alt=""  class="avyframe" style="width: 35px; height: 35px;" src="' . (!empty($avvy[$board['last_post']['member']['id']]) ? $avvy[$board['last_post']['member']['id']] : $settings['images_url'].'/theme/guest.png') . '" />
     </a>';



// If Quick Moderation is enabled start the form.

Код (вставить перед) Выделить
foreach($context[topics] as $to)
{
  if(!empty($to))
  {
    $membs[$to['last_post']['member']['id']] = $to['last_post']['member']['id'];
  }
}
if(count($membs)>0)
{
  $request =  $smcFunc['db_query']('','SELECT mem.id_member as ID_MEMBER, mem.avatar,
    IFNULL(a.id_attach, 0) AS ID_ATTACH, a.filename, a.attachment_type as attachmentType
    FROM {db_prefix}members AS mem
    LEFT JOIN {db_prefix}attachments AS a ON (a.id_member = mem.id_member)
    WHERE mem.id_member IN (' . implode(",",$membs) . ')',array());
 
  $avvy = array();
  if($smcFunc['db_num_rows']($request)>0)
  {
   while($row = $smcFunc['db_fetch_assoc']($request))
    $avvy[$row['ID_MEMBER']] = $row['avatar'] == '' ? ($row['ID_ATTACH'] > 0 ? (empty($row['attachmentType']) ? $scripturl . '?action=dlattach;attach=' . $row['ID_ATTACH'] . ';type=avatar' : $modSettings['custom_avatar_url'] . '/' . $row['filename']) : '') : (stristr($row['avatar'], 'http://') ? $row['avatar'] : $modSettings['avatar_url'] . '/' . htmlspecialchars($row['avatar']));

   $smcFunc['db_free_result']($request);
  }
}


<td class="lastpost ', $alternate_class, '">

Код (вставить после) Выделить
<a href="' , $scripturl , '?action=profile;u=' .$topic['last_post']['member']['id']. ';type=rss" class="floatleft" style="margin: 5px 5px 1em 0px;">
<img alt=""  class="avyframe" style="width: 35px; height: 35px;" src="' . (!empty($avvy[$topic['last_post']['member']['id']]) ? $avvy[$topic['last_post']['member']['id']] : $settings['images_url'].'/theme/guest.png') . '" />
</a>


ну и картинку закиньте в папку вашего шаблона, images/theme/  Если такой папки нет - создайте её. Картинка прикреплена.

Yarik

Огромное спасибо,всё работает.Считаю что данный топик нужно перенести в полезные решения.У многих не ставится мод Avatar On Board,это решение как раз поможет.

Единственно что Вы не описали это куда закидывать картинку,у кого-то могут возникнуть с этим проблеммы

maxville

да я подумал в коде заметят куда обращение за ней идёт :)

поправил

Yarik

Отлично всё работает,мне правда пришлось немного код переписывать в самих файлах,но это из-за моих модов.Всё стало чудно и отлично работает. O0
Повторюсь ещё раз,теме место в полезных решениях.

Yarik

Цитата: digger® от 11 февраля 2015, 18:21:59
Не в тему, но запросы в шаблоне - муветон. И, имена переменных типа $bo и $to - печалька.
Этой ночью этот муветон всплыл в логах по полной программе.
Ошибки в MessageIndex.template тут - if (!empty ( $to )) и тут - if (!empty ( $bo )) . Никто не подскажет чем можно заменить эти переменные?
Если нет то прийдётся или откат делать назад или ковырять код самому.

GeorG

#26
Вряд ли то из-за "моветона"... Просто в шаблоне запросы в БД не делают, для этого есть файлы самого движка, в папке Sources. "Спецы" из smfpersonal, сделали запрос в шаблоне только потому, что эти изменения предназначены для отдельной темы, шаблоны которой они распространяют. Темы не делают изменений в самом движке.

Как именно ошибки выглядит в логах?
Верстка тем по шаблону, их доработка/переработка, переделка тем с версии smf 1.1 на smf 2.0. Примеры работ - insidestyle.ru
Установка модов (заточка под ваш форум); Моды под заказ; Обновление форума; Правильный перенос; Удаление/лечение вирусов; Устранения ошибок.
Обращаться в ЛС
Мой форум
Модуль анти-спама CleanTalk, сам пользуюсь
Сервера которыми сам пользуюсь - cadedic.ru

Yarik

Сейчас...Выглядят они так.Строки сами я указал выше.
http://""""""/index.php?board=61.0
8: Use of undefined constant topics - assumed
'topics'
Файл: /home/""""""/www/Themes/default/
MessageIndex.template.php
Строка: 194
http://""""""""/index.php?board=61.0
8: Use of undefined constant boards - assumed
'boards'
Файл: /home/"""""""/www/Themes/default/
MessageIndex.template.php
Строка: 21

Yarik

#28
187: {
188: echo '
189: <div class="pagesection">
190: <div class="pagelinks floatleft">' , $txt ['pages' ], ': ' , $context ['page_index' ], !empty( $modSettings ['topbottomEnable' ]) ? $context ['menu_separator' ] . '&nbsp;&nbsp;<a href="#bot"><strong>' . $txt ['go_down' ] . '</strong></a>' : '', '</div>
191: ', template_button_strip ($normal_buttons , 'right' ), '
192: </div>' ;
193:
==>194: foreach($context ['topics'] as $to )
195: {
196:   if(!empty( $to ))
197:   {
198: $membs [$to ['last_post' ][ 'member' ][ 'id' ]] = $to [ 'last_post' ][ 'member' ][ 'id' ];
199:   }
200: }
201:  if( count($membs )>0 )

и
17: // fetch last posters
18: $membs = array();
19: global $smcFunc;
20:
==>21: foreach( $context ['boards'] as $bo )
22: {
23: if(!empty( $bo ))
24: {
25: $membs [$bo ['last_post' ]['member' ][ 'id']] = $bo ['last_post' ][ 'member' ][ 'id' ];
26: }
27: }
28: if( count( $membs )>0 )

Извиняюсь за дабл-постинг,я с телефона.

digger®

Цитата: Yarik от 12 февраля 2015, 09:07:30
Сейчас...Выглядят они так.Строки сами я указал выше.
http://""""""/index.php?board=61.0
8: Use of undefined constant topics - assumed
'topics'
Файл: /home/""""""/www/Themes/default/
MessageIndex.template.php
Строка: 194
http://""""""""/index.php?board=61.0
8: Use of undefined constant boards - assumed
'boards'
Файл: /home/"""""""/www/Themes/default/
MessageIndex.template.php
Строка: 21
Нужно писать с кавычками
$context ['topics']
$context ['boards']

Yarik

#30
Ааааа,как же я это проглядел wallbash .Понял digger®,спасибо +,проверим только вечером...Отпишусь.
Георг + тоже.

Yarik

Цитата: digger® от 12 февраля 2015, 09:31:49
Нужно писать с кавычками
$context ['topics']
$context ['boards']
Благодарю,всё работает теперь отлично и без ошибок,проверил.
Топикастер исправьте ошибку в коде.

maxville


Yarik

Модераторы поправьте код плиз...

philosopher

модеры отпишитесь плиз когда код поправите, хочу установить уже все готовое без заморочек

Mavn

SimpleMachines Russian Community Team
п.1 Пройду курсы гадалок для определения исходного кода по скриншоту.

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

Yarik

Цитата: Mavn от 12 февраля 2015, 23:57:35
проверяйте
Mavn не в моём сообщении,в ответе #21 поправить код нужно.

philosopher

Кто может написать уже исправленный код?

philosopher

Ребят помогите, хочу установить, но тут все запутано в теме. Напишите плиз код заново уже готовый, другим наверняка тоже будет полезно. Буду благодарен.

GeorG

Мод установите, во втором сообщении ссылка. Там все сделано правильно, а тут какой-то адский вариант обсуждался, но почему-то всем понравился.
Верстка тем по шаблону, их доработка/переработка, переделка тем с версии smf 1.1 на smf 2.0. Примеры работ - insidestyle.ru
Установка модов (заточка под ваш форум); Моды под заказ; Обновление форума; Правильный перенос; Удаление/лечение вирусов; Устранения ошибок.
Обращаться в ЛС
Мой форум
Модуль анти-спама CleanTalk, сам пользуюсь
Сервера которыми сам пользуюсь - cadedic.ru