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

Дневник программиста

  • записей
    60
  • комментариев
    309
  • просмотров
    226 855

Заборол рекламу в подписях


Arhar

3 675 просмотров

				preg_match_all("#<a href=[\"'](http://|https://|ftp://|news://)?(\S+?)['\"]([^>]*?)".">(.+?)</a>#",$poster['signature'],$antiurlmatch);
			if(count($antiurlmatch))
			{
				$foundmatch=  $antiurlmatch[0];
				$startmatch=  $antiurlmatch[1];
				$urlmatch=	$antiurlmatch[2];
				$targetmatch= $antiurlmatch[3];
				$textmatch=   $antiurlmatch[4];
				if(count($foundmatch))
				{
					foreach($foundmatch as $id=>$match)
					{
						$poster['signature'] = str_replace($match,'<span style="display:none;"><![CDATA[<noindex>]]></span><a rel="nofollow" href="'.$startmatch[$id].$urlmatch[$id].'"'.$targetmatch[$id].'>'.$textmatch[$id].'</a><span style="display:none;"><![CDATA[</noindex>]]></span>',$poster['signature']);
					}
				}
			}

че-то как-то мне не нравится, но работает

9 комментариев


Рекомендуемые комментарии

не, там уже html

сохранение подписи в func_usercp.php

		$this->ipsclass->input['Post']		= $this->class->parser->pre_db_parse( $this->ipsclass->input['Post'] );

	if ($this->class->parser->error != "")
	{
		$this->ipsclass->Error( array( 'LEVEL' => 1, 'MSG' => $this->class->parser->error) );
	}

	//-----------------------------------------
	// Write it to the DB.
	//-----------------------------------------

	if ( $mem = $this->ipsclass->DB->simple_exec_query( array( 'select' => 'id', 'from' => 'member_extra', 'where' => 'id='.$this->ipsclass->member['id'] ) ) )
	{
		$this->ipsclass->DB->do_update( 'member_extra', array( 'signature' => $this->ipsclass->input['Post'] ), 'id='.$this->ipsclass->member['id'] );

Ссылка на комментарий

Но всё равно после этого при показе подписи вызывается pre_display_parse в topics.php:

		//-----------------------------------------
	// Siggie stuff
	//-----------------------------------------

	$row['signature'] = "";

	if ($poster['signature'] and $this->ipsclass->member['view_sigs'])
	{
		if ($row['use_sig'] == 1)
		{
			$this->parser->parse_html  = intval($this->ipsclass->vars['sig_allow_html']);
			$this->parser->parse_nl2br = 1;

			$row['signature'] = $this->ipsclass->compiled_templates['skin_global']->signature_separator( $this->parser->pre_display_parse($poster['signature']) );
		}
	}

И, кстати, довольно неразумно, при каждом выводе поста участника в parse_row, а не при парсинге пользователя в parse_member. По крайней мере в оригинале так, может ты уже переделал это.

Ссылка на комментарий
И, кстати, довольно неразумно, при каждом выводе поста участника в parse_row

точно

сделал так

		if ($poster['signature'] and $this->ipsclass->member['view_sigs'])
	{
		if ($row['use_sig'] == 1)
		{
			if($this->parsedsignature && $this->parsedsignature[$row['author_id']])
			{
				$row['signature'] = $this->parsedsignature[$row['author_id']];
			}
			else
			{
				$this->parser->parse_html  = intval($this->ipsclass->vars['sig_allow_html']);
				$this->parser->parse_nl2br = 1;
				$poster['signature'] = preg_replace( "#<!--sizeo:(.+?)-->(.+?)<!--/sizeo-->#"			   , "" , $poster['signature'] );
				$poster['signature'] = preg_replace( "#<!--fonto:(.+?)-->(.+?)<!--/fonto-->#"			   , "" , $poster['signature'] );
				$poster['signature'] = preg_replace( "#<!--sizec--></span><!--/sizec-->#i"," ",$poster['signature'] );
				$poster['signature'] = preg_replace( "#<!--fontc--></span><!--/fontc-->#i"," ",$poster['signature'] );
				preg_match_all("#<a href=[\"'](http://|https://|ftp://|news://)?(\S+?)['\"]([^>]*?)".">(.+?)</a>#",$poster['signature'],$antiurlmatch);
				if(count($antiurlmatch))
				{
					$foundmatch=  $antiurlmatch[0];
					$startmatch=  $antiurlmatch[1];
					$urlmatch=	$antiurlmatch[2];
					$targetmatch= $antiurlmatch[3];
					$textmatch=   $antiurlmatch[4];
					if(count($foundmatch))
					{
						foreach($foundmatch as $id=>$match)
						{
							$poster['signature'] = str_replace($match,'<span style="display:none;"><![CDATA[<noindex>]]></span><a rel="nofollow" href="'.$startmatch[$id].$urlmatch[$id].'"'.$targetmatch[$id].'>'.$textmatch[$id].'</a><span style="display:none;"><![CDATA[</noindex>]]></span>',$poster['signature']);
						}
					}
				}

				$row['signature'] = $this->ipsclass->compiled_templates['skin_global']->signature_separator( $this->parser->pre_display_parse($poster['signature']) );
				if(!$this->parsedsignature)
				{
					$this->parsedsignature=array();
				}
				$this->parsedsignature[$row['author_id']]=$row['signature'];
			}
		}
	}

Ссылка на комментарий
×
×
  • Создать...

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

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