Seite 66 von 175

Verfasst: 28.06.2006 11:10
von mgutt
zuerst mal die neue version (auch im downloadpaket enthalten), denn in der letzten war ein kleiner bug:

Code: Alles auswählen

function append_sid($url, $non_html_amp = false, $seo_title = '')  // Seo Urls Begin Version 1.1.6
{
	global $SID, $phpEx, $topic_title, $forum_name;

	// if url contains a session we won't rewrite
	if ( !empty($SID) && !preg_match('#sid=#', $url) )
	{
		$url .= ( ( strpos($url, '?') !== false ) ?  ( ( $non_html_amp ) ? '&' : '&' ) : '?' ) . $SID;
		return $url;
	}

	//
	// USERSETTINGS BEGIN
	//

	// replace "true" with "false" to deactivate seo urls
	$seo_active = true;

	// Disallow rewritting for:
	// - specific url parms (f.e. 'mode=confirm', )
	// - files (f.e. "memberlist.$phpEx", )
	// - folders (f.e. 'includes/', )
	//
	$seo_forbidden = array(
		'login',
		'mode=confirm',
		'mark=topics',
		'view=',
	);

	//
	// USERSETTINGS END
	//

	// start rewritting if allowed
	if ( $seo_active )
	{
		foreach ( $seo_forbidden as $forbidden )
		{
			if ( $url == $forbidden || strpos($url, $forbidden) !== false )
			{
				$seo_active = false;
				break;
			}
		}
	}
	if ( !$seo_active || $url == './' )
	{
		return $url;
	}
	elseif ( $seo_active && !defined('IN_ADMIN') )
	{
		// Hash Fix: If hash is in the given URL it is seperated. This is caused by some incompatibility of some false written mods
		if (strpos($url, '#') !== false)
		{
			$hash = strstr($url, '#');
			$url = substr($url, 0, strpos($url, '#'));
		}
		else
		{
			$hash = '';
		}

		// Jumpbox Fix
		if ( strpos($url, 'viewforum') !== false && strpos($url, 'f=') === false )
		{
			return $url;
		}

		// Search Author's posts URL
		if ( strpos($url, 'search_author') !== false )
		{
			$author_name = substr(strrchr($url, 'search_author='), 14);
			if ( preg_match('#[^_a-zA-Z0-9-.]#', $author_name) )
			{
				return $url;
			}
		}

		// Rewrite Urls
		$url_amp = ( $non_html_amp ) ? '&' : '&';
		$url_parms = array( (strpos($url, 'highlight=') !== false && $url{strlen($url)-1} == '=' ? $url_amp . 'highlight=' : ''), $url_amp . 'start=0', $url_amp . 'postdays=0', $url_amp . 'postorder=asc', $url_amp . 'topicdays=0', ".$phpEx?", ".$phpEx", '=', '&', '&');
		$url_rparms = array(                                                                                                  '',                   '',                      '',                         '',                       '',        ',',   '.html', ',',     ',', ',');
		$url = str_replace($url_parms, $url_rparms, $url);
		$url = $url . ( strpos($url, '.html') !== false ? '' : '.html' );

		// Title to url - forums and topics need special settings
		if ( (!empty($forum_name) || !empty($seo_title) ) && strpos($url, 'viewforum') !== false )
		{
			$seo_title = empty($seo_title) ? $forum_name : $seo_title;
			$seo_base = 'viewforum';
			$seo_search = array($seo_base,'-,f,');
			$seo_replace = array(      '',  '-f');
			$seo_empty = 'forum';
		}
		elseif ( (!empty($topic_title) || !empty($seo_title) ) && strpos($url, 'viewtopic') !== false )
		{
			$seo_title = empty($seo_title) ? $topic_title : $seo_title;
			$seo_base = 'viewtopic';
			$seo_search = array($seo_base,'-,t,','-,p,');
			$seo_replace = array(      '',  '-t',  '-p');
			$seo_empty = 'topic';
		}

		// Title to url - replace special chars and build url
		if ( !empty($seo_base) && !empty($seo_title) && strpos($url, $seo_base) !== false )
		{
			// special chars
			$char_search = array(  'Ö', 'Ä', 'Ü', 'ö', 'ä','à','é','è','í', 'ü', 'ß',' ','.',',','"','&','<', '>',  '+','–','/','_',  '&');
			$char_replace = array('oe','ae','ue','oe','ae','a','e','e','i','ue','ss','-','-','-',      '',  'und',    '',     '','und','-','-','-','und');
			// generate url with title
			$seo_title = str_replace($char_search, $char_replace, strtolower($seo_title) . '-');
			if ( preg_match('#[^a-z0-9-]#', $seo_title) )
			{
				$seo_title = preg_replace('#[^\w- ]#', '', $seo_title);
			}
			// reduce hyphen to one
			$seo_title = preg_replace("#([\-])+#", "\\1", $seo_title);
			// replace empty title if necessary
			$url = $seo_title == '-' ? $seo_empty . $seo_title . $url : $seo_title . $url;
			// clean url
			$url = str_replace($seo_search, $seo_replace, $url);
		}
		// Hash Fix
		$url = $url . $hash;
	}
	return $url;
} // Seo Urls End

