Seite 2 von 4

Re: [BETA] Image First Postletters 2.0.0

Verfasst: 01.07.2012 18:59
von Miriam
preg_match()?
Ist das nicht ein bißchen zu "mächtig"?

Probiere das:

Code: Alles auswählen

<?php
$string = 'Ändere den Text, wie Du willst. Der erste Buchstabe (hier Ä) wird ersetzt.'; // hier muß Deine Nachricht rein.
$string = ltrim($string); //falls jemand mit einem Leerzeichen anfängt
$firstletter = substr($string, 0, 1); //und hier konmmt der erste Buchstabe
$initial = '<img src="' . strtolower($firstletter)  . '.gif" alt="' . $firstletter . '" /> '; // Du brauchst ä.gif, ö.gif, ü.gif ... Oder welcher Buchstabe auch immer vorn dran ist.
$string = substr_replace($string, $initial, 0, 1);
print $string; // Testausgabe
?>

Re: [BETA] Image First Postletters 2.0.0

Verfasst: 01.07.2012 20:12
von Perlchamp
@Miriam:
ich habe einmal ein echo absetzen lassen und da sehen die Umlaute sehr komisch aus.
(ein Echo vom Wert der Variablen $first_letter)

Miriam, wenn die Umlaute als solche nicht einmal erkannt werden bzw. nicht "ä", "ö" oder "ü" lauten, sondern cryptisch (wie auch immer) aussehen, dann klappt dein Beispiel auch nicht!
Im Grunde machst du ja nichts anderes als ich, mit dem Unterschied, dass ich preg_-Befehle benutze und nicht trimme (ich denke, dies sollte an dieser Stelle bereits vorher schon erledigt sein).
Wegen der "Mächtigkeit" hast du Recht, aber ich vertraue diesen str-Befehlen nicht so sehr und auert auch nicht länger.

Frage:
sind Umlaute in Dateinamen auf Linux-Servern, etc. erlaubt ?

vielen Dank im Voraus
so long

Re: [BETA] Image First Postletters 2.0.0

Verfasst: 01.07.2012 20:28
von BNa
Alle Dateien, die mit diesem Mod in Zusammenhang stehen, müssen via Notepad++ mit UTF8 ohne BOM kodiert sein, dann geht das.

Ferner ein kleines str_replace()

Finde

Code: Alles auswählen

$firstletter = substr($string, 0, 1); 
$initial = '<img src="' . strtolower($firstletter)  
Ersetze mit

Code: Alles auswählen

$firstletter = strtolower(substr($string, 0, 1)); 
$initial = '<img src="' . str_replace(array('ä','ö','ü'), array('ae','oe','ue'), $firstletter) 
Die Dateinamen dann dementsprechend ae.gif, und so weiter.

Dateinamen mit Umlauten sollte man auf Unix Servern, wenn möglich, vermeiden.
Perlchamp hat geschrieben:ich vertraue diesen str-Befehlen nicht so sehr
str_*() Befehle sind in den allermeisten Fällen performanter als preg_*() Konstrukte.
Die Geister scheiden sich allerdings bei regex'en. Diese sind nur mit preg_*() Befehlen möglich.

Re: [BETA] Image First Postletters 2.0.0

Verfasst: 01.07.2012 21:05
von Miriam
$firstletter = strtolower(substr($string, 0, 1)); ist irgendwie doof, dann wird, bei Nichtverfügbarkeit des Buchstabenbildes der mittels alt angezeigte Buchstabe auch klein angezeigt. Das nur nebenbei.

Jetzt müssen wir nur noch flink checken, ob $firstletter auch ein Buchstabe und nicht nur ein Character ist und dann haben wir's doch. Das könnte dann nach ein wenig Code-Tuning über den Parameter $count geprüft werden.

mixed str_replace ( mixed $search , mixed $replace , mixed $subject [, int &$count ] )

Viel Spaß!

Re: [BETA] Image First Postletters 2.0.0

