Помогите разобраться с инклюдами

Форум для авторов модов для phpBB 3.0.x. Здесь можно попросить помощи в разработке у коллег.
Правила форума
Местная Конституция | Шаблон запроса | Документация (phpBB3) | Переход на 3.0.6 и выше | FAQ-3 (phpbb3) | Как задавать вопросы | Как устанавливать моды

Ваш вопрос может быть удален без объяснения причин, если на него есть ответы по приведённым ссылкам (а вы рискуете получить предупреждение ;) ).
Джумас
phpBB 1.2.1
Сообщения: 27
Стаж: 14 лет 5 месяцев
Благодарил (а): 1 раз

Помогите разобраться с инклюдами

Сообщение Джумас »

Хочу выводить на custom page например последние 5 тем форума, как это сделать на основе стандартного phpbb файла search.php c минимальными его переработками ?

Пример - копирую файл search.php -> search_custom.php ( в котором назначаю $search_id = request_var('search_id', 'newposts'); $config['topics_per_page']=5; ) и теперь при запросе http://myforum.loc/search_custom.php выводит 5 последних тем.

А теперь как этот результат вывести в нужном месте в custom page на подобии:

Код: Выделить всё

<?php
    define('IN_PHPBB', true);
    $phpbb_root_path = (defined('PHPBB_ROOT_PATH')) ? PHPBB_ROOT_PATH : './';
    $phpEx = substr(strrchr(__FILE__, '.'), 1);
    include($phpbb_root_path . 'common.' . $phpEx);

    // Start session management
    $user->session_begin();
    $auth->acl($user->data);
    $user->setup();

    page_header('Title Here');

    include($phpbb_root_path . '[b][color=#FF0000]search_custom[/color][/b].' . $phpEx);    

    $MY_CONTENT='
    text text text text text
    '.[b][color=#FF0000]$MY_SEARCH[/color][/b].'
    text text text text text
    ';

    $template->assign_var('MY_CONTENT', $MY_CONTENT);

    $template->set_filenames(array(
        'body' => 'yourpage_body.html',
    ));

    make_jumpbox(append_sid("{$phpbb_root_path}viewforum.$phpEx"));
    page_footer();
    ?>
Последний раз редактировалось Sheer 11.12.2012 11:57, всего редактировалось 1 раз.
Причина: bb-код
Аватара пользователя
Sheer
Former team member
Сообщения: 12113
Стаж: 19 лет 7 месяцев
Откуда: Калининград не Кенигсберг
Благодарил (а): 54 раза
Поблагодарили: 2756 раз

Re: Помогите разобраться с инклюдами

Сообщение Sheer »

Для размещения фрагмента кода есть специальный bb-код [/b]
Читаем Создание дополнительных (произвольных) страниц в стиле конференции

Код: Выделить всё

    $MY_CONTENT='
    text text text text text
    '.[b][color=#FF0000]$MY_SEARCH[/color][/b].'
    text text text text text
    ';
Неверно. В литералах bb-коды не используются.

Код: Выделить всё

include($phpbb_root_path . '[b][color=#FF0000]search_custom[/color][/b].' . $phpEx);
Это вообще нечто феерическое! Читать до понимания http://php.net/manual/ru/function.include.php
Изображение
Общие ошибки новичков (07.11.2005) & Как задавать вопросы
Мини FAQ
Если ничто другое не помогает, прочтите, наконец, инструкцию!
"Никакая инструкция не может перечислить всех обязанностей должностного лица, предусмотреть все отдельные случаи и дать вперёд соответствующие указания, а поэтому господа инженеры должны проявить инициативу и, руководствуясь знаниями своей специальности и пользой дела, принять все усилия для оправдания своего назначения".
Циркуляр Морского технического комитета №15 от 29.11.1910 г.
Джумас
phpBB 1.2.1
Сообщения: 27
Стаж: 14 лет 5 месяцев
Благодарил (а): 1 раз

Re: Помогите разобраться с инклюдами

Сообщение Джумас »

Sheer я спецом разместил тут код в цитате что бы выделить болдом и цветом куски кода на которые хотел обратить внимание, после твоей правки моего сообщения quote на code вылезли тэги bbcodа ... и нечто феерическое теперь этот код пытаться обсуждать

