Перейти к публикации
View in the app

A better way to browse. Learn more.

Дизайн и модификация Invision Community

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Настройка RSS в IPB 2.3.6

Опубликовано:

Добрый день!

 

Подскажите, как настроить экспорт rss-потока в IPB 2.3.6, как это реализовано здесь, т.е. когда любое новое сообщение в отмеченных форумах отображается в ленте. В АЦ есть опция: "включать первое сообщение темы?", если ставить "Да", то будет отображаться только 1-е сообщение топика.

 

Спасибо!

Рекомендованные сообщения

Опубликовано:
Обратите внимание

"Board url", указанный вами в профиле, некорректен, либо недоступен на данный момент. Пожауйста, заполните его, потому что он скорее всего потребуется при диагностике вашей проблемы.

Опубликовано:

Настроить это никак, сделать можно только правкой исходного кода.

 

/sources/action_admin/rssexport.php

 

Найти:

 

			//--------------------------------------------
			// Build DB query
			//--------------------------------------------

			if ( $row['rss_export_include_post'] )
			{
				$this->ipsclass->DB->build_query( array( 'select' => 't.*',
														 'from'   => array( 'topics' => 't' ),
														 'where'  => "t.forum_id IN( ".$row['rss_export_forums']." ) AND t.state != 'link' AND t.approved=1",
														 'order'  => 't.'.$row['rss_export_order'].' '. $row['rss_export_sort'],
														 'limit'  => array( 0, $row['rss_export_count'] ),
														 'add_join' => array( 0 => array( 'select' => 'p.post',
																						  'from'   => array( 'posts' => 'p' ),
																						  'where'  => 't.topic_firstpost=p.pid',
																						  'type'   => 'left'
																			)           )
												)      );
			}
			else
			{
				$this->ipsclass->DB->build_query( array( 'select' => '*',
														 'from'   => 'topics',
														 'where'  => "forum_id IN( ".$row['rss_export_forums']." ) AND state != 'link' AND approved=1",
														 'order'  => $row['rss_export_order'].' '. $row['rss_export_sort'],
														 'limit'  => array( 0, $row['rss_export_count'] )
												)      );
			}

			//--------------------------------------------
			// Exec Query
			//--------------------------------------------

			$inner = $this->ipsclass->DB->exec_query();

 

И заменить на:

 

			//--------------------------------------------
			// Build DB query
			//--------------------------------------------

			if( $row['rss_export_include_post'] )
			{
				$pfx = $this->ipsclass->vars['sql_tbl_prefix'];
				$this->ipsclass->DB->allow_sub_select = 1;

				$inner = $this->ipsclass->DB->query( "SELECT t.*, p.* FROM (SELECT * FROM {$pfx}topics WHERE forum_id IN ({$row['rss_export_forums']}) AND state!='link' AND approved=1 ORDER BY {$row['rss_export_order']} {$row['rss_export_sort']} LIMIT 0,{$row['rss_export_count']}) t LEFT JOIN (SELECT MAX(pid) as pid, topic_id FROM {$pfx}posts GROUP BY topic_id) z ON z.topic_id=t.tid LEFT JOIN {$pfx}posts p ON p.pid=z.pid" );

				$this->ipsclass->DB->allow_sub_select = 0;
			}
			else
			{
				$this->ipsclass->DB->build_query( array( 'select' => '*',
														 'from'   => 'topics',
														 'where'  => "forum_id IN( ".$row['rss_export_forums']." ) AND state != 'link' AND approved=1",
														 'order'  => $row['rss_export_order'].' '. $row['rss_export_sort'],
														 'limit'  => array( 0, $row['rss_export_count'] )
												)      );

				//--------------------------------------------
				// Exec Query
				//--------------------------------------------

				$inner = $this->ipsclass->DB->exec_query();
			}

Опубликовано:
  • Автор

@siv1987, спасибо!

 

При такой модификации, в ленте отображается последнее сообщение из топика. Можно ли сделать так, чтобы все коммментарии из топиков в форумах, где разрешен экспорт? отображались в ленте и не удалялись из нее, когда в топике появятся новые комментарии?

Опубликовано:

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

Нет.

Опубликовано:
  • Автор

Нет.

 

Но на том форуме IPB 2.3.6 это каким-то образом реализовано. У него сразу сообщение в ленту экспортируется, и ссылка прямая на него, а не на топик

Изменено пользователем 25dekker25

Опубликовано:

У него сразу сообщение в ленту экспортируется, и ссылка прямая на него, а не на топик

Ну так и скажите, что хотите ссылку на последнее сообщение, а не непонято что.

 

Открыть тот же файл.

Найти

$this->ipsclass->vars['board_url'].'/index.php?showtopic='.$topic['tid'],

Заменить на

$this->ipsclass->vars['board_url'].'/index.php?showtopic='.$topic['tid'].'&view=findpost&p='.$topic['pid'],

 

