[BETA] Image First Postletters 2.0.0

In diesem Forum können Mod-Autoren ihre Mods vorstellen, die sich noch im Entwicklungsstatus befinden. Der Einbau in Foren im produktiven Betrieb wird nicht empfohlen.
Forumsregeln
phpBB 3.0 hat das Ende seiner Lebenszeit überschritten
phpBB 3.0 wird nicht mehr aktiv unterstützt. Insbesondere werden - auch bei Sicherheitslücken - keine Patches mehr bereitgestellt. Der Einsatz von phpBB 3.0 erfolgt daher auf eigene Gefahr. Wir empfehlen einen Umstieg auf die neuste phpBB-Version, welches aktiv weiterentwickelt wird und für welches regelmäßig Updates zur Verfügung gestellt werden.
Benutzeravatar
Miriam
Mitglied
Beiträge: 12310
Registriert: 13.10.2004 07:18
Kontaktdaten:

Re: [BETA] Image First Postletters 2.0.0

Beitrag 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
?>
Gruss, Miriam.
Ich schmeiß' alles hin und...
... lasse es liegen
Benutzeravatar
Perlchamp
Gesperrt
Beiträge: 431
Registriert: 27.02.2012 17:15

Re: [BETA] Image First Postletters 2.0.0

Beitrag 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
*** wer lesen kann ist klar im Vorteil ***
Cruisin' Orange - die Krönung unter den Styles
Benutzeravatar
BNa
Valued Contributor
Beiträge: 3169
Registriert: 12.04.2010 23:51
Kontaktdaten:

Re: [BETA] Image First Postletters 2.0.0

Beitrag 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.
Benutzeravatar
Miriam
Mitglied
Beiträge: 12310
Registriert: 13.10.2004 07:18
Kontaktdaten:

Re: [BETA] Image First Postletters 2.0.0

Beitrag 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ß!
Gruss, Miriam.
Ich schmeiß' alles hin und...
... lasse es liegen
Benutzeravatar
BNa
Valued Contributor
Beiträge: 3169
Registriert: 12.04.2010 23:51
Kontaktdaten:

Re: [BETA] Image First Postletters 2.0.0

Beitrag von BNa »

Das schöne hier dran ist, das man sich wunderbar ergänzen kann. Find ich gut.
Benutzeravatar
Perlchamp
Gesperrt
Beiträge: 431
Registriert: 27.02.2012 17:15

Re: [BETA] Image First Postletters 2.0.0

Beitrag 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
*** wer lesen kann ist klar im Vorteil ***
Cruisin' Orange - die Krönung unter den Styles
Benutzeravatar
Perlchamp
Gesperrt
Beiträge: 431
Registriert: 27.02.2012 17:15

Re: [BETA] Image First Postletters 2.0.0

Beitrag 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
*** wer lesen kann ist klar im Vorteil ***
Cruisin' Orange - die Krönung unter den Styles
Benutzeravatar
Miriam
Mitglied
Beiträge: 12310
Registriert: 13.10.2004 07:18
Kontaktdaten:

Re: [BETA] Image First Postletters 2.0.0

Beitrag 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.
Gruss, Miriam.
Ich schmeiß' alles hin und...
... lasse es liegen
Benutzeravatar
Perlchamp
Gesperrt
Beiträge: 431
Registriert: 27.02.2012 17:15

Re: [BETA] Image First Postletters 2.0.0

Beitrag 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
*** wer lesen kann ist klar im Vorteil ***
Cruisin' Orange - die Krönung unter den Styles
Benutzeravatar
BNa
Valued Contributor
Beiträge: 3169
Registriert: 12.04.2010 23:51
Kontaktdaten:

Re: [BETA] Image First Postletters 2.0.0

Beitrag von BNa »

Bleiben Sie locker und gelöst. Ich werde das mal live überprüfen :wink:
Zuletzt geändert von BNa am 03.07.2012 00:02, insgesamt 1-mal geändert.
Antworten

Zurück zu „[3.0.x] Mods in Entwicklung“