Ладно, по новой:

Код: Выделить всё

<?php
    define('IN_PHPBB', true);
    $phpbb_root_path = (defined('PHPBB_ROOT_PATH')) ? PHPBB_ROOT_PATH : './';
    $phpEx = substr(strrchr(__FILE__, '.'), 1);
    include($phpbb_root_path . 'common.' . $phpEx);

    // Start session management
    $user->session_begin();
    $auth->acl($user->data);
    $user->setup();

    page_header('Title Here');

    ######### ВОПРОС ТУТ: #########

    include($phpbb_root_path . 'search_custom.' . $phpEx);    

    $MY_CONTENT='
    text text text text text
    '.$MY_SEARCH.'
    text text text text text
    ';

    ####################################

    $template->assign_var('MY_CONTENT', $MY_CONTENT);

    $template->set_filenames(array(
        'body' => 'yourpage_body.html',
    ));

    make_jumpbox(append_sid("{$phpbb_root_path}viewforum.$phpEx"));
    page_footer();
    ?>

Аватара пользователя
Sheer
Former team member
Сообщения: 12113
Стаж: 19 лет 7 месяцев
Откуда: Калининград не Кенигсберг
Благодарил (а): 54 раза
Поблагодарили: 2756 раз

Re: Помогите разобраться с инклюдами

Сообщение Sheer »

Нифига не понял...

Не проще ли

Код: Выделить всё

$sql = 'SELECT * FROM '. TOPICS_TABLE .'
	ORDER BY topic_last_post_time 
	DESC LIMIT 0, 5';
$result = $db->sql_query($sql);	
while ($row = $db->sql_fetchrow($result))
{
	
	$template->assign_block_vars('row', array(
		'TOPIC_ID'		=> $row['topic_id'],
		'TOPIC_TITLE'	=> $row['topic_title'],
		// и так далее
	));
}
html

Код: Выделить всё

<!-- BEGIN row -->
	{row.TOPIC_ID} {TOPIC_TITLE} <!--// и так делее //--> <br />
<!-- END row -->
Изображение
Общие ошибки новичков (07.11.2005) & Как задавать вопросы
Мини FAQ
Если ничто другое не помогает, прочтите, наконец, инструкцию!
"Никакая инструкция не может перечислить всех обязанностей должностного лица, предусмотреть все отдельные случаи и дать вперёд соответствующие указания, а поэтому господа инженеры должны проявить инициативу и, руководствуясь знаниями своей специальности и пользой дела, принять все усилия для оправдания своего назначения".
Циркуляр Морского технического комитета №15 от 29.11.1910 г.
Джумас
phpBB 1.2.1
Сообщения: 27
Стаж: 14 лет 5 месяцев
Благодарил (а): 1 раз

Re: Помогите разобраться с инклюдами

Сообщение Джумас »

Конечно проще ! Только при таком коде будут выводится и темы которые юзеру читать не положено, не будут подсвечиваться непрочитанные темы и т.д и т.п. и прочие грабли могут вылезти, а в родном search.php всё что надо предусмотрено. Короче родной файл search дает что мне надо, осталось только совместить его с custom страницей вот тут у меня и проблемка
Аватара пользователя
Sheer
Former team member
Сообщения: 12113
Стаж: 19 лет 7 месяцев
Откуда: Калининград не Кенигсберг
Благодарил (а): 54 раза
Поблагодарили: 2756 раз

Re: Помогите разобраться с инклюдами

Сообщение Sheer »

Джумас писал(а):будут выводится и темы которые юзеру читать не положено
Это легко исправляется внесением некоторых изменений в sql-запрос.
Джумас писал(а):осталось только совместить
Давай-давай, я посмотрю :P
Изображение
Общие ошибки новичков (07.11.2005) & Как задавать вопросы
Мини FAQ
Если ничто другое не помогает, прочтите, наконец, инструкцию!
"Никакая инструкция не может перечислить всех обязанностей должностного лица, предусмотреть все отдельные случаи и дать вперёд соответствующие указания, а поэтому господа инженеры должны проявить инициативу и, руководствуясь знаниями своей специальности и пользой дела, принять все усилия для оправдания своего назначения".
Циркуляр Морского технического комитета №15 от 29.11.1910 г.
Джумас
phpBB 1.2.1
Сообщения: 27
Стаж: 14 лет 5 месяцев
Благодарил (а): 1 раз