Также найти

$this->ipsclass->vars['board_url'] . '/index.php?showtopic=' . $topic['tid']

и заменить на

$this->ipsclass->vars['board_url'] . '/index.php?showtopic=' . $topic['tid'].'&view=findpost&p='.$topic['pid']

 

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

Опубликовано:
  • Автор

@siv1987, теперь осталось построить очередь в ленте из постов. Т.е., любое сообщение с форума, где разрешен экспорт, попадало бы в ленту и там сохранялось.

 

Похоже за вывод информации в файле отвечает этот раздел:

 

//--------------------------------------------
// Build DB query
//--------------------------------------------

Опубликовано:

Что значит "очередь" и что значит "сохранялось"? Как оно может "сохраниться", если к теме выводиться одно последнее сообщение?

Опубликовано:
  • Автор

Что значит "очередь" и что значит "сохранялось"? Как оно может "сохраниться", если к теме выводиться одно последнее сообщение?

 

Посмотри, пожалуйста, в 1-м посте, как у него лента работает. В нее попадают все сообщения, при этом, если в топике появляется новое сообщение, то после обновления кэша, предыдущие сообщения того же топика из ленты не удаляется. Похоже, выдача "очереди" (списка новостей в ленте rss) у него в rssexport.php привязана не к топику, а к сообщению, т.е. IPB под новой новостью понимает не создание нового топика, а нового сообщения.

 

Вроде объяснил :)

Опубликовано:

В нее попадают все сообщения

Там только одно сообщение темы, где вы увидели все?

 

т.е. IPB под новой новостью понимает не создание нового топика, а нового сообщения.

В настройках фида есть критерии сортировки - по последнему сообщению.

Опубликовано:
  • Автор

Там только одно сообщение темы, где вы увидели все?

 

Ну вот, например, два подряд сообщения в ленте из топика "Бывает и такое мнение у людей =)" в 00:50 и 00:48 (15/03/13)

 

Или "Швейцария Франция Италия... взгляд на Вербье сквозь призму стериотипов!" 3 подряд сообщения 00:43, 00:42 и 00:38 (15/03/13)

Опубликовано:

Бгггг, ну раз так, откатите обратно первое изменение, и

 

                   $this->ipsclass->DB->build_query( array( 'select' => 't.*',
                                                            'from'   => array( 'topics' => 't' ),
                                                            'where'  => "t.forum_id IN( ".$row['rss_export_forums']." ) AND t.state != 'link' AND t.approved=1",
                                                            'order'  => 't.'.$row['rss_export_order'].' '. $row['rss_export_sort'],
                                                            'limit'  => array( 0, $row['rss_export_count'] ),
                                                            'add_join' => array( 0 => array( 'select' => 'p.post',
                                                                                             'from'   => array( 'posts' => 'p' ),
                                                                                             'where'  => 't.topic_firstpost=p.pid',
                                                                                             'type'   => 'left'
                                                                               )           )
                                                   )      );

замените на

 

					$this->ipsclass->DB->build_query( array( 'select' => 'p.*',
														 'from'   => array( 'posts' => 'p' ),
														 'where'  => "t.forum_id IN( ".$row['rss_export_forums']." ) AND t.state != 'link' AND t.approved=1",
														 'order'  => 'p.post_date '. $row['rss_export_sort'],
														 'limit'  => array( 0, $row['rss_export_count'] ),
														 'add_join' => array( 0 => array( 'select' => 't.*',
																						  'from'   =>  array( 'topics' => 't' ),
																						  'where'  => 't.tid=p.topic_id',
																						  'type'   => 'left'
																			)           )
												)      );

И еще

$class_rss->rss_unix_to_rfc( $topic['start_date'] )

заменить на

$class_rss->rss_unix_to_rfc( $topic['post_date'] )

 

Сортировка будет происходить по дате постов, в ац это уже нельзя будет настроить, только порядок - A-Z или Z-A.

 

ПС.

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

Опубликовано:
  • Автор

Сортировка будет происходить по дате постов, в ац это уже нельзя будет настроить, только порядок - A-Z или Z-A.

 

Сделал, теперь на эту строчку ругается:

 

$this->ipsclass->update_cache( array( 'name' => 'rss_export', 'deletefirst' => 1, 'donow' => 1, 'array' => 1 ) );

Опубликовано:
  • Автор

@siv1987, все в порядке. видать, я что-то неправильно скопировал, сорри.

 

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

 

Да, мне оба решения нравятся, посмотрю какое для моего форума более подходящее, то и оставлю.

 

Спасибо!

Опубликовано:

Запрос немного подправлен, скопируйте его еще раз.

Создайте аккаунт или войдите в него для комментирования

Сейчас на странице 0

  • Нет пользователей, просматривающих эту страницу.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.