Verfasst: 01.07.2012 21:17
von BNa
Das schöne hier dran ist, das man sich wunderbar ergänzen kann. Find ich gut.

Re: [BETA] Image First Postletters 2.0.0

Verfasst: 02.07.2012 15:45
von Perlchamp
@Miri(am) und BNa:
tolle Teamarbeit ! super ! (wäre toll, dies würde öfter passieren).
ich informiere mich jetzt erst einmal über die Befehle (damit ich sie verstehe) und dann werde ich versuchen, dies alles umzusetzen.
Ich melde mich wieder.

Zusatz am 02.07.2012, 18:15:
nein, klappt nicht, da das ursächliche Problem nicht gelöst wurde. Hier die Stelle der ORIGINAL-Modifikation in der viewtopic.php :

Code: Alles auswählen

	// Image First Postletter Begin
	if ($user->data['user_first_letter'])
	{
		$letter_count 	= (strlen($message));
		$letter_count 	= $letter_count -1;
		$first_letter 	= substr(($message), 0, 1);
		$rest_text		= substr(($message), 1, $letter_count);
		$letter_image 	= strtolower ($first_letter);
		$letter_path 	= "{$phpbb_root_path}styles/" . $user->theme['imageset_path'] . '/imageset/' . $user->data['user_lang'] . '/ifpl_images/';

		if (preg_match('/^[a-zA-Z]/', $first_letter))
		{
			$first_letter = '<img src="' . $letter_path  . $letter_image  . '.gif" alt="' . $first_letter . '" /> ';
		}

		$message = $first_letter . $rest_text;
	}
	// Image First Postletter End

wenn ich nun VOR

Code: Alles auswählen

if (preg_match('/^[a-zA-Z]/', $first_letter))
folgendes Echo absetze

Code: Alles auswählen

echo '# erster Buchstabe: ' . $first_letter . '<br />';
... bekomme ich folgenden Output angezeigt (in dem Thema sind 4 Beiträge: h..., h..., h..., ü...)
# erster Buchstabe: h
# erster Buchstabe: h
# erster Buchstabe: h
# erster Buchstabe: �
... mit den folgenden Debug-Meldungen

Code: Alles auswählen

[phpBB Debug] PHP Warning: in file [ROOT]/includes/functions.php on line 4904: Cannot modify header information - headers already sent by (output started at [ROOT]/viewtopic.php:1646)
[phpBB Debug] PHP Warning: in file [ROOT]/includes/functions.php on line 4906: Cannot modify header information - headers already sent by (output started at [ROOT]/viewtopic.php:1646)
[phpBB Debug] PHP Warning: in file [ROOT]/includes/functions.php on line 4907: Cannot modify header information - headers already sent by (output started at [ROOT]/viewtopic.php:1646)
[phpBB Debug] PHP Warning: in file [ROOT]/includes/functions.php on line 4908: Cannot modify header information - headers already sent by (output started at [ROOT]/viewtopic.php:1646)
... aber ich denke, dies kommt NUR vom echo-Befehl, den ich sowieso wieder entferne.
ALLE DAteien, die durch den Mod bearbeitet wurden, sind alle als "UTF-8 ohne BOM" abgespeichert, zusätzlich auch die HTML-Templates "overall_header.html" und "overall_footer.html"
dieses � wird in Folge dessen nicht erkannt, gematched und letztendlich nicht ersetzt durch "ue"

... dies :

Code: Alles auswählen

if (preg_match('/^[a-zA-Z]/', $first_letter))
		{
			$first_letter = '<img src="' . $letter_path  . $letter_image  . '.gif" alt="' . $first_letter . '" /> ';
		}
... hatte ich persönlich mit diesem ersetzt:

Code: Alles auswählen