Re: Помогите разобраться с инклюдами

Сообщение Джумас »

Sheer писал(а): Джумас писал(а):осталось только совместить


Давай-давай, я посмотрю :P
А это что реально мега сложная задача ? Неужели в phpbb так через задницу этот момент ?
Eugeny1987
phpBB 1.4.1
Сообщения: 43
Стаж: 14 лет 6 месяцев
Благодарил (а): 4 раза
Поблагодарили: 1 раз

Re: Помогите разобраться с инклюдами

Сообщение Eugeny1987 »

Джумас писал(а):Конечно проще ! Только при таком коде будут выводится и темы которые юзеру читать не положено, не будут подсвечиваться непрочитанные темы и т.д и т.п. и прочие грабли могут вылезти, а в родном search.php всё что надо предусмотрено. Короче родной файл search дает что мне надо, осталось только совместить его с custom страницей вот тут у меня и проблемка
Вот моя функция получающая последние 5 тем с форума, в зависимости от прав доступа, но без подсветки (не-)прочитанных тем
с кешированием!

Код: Выделить всё

	/** 
	* Получаем последние 5 тем с форума
	*/
	function GetLastPost() {
		global $db, $auth, $user, $template;
		global $phpbb_root_path, $phpEx, $config, $cache;
		$where = '';
		$forbidden_forums = $auth->acl_getf('!f_read', true);
		$forbidden_forums = array_unique(array_keys($forbidden_forums));
		if (sizeof($forbidden_forums)>0) {
			$where = 'WHERE '.$db->sql_in_set('forum.forum_id', $forbidden_forums, true, true);		}
		$result = $db->sql_query('SELECT forum.`forum_id`, forum.`forum_name`, user.`user_id`, user.`username`, post.`topic_replies_real`,post.`topic_replies`, post.`topic_last_post_time`, post.`topic_last_poster_colour`, post.`forum_id`,post.`topic_title`, post.`topic_last_post_id`, post.`topic_last_poster_name`, post.`topic_last_poster_id`, post.`topic_id` FROM '.TOPICS_TABLE.' post
				LEFT JOIN '.USERS_TABLE.' user on user.`user_id` = post.`topic_last_poster_id`
				LEFT JOIN '.FORUMS_TABLE.' forum on forum.`forum_id` = post.`forum_id` '.$where.' ORDER BY topic_last_post_time DESC LIMIT 0 , 5', 120);
		while ($post = $db->sql_fetchrow($result)) {
				$replies = ($auth->acl_get('m_approve', $post['forum_id'])) ? $post['topic_replies_real'] : $post['topic_replies'];
				$template->assign_block_vars('lastpost', array(
					'POST_TITLE'		=> $post['topic_title'],
					'POST_REPLIES'		=> $replies,
					'POST_TIME'			=> $user->format_date($post['topic_last_post_time']),
					'POST_FORUM_LINK'	=> append_sid("{$phpbb_root_path}viewforum.$phpEx",'f='.$post['forum_id']),
					'POST_FORUM_NAME'	=> $post['forum_name'],
					'LAST_POST_AUTHOR_FULL'		=> get_username_string('full', $post['topic_last_poster_id'], $post['topic_last_poster_name'], $post['topic_last_poster_colour']),
					'POST_AUTHOR'		=> '<a href="'.( append_sid("{$phpbb_root_path}memberlist.$phpEx",array( 'mode' => 'viewprofile' ,'u'=>$post['user_id']) ) ).'" style="color:#'.$post['topic_last_poster_colour'].'" class="username-coloured" target="_blank">'.$post['username'].'</a>',
					'THREAD_LINK'		=> append_sid("{$phpbb_root_path}viewtopic.$phpEx",array('f' => $post['forum_id'],'p' => $post['topic_last_post_id'])),
					'POST_LINK'			=> append_sid("{$phpbb_root_path}viewtopic.$phpEx",array('f' => $post['forum_id'],'p' => $post['topic_last_post_id'])).'#p'.$post['topic_last_post_id'],
				));
		}
		$template->assign_vars(
			array(
				'LAST_POST_IMG'	=> $user->img('icon_topic_latest', 'VIEW_LATEST_POST'),
			)
		);
		
	}
мой шаблон

Код: Выделить всё

<div class="forumbg">
	<div class="inner">
		<span class="corners-top">
	    	<span></span>
		</span>
            <ul class="topiclist">
            	<li class="header">
	                <dl class="icon">
    		        	<dt>Последнее на форуме</dt>
	                </dl>
                </li>
            </ul>
	</div>
</div>
	<div class="forabg">
    	<div class="inner">
			<ul class="topiclist">
				<li class="header">
					<dl class="icon">
						<dt class="forums" style="text-align:center;">Раздел</dt>
						<dd class="topics">Тема</dd>
						<dd class="posts">Ответы</dd>
						<dd class="lastpost"><span>Последнее сообщение</span></dd>
					</dl>
				</li>
			</ul>
		<!-- IF .lastpost -->
			<ul class="topiclist forums">
            <!-- BEGIN lastpost -->
	            <li class="row">
                	<dl>
                    	<dd style="width:250px; text-align:center;"><br/><a href="{lastpost.POST_FORUM_LINK}" class="forumtitle" target="_blank">{lastpost.POST_FORUM_NAME}</a></dd>
						<dd style="width:200px; text-align:center;"><br/><a href="{lastpost.THREAD_LINK}" class="forumtitle" target="_blank">{lastpost.POST_TITLE}</a></dd>
                        <dd class="posts">{lastpost.POST_REPLIES}<dfn>Темы</dfn></dd>
                        <dd style="width:186px; text-align:center;">{L_POST_BY_AUTHOR} {lastpost.LAST_POST_AUTHOR_FULL}<br>
                        <!-- IF not S_IS_BOT --><a href="{lastpost.POST_LINK}" target="_blank">{LAST_POST_IMG}</a><!-- ENDIF -->
                        <span class="lasttopic_time">{lastpost.POST_TIME}</span><br />
                        </dd>
					</dl></li>
			<!-- END lastpost -->                    
			</ul>
		<!-- ELSE -->
           <ul class="topiclist forums">
            	<li class="row">
	                <dl>
    		        	<dt style="text-align:center;">{L_NO_POSTS}</dt>
	                </dl>
                </li>
            </ul>
	    <!-- ENDIF -->
			<span class="corners-bottom">
				<span></span>
			</span>
		</div>
	</div>
Аватара пользователя
psyhosis
phpBB 1.4.2
Сообщения: 53
Стаж: 14 лет
Откуда: Томск
Благодарил (а): 1 раз
Поблагодарили: 1 раз

Re: Помогите разобраться с инклюдами

Сообщение psyhosis »

тихо тихо, погодите... задача то в общем какая?
я, не помню уже с помощь какого мода, вывел новости на морду сайта... там настроек была горка.... можно как раз не мудря его или доработать или просто настроиить, как же его а... recent topics...
и настроить можно черта лысого по мойма на нем... ничего не программируя :)
а то ща на луну скул запросы слать начнете :)
у мну ваще весь сайт (когда то был на всяком сброде инструментов) на базе phpBB, все на нем, база, юзвери... для каждой задачи только вот или сам чего нибудь ладишь или мод ищещь нужный...
Последний раз редактировалось psyhosis 11.12.2012 17:00, всего редактировалось 1 раз.
Первая компьютерная война началась после того, как пингвин разбил яблоком окно
Аватара пользователя
Палыч
Former team member
Сообщения: 9683
Стаж: 20 лет 4 месяца
Откуда: Питер
Благодарил (а): 3 раза
Поблагодарили: 454 раза