Verfasst: 28.06.2006 12:24
von heini
Was ein Code ist das denn? Wo kommt der denn rein?

Ciao

Martin

Verfasst: 28.06.2006 13:26
von Kortirion
Bezüglich http://www.phpbb.de/viewtopic.php?p=723839#723839

Jetzt geht der Server wieder...sorry für den Ausfall letzte N8. :oops:

Verfasst: 28.06.2006 15:11
von Raydan
Hallo zusammen :)

Ich habe wieder ein Problem mit diesem wirklich großartigen Mod.

In einem Thread mit mehreren Seiten ist es in der viewtopic.php unmöglich die Seiten zu wechseln. Die einzige Möglichkeit ist, es über die viewforum.php zu machen.

Beispiel:
Thread Seite 1 / 2, der Link auf Seite 2 sowie der "Weiter"-Link führen zu:
{url}unerwarteter-zuwachs-t83,,start,15.html
(Ein Komma zuviel)

Beispiel 2:
Thread auf Seite 2 / 2, der Link auf Seite 1 sowieso der "Zurück"-Link führen zu:
{url}unerwarteter-zuwachs-t83,.html
(Wieder ein Komma zuviel)

Daher meine Frage: Wo kommt dieses Komma her und wie bekomm ich es weg? ^^;

Die Datei kann man einsehen unter: http://www.nagerinfos.de/viewtopic.txt

Bin um jede Hilfe dankbar :)

Verfasst: 28.06.2006 16:06
von mgutt
@ raydan
Das liegt daran, weil der Programmierer des Mods "printer topic bzw. report post" die Urls falsch generiert (am Ende steht immer ein Ampersand, obwohl keine Variable mehr folgt). Aber ich habe mich entschieden anstatt dass jeder selbst die Urls anpasst, dass mein Code nun Fehler in der Url automatisch korrigiert, da ers häufiger vorkam, dass andere Mods schlichtweg falsch geschrieben wurden. Aber so spare ich mir auch Arbeit, weil man nicht andauernd anderer Leuts Mods umschreiben muss.

Ich habe zum Test eine extrem falsch Url eingegeben:

Code: Alles auswählen

echo(append_sid("viewtopic.$phpEx?&&?t==83&?&start===15&&&", '', 'Unerwarteter Zuwachs'));
Also mit vielen Gleichheits-, Frage- und Undzeichen. Ähnlich der Prüfung, ob ein Rautezeichen enthalten ist werden nun fehlerhafte Urls gesäubert und das Ergebnis ist dann:

Code: Alles auswählen

unerwarteter-zuwachs-t83,start,15.html
Damit steht dann die Version 1.1.7 (wie zuvor gefragt, muss man in der sessions.php einfach die bestehende Funktion "append_sid" von der 1. geschweiften bis zu letzten geschweiften klammer ersetzen)

Code: Alles auswählen

