Прошло пару лет, заглянул опять в движек, ностальгия пробила... Решил опять поиграться.
Поставил себе задание, вроде не особо сложное:
Отображать в профиле в разделе подписок на темы в случае если в теме есть новое сообщение значек со ссылкой перехода к последнему непрочитанному сообщению.
Теперь вопрос как и куда это использовать в файле sources -> action_public -> usercp.php
Имхо самая подходящая функция для этого это function tracker()
Код у нее большой, но навернео для удобства надо вставить сюда:
function tracker()
{
$this->output .= $this->ipsclass->compiled_templates['skin_ucp']->subs_header();
//-----------------------------------------
// Remap...
//-----------------------------------------
$remap = array( 'none' => 'subs_none_title',
'immediate' => 'subs_immediate',
'delayed' => 'subs_delayed',
'daily' => 'subs_daily',
'weekly' => 'subs_weekly'
);
//-----------------------------------------
// Get forums module
//-----------------------------------------
require_once( ROOT_PATH.'sources/action_public/forums.php' );
$this->forums = new forums();
$this->forums->ipsclass =& $this->ipsclass;
$this->forums->init();
//-----------------------------------------
// Are we checking for auto-prune?
//-----------------------------------------
$auto_explain = $this->ipsclass->lang['no_auto_prune'];
if ($this->ipsclass->vars['subs_autoprune'] > 0)
{
$auto_explain = sprintf( $this->ipsclass->lang['auto_prune'], $this->ipsclass->vars['subs_autoprune'] );
}
//-----------------------------------------
// Do we have an incoming date cut?
//-----------------------------------------
$this->ipsclass->input['datecut'] = isset($this->ipsclass->input['datecut']) ? intval($this->ipsclass->input['datecut']) : 0;
$date_cut = $this->ipsclass->input['datecut'] ? $this->ipsclass->input['datecut'] : 30;
$date_query = $date_cut != 1000 ? " AND t.last_post > '".(time() - ($date_cut*86400))."' " : "";
//-----------------------------------------
// Get read topic markers
//-----------------------------------------
$topic_array = array();
$forum_array = array();
if ( $this->ipsclass->vars['db_topic_read_cutoff'] )
{
$this->ipsclass->DB->simple_construct( array( 'select' => '*',
'from' => 'topic_markers',
'where' => "marker_member_id=".$this->ipsclass->member['id'],
) );
$this->ipsclass->DB->simple_exec();
while( $db_row = $this->ipsclass->DB->fetch_row() )
{
$markers_read = "";
$markers_read = unserialize(stripslashes($db_row['marker_topics_read']) );
//-----------------------------------------
// Got read topics?
//-----------------------------------------
if ( is_array( $markers_read ) and count( $markers_read ) )
{
foreach( $markers_read as $tid => $date )
{
$topic_array[ $tid ]['db_read'] = $date > $db_row['marker_last_cleared'] ? $date : $db_row['marker_last_cleared'];
}
}
else if( is_array( $markers_read ) and !count ( $markers_read ) )
{
$forum_array[] = $db_row['marker_forum_id'];
}
}
}
//-----------------------------------------
// Query the DB for the subby toppy-ics - at the same time
// we get the forum and topic info, 'cos we rule.
//-----------------------------------------
$this->ipsclass->DB->cache_add_query( 'ucp_get_topic_tracker', array( 'mid' => $this->ipsclass->member['id'], 'date_query' => $date_query ) );
$this->ipsclass->DB->cache_exec_query();
if ( $this->ipsclass->DB->get_num_rows() )
{
$last_forum_id = -1;
while( $topic = $this->ipsclass->DB->fetch_row() )
{
$topic['db_read'] = $topic_array[$topic['tid']]['db_read'] ? $topic_array[$topic['tid']]['db_read'] : 0;
if( $topic['db_read'] == 0 )
{
$topic['db_read'] = in_array($topic['forum_id'], $forum_array ) ? time() : 0;
}
//-----------------------------------------
// Got perms to see this forum?
//-----------------------------------------
if ( ! $this->ipsclass->forums->forum_by_id[ $topic['forum_id'] ] )
{
continue;
}
if ( $last_forum_id != $topic['forum_id'] )
{
$last_forum_id = $topic['forum_id'];
$this->output .= $this->ipsclass->compiled_templates['skin_ucp']->subs_forum_row($topic['forum_id'], $topic['forum_name']);
}
$topic['last_post_date'] = $this->ipsclass->get_date( $topic['last_post'], 'LONG' );
if ( $topic['description'] )
{
$topic['description'] .= "<br />";
}
$topic['track_started'] = $this->ipsclass->get_date( $topic['track_started'], 'LONG' );
$topic = $this->forums->parse_data($topic);
$this->output .= $this->ipsclass->compiled_templates['skin_ucp']->subs_row($topic, $remap[ $topic['topic_track_type'] ]);
}
}
else
{
$this->output .= $this->ipsclass->compiled_templates['skin_ucp']->subs_none();
}
// Build date box
$date_box = "<option value='1'>".$this->ipsclass->lang['subs_today']."</option>\n";
foreach( array( 1,7,14,21,30,60,90,365 ) as $day )
{
$selected = $day == $date_cut ? ' selected="selected"' : '';
$date_box .= "<option value='$day'$selected>".sprintf( $this->ipsclass->lang['subs_day'], $day )."</option>\n";
}
if ( $date_cut == 1000 )
{
$date_box .= "<option value='1000' selected='selected'>".$this->ipsclass->lang['subs_all']."</option>\n";
}
else
{
$date_box .= "<option value='1000'>".$this->ipsclass->lang['subs_all']."</option>\n";
}
$this->output .= $this->ipsclass->compiled_templates['skin_ucp']->subs_end($auto_explain, $date_box);
$this->page_title = $this->ipsclass->lang['t_welcome'];
$this->nav = array( "<a href='".$this->ipsclass->base_url."act=UserCP&CODE=00'>".$this->ipsclass->lang['t_title']."</a>" );
}
Все, на данном этапе я уже встал. Попытки вставить нужную строчку ни к чему не приводят. Может не туда вставлял...
Попытки сменить переменную на $topic в скине тоже ни к чему не привели.
Хочу обратить вниманеи что пока я просто объявляю что $topic['go_new_post'] должно выводить значек, и отображатся он будет в таком случае перед всеми темами в подписках. Но даже это у меня не выходит.
Вопрос к читателям, что я не учел в синтаксисе? Или где моя ошибка?
Находясь на нашем сайте, вы соглашаетесь на использование файлов cookie, а также с нашим положением о конфиденциальности Политика конфиденциальности и пользовательским соглашением Условия использования.
Вопрос
mrMad-Cat
Прошло пару лет, заглянул опять в движек, ностальгия пробила... Решил опять поиграться.
Поставил себе задание, вроде не особо сложное:
Отображать в профиле в разделе подписок на темы в случае если в теме есть новое сообщение значек со ссылкой перехода к последнему непрочитанному сообщению.
Тоесть вот этот значек:
Нашел в скине как это выглядит в просмотре тем:
skin_forum -> render_forum_row
Нашел в скине куда я хочу это вставить:
skin_ucp -> subs_row
вставить перед строчкой:
Здесь все вроде просто. Понятное дело что этого не достаточно и надо лезть теперь в файлы.
По логике я думаю что надо использовать файл sources -> action_public -> usercp.php
А пример можно брать с sources -> action_public -> topics.php
Тут уже сложнее, так как пхп я практически не знаю.
По моим предположениям в оригинальном решении за такую функцию отвечает кусок кода:
Правда коечто уже смутило - переменная используется $topic а не $data. Момента смены переменной я не нашел.
Чтобы не усложнять себе жизнь, времено выкенем все лишнее на проверку есть ли новые сообщения, и оставим только:
Пусть выводит вообще перед всеми темами.
Теперь вопрос как и куда это использовать в файле sources -> action_public -> usercp.php
Имхо самая подходящая функция для этого это function tracker()
Код у нее большой, но навернео для удобства надо вставить сюда:
Все, на данном этапе я уже встал. Попытки вставить нужную строчку ни к чему не приводят. Может не туда вставлял...
Попытки сменить переменную на $topic в скине тоже ни к чему не привели.
Хочу обратить вниманеи что пока я просто объявляю что $topic['go_new_post'] должно выводить значек, и отображатся он будет в таком случае перед всеми темами в подписках. Но даже это у меня не выходит.
Вопрос к читателям, что я не учел в синтаксисе? Или где моя ошибка?
Спасибо всем за помощь.
Ссылка на комментарий
Поделиться на других сайтах
1 ответ на этот вопрос
Рекомендуемые сообщения
Присоединиться к обсуждению
Вы можете ответить сейчас, а зарегистрироваться позже. Если у вас уже есть аккаунт, войдите, чтобы ответить от своего имени.