Re: Помогите разобраться с инклюдами

Сообщение Палыч »

Не все то WINDOWS, что висит... phpBB только учусь.
ICQ, email, ЛС - только для личных сообщений. Вопросы по phpbb только на форумах. По найму не работаю.
Джумас
phpBB 1.2.1
Сообщения: 27
Стаж: 14 лет 5 месяцев
Благодарил (а): 1 раз

Re: Помогите разобраться с инклюдами

Сообщение Джумас »

psyhosis писал(а):тихо тихо, погодите... задача то в общем какая?
Основная задача "Помогите разобраться с инклюдами", а не найти чужой мод - для поиска модов вроде другая ветка, а тут вроде как форум авторов ;)

Да и кроме просто решения задачи бывает чисто спортивный интерес разобраться, понять ... ну пускай и с чужой подсказки
Eugeny1987
phpBB 1.4.1
Сообщения: 43
Стаж: 14 лет 6 месяцев
Благодарил (а): 4 раза
Поблагодарили: 1 раз

Re: Помогите разобраться с инклюдами

Сообщение Eugeny1987 »

Джумас писал(а):Да и кроме просто решения задачи бывает чисто спортивный интерес разобраться, понять ... ну пускай и с чужой подсказки
получаем идентификаторы форумов запрещенных к просмотру для текущего пользователя