function append_sid($url, $non_html_amp = false, $seo_title = '')  // Seo Urls Begin Version 1.1.7
{
	global $SID, $phpEx, $topic_title, $forum_name;

	// if url contains a session we won't rewrite
	if ( !empty($SID) && !preg_match('#sid=#', $url) )
	{
		$url .= ( ( strpos($url, '?') !== false ) ?  ( ( $non_html_amp ) ? '&' : '&' ) : '?' ) . $SID;
		return $url;
	}

	//
	// USERSETTINGS BEGIN
	//

	// replace "true" with "false" to deactivate seo urls
	$seo_active = true;

	// Disallow rewritting for:
	// - specific url parms (f.e. 'mode=confirm', )
	// - files (f.e. "memberlist.$phpEx", )
	// - folders (f.e. 'includes/', )
	//
	$seo_forbidden = array(
		'login',
		'mode=confirm',
		'mark=topics',
		'view=',
	);

	//
	// USERSETTINGS END
	//

	// start rewritting if allowed
	if ( $seo_active )
	{
		foreach ( $seo_forbidden as $forbidden )
		{
			if ( $url == $forbidden || strpos($url, $forbidden) !== false )
			{
				$seo_active = false;
				break;
			}
		}
	}
	if ( !$seo_active || $url == './' )
	{
		return $url;
	}
	elseif ( $seo_active && !defined('IN_ADMIN') )
	{
		// Hash Fix: If hash is in the given URL it is seperated. This is caused by some incompatibility of some false written mods
		if (strpos($url, '#') !== false)
		{
			$hash = strstr($url, '#');
			$url = substr($url, 0, strpos($url, '#'));
		}
		else
		{
			$hash = '';
		}

		// Title is Array Fix: If topic or forum title is an array it is deleted. This is caused by some incompatibility of some false written mods
		if ( is_array($topic_title) )
		{
			$topic_title = '';
		}
		elseif ( is_array($forum_name) )
		{
			$forum_name = '';
		}

		// Jumpbox Fix
		if ( strpos($url, 'viewforum') !== false && strpos($url, 'f=') === false )
		{
			return $url;
		}

		// Search Author's posts url
		if ( strpos($url, 'search_author') !== false )
		{
			$author_name = substr(strrchr($url, 'search_author='), 14);
			if ( preg_match('#[^_a-zA-Z0-9-.]#', $author_name) )
			{
				return $url;
			}
		}

		// Rewrite url
		$url_amp = ( $non_html_amp ) ? '&' : '&';
		$url_parms = array((strpos($url, 'highlight=') !== false && $url{strlen($url)-1} == '=' ? $url_amp . 'highlight=' : ''),$url_amp . 'start=0',$url_amp . 'postdays=0',$url_amp . 'postorder=asc',$url_amp . 'topicdays=0',".$phpEx?",".$phpEx",'=','&','&','?');
		$url_rparms = array(                                                                                                 '',                  '',                     '',                        '',                      '',       ',',  '.html',',',    ',',',', '');
		$url = str_replace($url_parms, $url_rparms, $url);
		// Double Comma Fix: If a comma is repeated directly after an other the second one is deleted. This is caused by some incompatibility of some false written mods
		$url = preg_replace("#([\,])+#", "\\1", $url);
		// End Comma Fix: If a comma is the last char in the url it is deleted. This is caused by some incompatibility of some false written mods
		$url = rtrim($url, ",");
		// Build url
		$url = $url . ( strpos($url, '.html') !== false ? '' : '.html' );

		// Title to url - forums and topics need special settings
		if ( (!empty($forum_name) || !empty($seo_title) ) && strpos($url, 'viewforum') !== false )
		{
			$seo_title = empty($seo_title) ? $forum_name : $seo_title;
			$seo_base = 'viewforum';
			$seo_search = array($seo_base,'-,f,');
			$seo_replace = array(      '',  '-f');
			$seo_empty = 'forum';
		}
		elseif ( (!empty($topic_title) || !empty($seo_title) ) && strpos($url, 'viewtopic') !== false )
		{
			$seo_title = empty($seo_title) ? $topic_title : $seo_title;
			$seo_base = 'viewtopic';
			$seo_search = array($seo_base,'-,t,','-,p,');
			$seo_replace = array(      '',  '-t',  '-p');
			$seo_empty = 'topic';
		}

		// Title to url - replace special chars and build url
		if ( !empty($seo_base) && !empty($seo_title) && strpos($url, $seo_base) !== false )
		{
			// special chars
			$char_search = array(  'Ö', 'Ä', 'Ü', 'ö', 'ä','à','é','è','í', 'ü', 'ß',' ','.',',','"','&','<', '>',  '+','–','/','_',  '&');
			$char_replace = array('oe','ae','ue','oe','ae','a','e','e','i','ue','ss','-','-','-',      '',  'und',    '',     '','und','-','-','-','und');
			// generate url with title
			$seo_title = str_replace($char_search, $char_replace, strtolower($seo_title) . '-');
			if ( preg_match('#[^a-z0-9-]#', $seo_title) )
			{
				$seo_title = preg_replace('#[^\w- ]#', '', $seo_title);
			}
			// reduce hyphen to one
			$seo_title = preg_replace("#([\-])+#", "\\1", $seo_title);
			// replace empty title if necessary
			$url = $seo_title == '-' ? $seo_empty . $seo_title . $url : $seo_title . $url;
			// clean url
			$url = str_replace($seo_search, $seo_replace, $url);
		}
		// Hash Fix
		$url = $url . $hash;
	}
	return $url;
} // Seo Urls End
Kortirion hat geschrieben:Bezüglich http://www.phpbb.de/viewtopic.php?p=723839#723839

