Перейти к контенту
  • 0

Как определить ссылку текущей страницы?


L0ader

Вопрос

Т.к. код будет работать на всех страницах форума необходимо определить на какой странице он находится.

Какой параметр за это отвечает?

Есть ли параметр определяющий главную страницу?

 

Ссылка на комментарий
Поделиться на других сайтах

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

  • 0

Ну есть способы из нативного php функцией getenv( 'REQUEST_URI' ) или суперглобальной переменной $_SERVER( 'REQUEST_URI' ) . В IPB есть своя my_getenv( 'REQUEST_URI' ), которая выбирает походящий из предыдущих двух способов. Это выдаст ту строку, которая сейчас в адресной строке браузера. Это не всегда удобно, т.к. часто одна и та же страница бывает доступна по куче адресов, плюс строка эта изменяется при смене настроек ЧПУ.
Поэтому удобнее пользовать уже разобранный массив из IPSRegistry::instance()->fetchRequest() или $this->registry->fetchRequest() , обычно он в конструкторе класса выводится в $this->request . Там массив всех параметров запроса (и GET и POST) приведенных контроллером к стандартному виду. На главной будет параметр act = idx , остальные можно определять по app , module , section , do .
 

Ссылка на комментарий
Поделиться на других сайтах

  • 0

На главной будет параметр act = idx

На дефолтном движке да, именно так.

У меня IPB 1.3 сильно переписанный, но наверное многое сходно и в более старших версиях.

Давным-давно писал себе функцию определения запрошенной страницы. Заранее извиняюсь за длинную портянку.

	function b_text_generate()
	{
		global $DB, $INFO, $ibforums, $std;
		if($ibforums->input['t']>0)
		{
			$DB->query("SELECT title FROM ibf_topics WHERE tid = ".$ibforums->input['t']);
			$t = $DB->fetch_row();
			$page = "";
			if( !(intval($ibforums->input['st'])%intval($ibforums->vars['display_max_posts'])) and (intval($ibforums->input['st'])/$ibforums->vars['display_max_posts'])>0 )$page = " (страница ".((intval($ibforums->input['st'])/$ibforums->vars['display_max_posts'])+1).")";
			return "просмотрена тема <a href='".$ibforums->vars['board_url']."/index.php?showtopic=".$ibforums->input['t']."&st=".$ibforums->input['st']."'>".$t['title'].$page."</a>.";
		}
		elseif($_SERVER['REQUEST_URI'] == "/journal.php" or $_SERVER['REQUEST_URI'] == "/journal.php?")
		{
			return "просмотрена <a href='".$ibforums->vars['board_url']."/journal.php'>главная страница журналов</a>.";
		}
		elseif( stristr($_SERVER['REQUEST_URI'],"journal.php") and intval($ibforums->input['user'])==0 and $ibforums->input['list'] == "allpost" )
		{
			return "просмотрена <a href='".$ibforums->vars['board_url'].$_SERVER['REQUEST_URI']."'>страница календаря журналов</a>.";
		}
		elseif( stristr($_SERVER['REQUEST_URI'],"journal.php") and intval($ibforums->input['user'])==0 and $ibforums->input['list'] != "allpost" )
		{
			return "просмотрена <a href='".$ibforums->vars['board_url'].$_SERVER['REQUEST_URI']."'>какая-то страница журналов</a>.";
		}
		elseif( $ibforums->input['showuser']>0 or ($ibforums->input['act']=="Profile" and $ibforums->input['MID']>0) )
		{
			if($ibforums->input['showuser']<1)$ibforums->input['showuser'] = $ibforums->input['MID'];
			$DB->query("SELECT name FROM ibf_members WHERE id = ".$ibforums->input['showuser']);
			$t = $DB->fetch_row();
			return "просмотрен <a href='".$ibforums->vars['board_url']."/index.php?showuser=".$ibforums->input['showuser']."'>профиль пользователя ".$t['name']."</a>.";
		}
		elseif($ibforums->input['act'] == "Shop")
		{
			if( (!$ibforums->input['CODE'] or $ibforums->input['CODE'] == "00") and !$ibforums->input['cat'])
			{
				return "просмотрена <a href='".$ibforums->vars['board_url'].$_SERVER['REQUEST_URI']."'>главная страница магазина</a>.";
			}
			elseif($ibforums->input['CODE'] == "01" and $ibforums->input['cat'])
			{
				$DB->query("SELECT id, cname FROM ibf_ls_cats WHERE id = ".$ibforums->input['cat']);
				$t = $DB->fetch_row();
				return "просмотрена витрина магазина «<a href='".$ibforums->vars['board_url']."/index.php?act=Shop&CODE=01&cat=".$t['id']."'>".$t['cname']."</a>».";
			}
			elseif($ibforums->input['CODE'] == "02" and $ibforums->input['id'])
			{
				$DB->query("SELECT id, sname FROM ibf_ls_products WHERE id = ".$ibforums->input['id']);
				$t = $DB->fetch_row();
				return "в магазине просмотрен товар «<a href='".$ibforums->vars['board_url']."/index.php?act=Shop&CODE=02&id=".$t['id']."'>".$t['sname']."</a>».";
			}
			else
			{
				return "просмотрена <a href='".$ibforums->vars['board_url'].$_SERVER['REQUEST_URI']."'>какая-то страница магазина</a>.";
			}
		}
		elseif(intval($ibforums->input['user'])>0)
		{
			$DB->query("SELECT name FROM ibf_members WHERE id = ".$ibforums->input['user']);
			$t = $DB->fetch_row();
			return "просмотрена <a href='http://".$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI']."'>страница журнала ".$t['name']."</a>.";
		}
		elseif($_SERVER['REQUEST_URI'] == "/" or $_SERVER['REQUEST_URI'] == "/index.php" or $_SERVER['REQUEST_URI'] == "/index.php?")
		{
			return "просмотрена <a href='".$ibforums->vars['board_url']."/index.php'>главная страница сайта</a>.";
		}
		elseif($ibforums->input['act']=="calendar")
		{
			return "просмотрена <a href='".$ibforums->vars['board_url'].$_SERVER['REQUEST_URI']."'>страница календаря</a>.";
		}
		elseif($ibforums->input['act']=="idx")
		{
			return "просмотрена <a href='".$ibforums->vars['board_url']."/index.php?act=idx'>главная страница форума</a>.";
		}
		elseif( $ibforums->input['act']=="SC" and intval($ibforums->input['c']) > 0 )
		{
			$DB->query("SELECT name FROM ibf_categories WHERE id = ".$ibforums->input['c']);
			$t = $DB->fetch_row();
			return "просмотрена категория <a href='".$ibforums->vars['board_url']."/index.php?act=SC&c=".$ibforums->input['c']."'>".$t['name']."</a>.";
		}
		elseif( intval($ibforums->input['showforum']) > 0 or ( intval($ibforums->input['f']) > 0 and $ibforums->input['act']=="SF" ) )
		{
			if( intval($ibforums->input['showforum'])<1 )$ibforums->input['showforum'] = intval($ibforums->input['f']);
			$DB->query("SELECT name FROM ibf_forums WHERE id = ".$ibforums->input['showforum']);
			$t = $DB->fetch_row();
			return "просмотрен форум <a href='".$ibforums->vars['board_url']."/index.php?showforum=".$ibforums->input['showforum']."'>".$t['name']."</a>.";
		}
		elseif($ibforums->input['act']=="Help")
		{
			return "просмотрена страница <a href='".$ibforums->vars['board_url']."/index.php?act=Help'>справочной системы</a>.";
		}
		elseif( $ibforums->input['showtopic']=="0" and $ibforums->input['view']=="findpost" and intval($ibforums->input['p'])>0 )
		{
			return "запрошен поиск <a href='".$ibforums->vars['board_url'].$_SERVER['REQUEST_URI']."'>сообщения по прямой ссылке</a>.";
		}
		elseif( $ibforums->input['act']=="Search" and $ibforums->input['CODE']!="00" )
		{
			return "просмотрена страница результатов поиска.";
		}
		elseif($ibforums->input['act']=="Search")
		{
			return "просмотрена форма поиска.";
		}
		elseif($ibforums->input['act']=="Reg" and $ibforums->input['CODE']=="00")
		{
			return "просмотрена страница регистрации.";
		}
		
		elseif($ibforums->input['act']=="Shoutbox")
		{
			return "просмотрена страница <a href='".$ibforums->vars['board_url']."/index.php?act=Shoutbox'>СМС-чата</a>.";
		}
		
		elseif($ibforums->input['act']=="Search" and $ibforums->input['CODE']=="getactive")
		{
			return "просмотрена страница <a href='".$ibforums->vars['board_url']."/index.php?act=Search&CODE=getactive'>активных тем</a>.";
		}
		elseif( ($ibforums->input['Login']=="Login" and $ibforums->input['CODE']=="00") or stristr($_SERVER['REQUEST_URI'],"act=Login&CODE=00") )
		{
			return "просмотрена страница авторизации.";
		}
		elseif($ibforums->input['act']=="Login" and $ibforums->input['CODE']=="01")
		{
			$DB->query("SELECT id, name FROM ibf_members WHERE name LIKE '".trim($ibforums->input['UserName'])."'");
			if($s = $DB->fetch_row())
			{
				$member_name = " Пользователь: <a href='".$ibforums->vars['board_url']."/index.php?showuser=".$s['id']."'><b>".$s['name']."</b></a>";
			}
			else
			{
				$member_name = "";
			}
			return "авторизация на форуме.".$member_name;
		}
		elseif($_SERVER['REQUEST_URI'] == "/txt/" or $_SERVER['REQUEST_URI'] == "/txt/index.php/")
		{
			return "просмотрена <a href='".$ibforums->vars['board_url'].$_SERVER['REQUEST_URI']."'>главная страница PDA-версии форума</a>.";
		}
		elseif(stristr($_SERVER['REQUEST_URI'],"/glossary.php/"))
		{
			return "просмотрена <a href='".$ibforums->vars['board_url'].$_SERVER['REQUEST_URI']."'>страница глоссария</a>.";
		}
		elseif( stristr($_SERVER['REQUEST_URI'],"act=Login&CODE=autologin&fromreg=1") )
		{
			$cookie_member_id = intval( $std->my_getcookie('member_id') );
			if($cookie_member_id>0)
			{
				$DB->query("SELECT name FROM ibf_members WHERE id = ".$cookie_member_id);
				$cookie_member_name = "";
				if($s = $DB->fetch_row())$cookie_member_name = "<br>Пользователь: <a href='".$ibforums->vars['board_url']."/index.php?showuser=".$cookie_member_id."'><b>".$s['name']."</b></a>";
			}
			return "просмотрена <a href='".$ibforums->vars['board_url'].$_SERVER['REQUEST_URI']."'> главная страница (успешная авторизация после регистрации)</a>. ".$cookie_member_name;
		}
		else
		{
			return "просмотрена <a href='".$ibforums->vars['board_url'].$_SERVER['REQUEST_URI']."'>какая-то страница</a>.";
		}
	}
Изменено пользователем FatCat
Ссылка на комментарий
Поделиться на других сайтах

  • 0

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

В результате получил пусть и кривоватую но работоспособную функцию.

Если у кого-то есть желание и возможность допилить мою идею (разработкой 5 строк кода назвать сложно) до статуса хука, отпишитесь в теме, распишу более подробно что и как сделал.

 

Ну и полученный результат - просмотр форума возможен только после установки аватара.

Ссылка на комментарий
Поделиться на других сайтах

Присоединиться к обсуждению

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

Гость
Ответить на вопрос...

×   Вы вставили отформатированный текст.   Удалить форматирование

  Допустимо не более 75 смайлов.

×   Ваша ссылка была автоматически заменена на медиа-контент.   Отображать как ссылку

×   Ваши публикации восстановлены.   Очистить редактор

×   Вы не можете вставить изображения напрямую. Загрузите или вставьте изображения по ссылке.

Зарузка...
×
×
  • Создать...

Важная информация

Находясь на нашем сайте, вы соглашаетесь на использование файлов cookie, а также с нашим положением о конфиденциальности Политика конфиденциальности и пользовательским соглашением Условия использования.