Код: Выделить всё

$forbidden_forums = $auth->acl_getf('!f_read', true);
		$forbidden_forums = array_unique(array_keys($forbidden_forums));
если в массиве идентификаторов есть хоть 1 элементов, формируем условие для mysql запроса и потом указываем его в запросе

Код: Выделить всё

if (sizeof($forbidden_forums)>0) {
			$where = 'WHERE '.$db->sql_in_set('forum.forum_id', $forbidden_forums, true, true);		}
запрос

Код: Выделить всё

$result = $db->sql_query('SELECT forum.`forum_id`, forum.`forum_name`, user.`user_id`, user.`username`, post.`topic_replies_real`,post.`topic_replies`, post.`topic_last_post_time`, post.`topic_last_poster_colour`, post.`forum_id`,post.`topic_title`, post.`topic_last_post_id`, post.`topic_last_poster_name`, post.`topic_last_poster_id`, post.`topic_id` FROM '.TOPICS_TABLE.' post
				LEFT JOIN '.USERS_TABLE.' user on user.`user_id` = post.`topic_last_poster_id`
				LEFT JOIN '.FORUMS_TABLE.' forum on forum.`forum_id` = post.`forum_id` '.$where.' ORDER BY topic_last_post_time DESC LIMIT 0 , 5', 120);
Аватара пользователя
psyhosis
phpBB 1.4.2
Сообщения: 53
Стаж: 14 лет
Откуда: Томск
Благодарил (а): 1 раз
Поблагодарили: 1 раз

Re: Помогите разобраться с инклюдами

Сообщение psyhosis »

тада я тоже нифига не понял, в чем собственно проблема то? не можете передать заинклюденному файлу параметры или как? как то не просматривается проблема как таковая... то есть она как бы есть, но какая именно, непонятно :)
Первая компьютерная война началась после того, как пингвин разбил яблоком окно
Джумас
phpBB 1.2.1
Сообщения: 27
Стаж: 14 лет 5 месяцев
Благодарил (а): 1 раз

Re: Помогите разобраться с инклюдами

Сообщение Джумас »

psyhosis писал(а):тада я тоже нифига не понял, в чем собственно проблема то? не можете передать заинклюденному файлу параметры или как? как то не просматривается проблема как таковая... то есть она как бы есть, но какая именно, непонятно
Эх. как бы объяснить есть файл custom_page.php ( с шаблоном custom_page.html ) в нем надо вывести результат отработки custom_search.php ( например с шаблоном custom_searh.html или добавить код этого шаблона непосредственно в custom_page.php ) ... вариант или подправив чуть custom_page.php, или иным образом заставить его положить собранный шаблон в некоторую переменную ( в моем примере кода $MY_SEARCH ), ну или другие какие варианты совместить это всё ?!
Аватара пользователя
psyhosis
phpBB 1.4.2
Сообщения: 53
Стаж: 14 лет
Откуда: Томск
Благодарил (а): 1 раз
Поблагодарили: 1 раз

Re: Помогите разобраться с инклюдами

Сообщение psyhosis »

а прямо жестко обязательно cusom page чтобы было? цель какая то преследуется? мобыть взять и средствами php пропарсить результат работы search.... эх, не выйдет так... ну средствами html выдрать из загруженного saerch....
а, вот еще, коли си равно search модифицируется, не проще ли его сразу причесать под нужный вид, который вы хотите заполучить в custom page ?
Первая компьютерная война началась после того, как пингвин разбил яблоком окно

Вернуться в «Для авторов (phpBB 3.0.x)»