Jetzt geht der Server wieder...sorry für den Ausfall letzte N8. :oops:
brauchst du noch Hilfe oder hast Du meine Antwort verarbeiten können und damit den Fehler bändigen können?


@ all
Entschuldigt die letzten Updates, aber ich denke es ist besser für alle, wenn man evtl. Fehler aus anderen Mods herausfiltert, anstatt dass andauernd nachgebessert werden muss. Die meisten Mods sollten dann in Zukunft ohne jegliche Anpassungen funktionieren. Und ich denke das kommt jedem entgegen.

Verfasst: 28.06.2006 18:29
von IPB_Flüchtling
Ahoi,

kurzes Feedback zur Version 1.1.7: Bislang keine Fehler entdeckt! (kein Firefox-Problem, überall Bindestriche zwischen den Wörtern in den Titeln)

Danke! :P

LG, IPB_Flüchtling

Verfasst: 28.06.2006 18:34
von darklordi
hmm, ehm,
was genau muss ich jetzt wo ändern damit wirklich alle Beiträge die Bindestriche für die Leerzeilen in der url haben ?

Verfasst: 28.06.2006 18:35
von bazillus
ich hätte da noch einen Link bzw. eine Frage,

/album.php?user_id=2&sort_method=pic_time&sort_order=DESC&mode=list&type=pic&start=12
wird zu
/album,user_id,2,sort_method,pic_time,sort_order,DESC,mode,list,type,pic.html,start,12
mit einem 404er

verschiebt man beim Link, der mit dem 404 endet, das .html ans Ende des Links funktioniert er - Link sieht dann so aus:
album,user_id,2,sort_method,pic_time,sort_order,DESC,mode,list,type,pic,start,12.html

Hab mir die aktuelle Version nicht weiter angeschaut, begrenzt Du irgendwo die Anzahl der Variablen oder warum erscheint das .html zu früh?

Verfasst: 28.06.2006 18:41
von Kortirion
mgutt hat geschrieben:
Kortirion hat geschrieben:Bezüglich http://www.phpbb.de/viewtopic.php?p=723839#723839

Jetzt geht der Server wieder...sorry für den Ausfall letzte N8. :oops:
brauchst du noch Hilfe oder hast Du meine Antwort verarbeiten können und damit den Fehler bändigen können?
mgutt: Ich hab mich da ehrlich gesagt noch nicht an den Code gemacht (wie gesagt, das ist mir im Ggs. zu dem Last Post on Index nicht so wichtig). Wenn ich die Zeit finde, werde ich mich aber wohl testweise mal dran setzen.

Verfasst: 28.06.2006 19:09
von IPB_Flüchtling
@darklordi:

Du ersetzt die function append_sid in der session.php durch die Variante, die hier steht:

http://www.phpbb.de/viewtopic.php?p=724173#724173

@bazillus:

Wenn Du die Usersettings in mgutts function append_sid richtig setzt, müsste das 404er-Problem beseitigt sein:

Code: Alles auswählen

   // Disallow rewritting for: 
   // - specific url parms (f.e. 'mode=confirm', ) 
   // - files (f.e. "memberlist.$phpEx", ) 
   // - folders (f.e. 'includes/', ) 
   // 
   $seo_forbidden = array(
      'login',
      'mode=confirm',
      'mark=topics',
      'view=',
      'mode=unread',
      'return_to_list',
   );
Dort musst Du halt noch etwas wie sort_method ins Array aufnehmen.

LG, IPB_Flüchtling