if (preg_match('/^[a-zäöü]/i', $letter_image))
{
  // [+] CODG-Modifikation #3: arrays fuer das Ersetzen anlegen
  $arr_codg_suche   = array('ä','ö','ü');
  $arr_codg_ersatz  = array('ae','oe','ue');
  // [-] CODG-Modifikation #3: arrays fuer das Ersetzen anlegen
  // [+] CODG-Modifikation #4 (@BNa): bildname erstellen
  $letter_image     = str_replace($arr_codg_suche,$arr_codg_ersatz,$letter_image);
  // [-] CODG-Modifikation #4 (@BNa): bildname erstellen
  $first_letter = '<img src="' . $letter_path  . $letter_image  . '.gif" alt="' . $first_letter . '" /> ';
}
@Miri(am):

Code: Alles auswählen

$first_letter 	= substr(($message), 0, 1);
$letter_image 	= strtolower ($first_letter);
$first_letter = '<img src="' . $letter_path  . $letter_image  . '.gif" alt="' . $first_letter . '" /> ';
... dadurch wird das "alt="-Problem gelöst.
dieses "mixed" mag überhaupt nicht funktionieren (nur Fehlermeldungen, dass im php-Code Fehler sind). Entferne ich alle "mixed", dann wird das "," (Komma) in

Code: Alles auswählen

[, int &$count ]
moniert, entferne ich auch dieses, werden diesbezüglich keine Fehler angezeigt. Da ich mit [int &$count ] nichts anfangen kann, habe ich dies auch entfernt/entfernen müssen. Wahrscheinlich habe ich das "mixed" falsch eingesetzt ? Guckst du:

Code: Alles auswählen

$first_letter = '<img src="' . $letter_path  . mixed str_replace(mixed $codg_suche,mixed $codg_ersatz,mixed $first_letter[, int &$count ])  . '.gif" alt="' . $first_letter . '" /> ';
[/color]
vielen Dank
So long

Re: [BETA] Image First Postletters 2.0.0

Verfasst: 02.07.2012 19:32
von Perlchamp
@Würzi:
hi,
wenn ein Beitrag mit BBcode anfängt, weil das erste Wort z.B. fett sein soll, dann wird kein Bild angezeigt.
Kann man es irgendwie ändern, dass BBCode diesbezüglich ignoriert wird ?
Und sag' jetzt bitte nicht "das brauche ich nicht, fummel selbst etwas rum".
Dies sollte mit RegExen zu lösen sein, aber ich kenne mich diesbezüglich noch gar nicht aus.

Danke im Voraus
so long

Re: [BETA] Image First Postletters 2.0.0

Verfasst: 02.07.2012 19:42
von Miriam
mixed str_replace ( mixed $search , mixed $replace , mixed $subject [, int &$count ] )

Irgendwie hatte ich es geahnt, daß die Nichtlöschung der Variablentypen Probleme machen wird.
Die gehören natürlich nicht mit hinein --> Lies hier: str_replace()

Dein Code wird dann also zu:

Code: Alles auswählen

$first_letter = '<img src="' . $letter_path  . str_replace($codg_suche, $codg_ersatz, $first_letter, $count)  . '.gif" alt="' . $first_letter . '" /> '; 
Edit:
Bevor Du fragst, wieso da &$count stand und ich $count draus gemacht habe: Lies hier.

Re: [BETA] Image First Postletters 2.0.0

Verfasst: 02.07.2012 19:55
von Perlchamp
@Miri(am):
hi, danke für deine Antwort. Nun sehe ich schon klarer.

Code: Alles auswählen

$count
zählt also die Anzahl der Treffer (bzw. Ersetzungen) im überprüften String.
Wofür genau ist dies jetzt hilfreicht ? (dies erklärt sich mir noch nicht)

Auch wenn damit leider nicht das Hauptproblem gelöst wird, habe ich wieder etwas gelernt.

so long

Re: [BETA] Image First Postletters 2.0.0

Verfasst: 02.07.2012 20:04
von BNa
Bleiben Sie locker und gelöst. Ich werde das mal live überprüfen :wink: