Automatische Links erzeugen

Fragen zur Implementierung und/oder Anpassung von ConPresso 3.x werden in diesem Forum diskutiert.
Benutzeravatar
MarkusR
Handbuchversteher
Beiträge: 7362
Registriert: 01.01.1970 01:00
Hat sich bedankt: 111 Mal
Danksagung erhalten: 934 Mal
Kontaktdaten:

Beitrag von MarkusR »

Zum einen sollten die Begriffe automatisch aus der Rubrik Glossar ermittelt werden und zum anderen ist es natürlich hübscher einen Link in der Form
<a href="/_style/detail.php?title=Hanf&rubric=Glossar">Hanf</a>
auszubilden :wink:

Ansonsten ist es genau der benötigte Codeschnipsel, der nun eben aus einer Abfrage sein Futter bekommen sollte... kannst Dich aber natürlich auch als Schreibkraft bezahlen lassen... :wink: :twisted: :rofl: :oops: ... SCNR
Ciao Markus
ConPresso-Module

Kein Support per PN!!! Für Fragen und Diskussionen ist das Forum da!

Succi recentis officinalis
Hochwertige Kräutersäfte und -Öle
Lufine
ConPresso-Checker
Beiträge: 127
Registriert: 01.09.2006 10:15
Hat sich bedankt: 1 Mal

Beitrag von Lufine »

Lass mich nicht dumm sterben ;-) ! Meine PHP-Kenntnisse reichen leider nur für kleine Änderungen und nicht für Abfragen dieser Art:

Code: Alles auswählen


if (ein Begriff im Titel eines Artikels der Rubrik "Glossar" auftaucht) {
   $template_datei = preg_replace(
                array(
                    '@Begriff@',
                ),
                array(
                    '<a href=\"/_style/detail.php?title=Begriff&rubric=Glossar">Begriff</a>',
                ),
                $template_datei
            );
}

Leider versteht PHP mich nicht ;-)
Benutzeravatar
MarkusR
Handbuchversteher
Beiträge: 7362
Registriert: 01.01.1970 01:00
Hat sich bedankt: 111 Mal
Danksagung erhalten: 934 Mal
Kontaktdaten:

Beitrag von MarkusR »

Code: Alles auswählen

<?php

$db_glossar = new db;
$replace = array();
$with = array();
$db_glossar->query("SELECT titel FROM ".CPO_NEWS." WHERE rubric_id='ID_DER_GLOSSAR_RUBRIK'");
while ($db_glossar->next_record()) {
	$glossarbegriff = trim($db_glossar->v('titel'));
	$replace[] = '@'.$glossarbegriff.'@';
	$with[] = '<a href=\"/_style/detail.php?title='.$glossarbegriff.'&rubric=Glossar">'.$glossarbegriff.'</a>';
}            
$template_datei = preg_replace($replace, $with, $template_datei); 

?>
ungetestet!

Wobei sich, nach erfolgreichem Test, die Geschwindigkeit durch Teilung des Codes erhöhen lässt, weil im Grund ja einmal pro Seite das Auslesen der Glossarbegriffe reicht und nicht zwingend für jeden Artikel neu erfolgen muß...

edit: einmal $db in $db_glossar geändert...
Zuletzt geändert von MarkusR am 01.09.2006 15:34, insgesamt 1-mal geändert.
Ciao Markus
ConPresso-Module

Kein Support per PN!!! Für Fragen und Diskussionen ist das Forum da!

Succi recentis officinalis
Hochwertige Kräutersäfte und -Öle
Lufine
ConPresso-Checker
Beiträge: 127
Registriert: 01.09.2006 10:15
Hat sich bedankt: 1 Mal

Beitrag von Lufine »

CPO forever - und MarkusR auch ;-)

Danke!!!
Lufine
ConPresso-Checker
Beiträge: 127
Registriert: 01.09.2006 10:15
Hat sich bedankt: 1 Mal

Beitrag von Lufine »

Hi Markus,

sitze jetzt an der Umsetzung der Glossarfunktion und komme nicht so recht weiter...
MarkusR hat geschrieben:Du versiehst die Artikel in der Glossar-Rubrik einfach mit dem Begriff als Titel.
Jepp, habe ich gemacht: Die Rubrik (id=25) heißt "Material-Info" und hat Artikel mit Namen wie "Bambus", "Kokos" etc.
In der parser.php habe ich also folgenden Code eingefügt:

Code: Alles auswählen

$db_glossar = new db;
$replace = array();
$with = array();
$db_glossar->query("SELECT titel FROM ".CPO_NEWS." WHERE rubric_id='25'");
while ($db_glossar->next_record()) {
    $glossarbegriff = trim($db_glossar->v('titel'));
    $replace[] = '@'.$glossarbegriff.'@';
    $with[] = '<a href="/_style/detail.php?title='.$glossarbegriff.'&rubric=Material-Info">'.$glossarbegriff.'</a>';
}
$template_datei = preg_replace($replace, $with, $template_datei);
Beim Aufrufen der Seite wird der Glossarbegriff "Bambus" im Browser jetzt so angezeigt (das ist die um ca. 90% gekürzte Fassung!):

Code: Alles auswählen

Material-Info">Bambus&rubric=Material-Info">
Material-Info">Bambus&rubric=Material-Info">
Material-Info">Bambus&rubric=Material-Info">
Material-Info">Bambus&rubric=Material-Info">
Material-Info">Bambus&rubric=Material-Info">
Zumindest kann man so nicht übersehen, dass dieser Begriff etwas Besonderes ist ;-)

Der Link sieht übrigens so aus:

Code: Alles auswählen

http://www.teppichkontor.lokal.de/_tk/%5C%22/_style/detail.php?title=%3Ca
Den folgenden Forumsbeitrag habe ich übrigens nicht gefunden, dementsprechend auch noch nicht berücksichtigt:
MarkusR hat geschrieben:Dann muß Du nur noch das von mir beschriebene Aufrufen von Artikeln über ihren Titel statt über die Nummer benutzen und schon ist das Glossar fertig.
Kannst Du mir einen Tipp geben, wo ich suchen muss und wie ich das oben genannte Problem lösen könnte?
Benutzeravatar
MarkusR
Handbuchversteher
Beiträge: 7362
Registriert: 01.01.1970 01:00
Hat sich bedankt: 111 Mal
Danksagung erhalten: 934 Mal
Kontaktdaten:

Beitrag von MarkusR »

:roll:
ok ok... da der Titel selbst wieder eingesetzt wird, wird auch das erneut ersetzt, etc...

Probiere mal

Code: Alles auswählen

$db_glossar = new db; 
$replace = array(); 
$with = array(); 
$db_glossar->query("SELECT titel FROM ".CPO_NEWS." WHERE rubric_id='25'"); 
while ($db_glossar->next_record()) { 
    $glossarbegriff = trim($db_glossar->v('titel')); 
    $replace[] = '/(\s)'.$glossarbegriff.'([.,;!\s])/i'; 
    $with[] = '$1<a href="/_style/detail.php?title='.$glossarbegriff.'&rubric=Glossar">'.$glossarbegriff.'</a>$2'; 
}             
$template_datei = preg_replace($replace, $with, $template_datei); 
und hier ist der Aufruf mittels "title=" erläutert
http://community.conpresso.de/viewtopic.php?t=3045
Ciao Markus
ConPresso-Module

Kein Support per PN!!! Für Fragen und Diskussionen ist das Forum da!

Succi recentis officinalis
Hochwertige Kräutersäfte und -Öle
Lufine
ConPresso-Checker
Beiträge: 127
Registriert: 01.09.2006 10:15
Hat sich bedankt: 1 Mal

Beitrag von Lufine »

Hi Markus,

hab´mir ein kleines Wochenend-Päuschen gegönnt javascript:emoticon(':D')
Very Happy

Dein Codeschnipsel funktioniert jetzt schon viel besser :-) Nur: ein Begriff der sich z.B. innerhalb eines Tags befindet, also z.B. <p>Bambus</p> wird ignoriert. Für Begriffe innerhalb von a-Tags ist das allerdings unbedingt notwendig, damit der Begriff nicht doppelt verlinkt wird
Doof wäre also:
<a href="xyz.php"><a href="glossar.php">Bambus</a></a>
Benutzeravatar
MarkusR
Handbuchversteher
Beiträge: 7362
Registriert: 01.01.1970 01:00
Hat sich bedankt: 111 Mal
Danksagung erhalten: 934 Mal
Kontaktdaten:

Beitrag von MarkusR »

Ja, das mit den Begriffen innerhalb von Tags ist noch ein Problem, für das ich noch keine Lösung gefunden habe.
Vielleicht hat ja einer eine Idee, wie man alles zulässt außer einem schließenden </a>... ich habe da hin und her probiert und keine Lösung gefunden. Einzelne Zeichen kann man ja ausschließen, aber eine Zeichenkette? :(
Ciao Markus
ConPresso-Module

Kein Support per PN!!! Für Fragen und Diskussionen ist das Forum da!

Succi recentis officinalis
Hochwertige Kräutersäfte und -Öle
Lufine
ConPresso-Checker
Beiträge: 127
Registriert: 01.09.2006 10:15
Hat sich bedankt: 1 Mal

Beitrag von Lufine »

Könnte man das Pferd denn nicht andersrum aufzäumen, also die Fälle, die erlaubt sind definieren? Also z.B.

<p>Bambus</p>
<li>Bambus</li>
<strong>Bambus</strong>
<h1>Bambus</h1>
...
Benutzeravatar
MarkusR
Handbuchversteher
Beiträge: 7362
Registriert: 01.01.1970 01:00
Hat sich bedankt: 111 Mal
Danksagung erhalten: 934 Mal
Kontaktdaten:

Beitrag von MarkusR »

Das wäre doch ein interessantes Projekt, um sich in reguläre Ausdrücke einzuarbeiten... :wink:
Ciao Markus
ConPresso-Module

Kein Support per PN!!! Für Fragen und Diskussionen ist das Forum da!

Succi recentis officinalis
Hochwertige Kräutersäfte und -Öle
Lufine
ConPresso-Checker
Beiträge: 127
Registriert: 01.09.2006 10:15
Hat sich bedankt: 1 Mal

Beitrag von Lufine »

Ich fürchte, da überschätzt Du meine php-Kenntnisse... :roll:
Benutzeravatar
MarkusR
Handbuchversteher
Beiträge: 7362
Registriert: 01.01.1970 01:00
Hat sich bedankt: 111 Mal
Danksagung erhalten: 934 Mal
Kontaktdaten:

Beitrag von MarkusR »

Dann hier mal ein Hinweis:

Code: Alles auswählen

    $replace[] = '/(>|\s)'.$glossarbegriff.'([.,;!\s]|<\/i>|\<\/td>|<\/li>|<\/strong>|<\/h1>)/i'; 
    $with[] = '$1<a href="/_style/detail.php?title='.$glossarbegriff.'&rubric=Glossar">'.$glossarbegriff.'</a>$2'; 
Der replace-Ausdruck sucht etwas, was mit > oder einem Leerzeichen beginnt (>|\s) und mit einem Satzzeichen oder Leerschritt oder einem der gelisteten schließenden Tags beendet wird ([.,;!\s]|<\/i>|\<\/td>|<\/li>|<\/strong>|<\/h1>).
Das kann von Dir jetzt ergänzt werden, mußt nur das / durch ein \ maskieren.
Ciao Markus
ConPresso-Module

Kein Support per PN!!! Für Fragen und Diskussionen ist das Forum da!

Succi recentis officinalis
Hochwertige Kräutersäfte und -Öle
Lufine
ConPresso-Checker
Beiträge: 127
Registriert: 01.09.2006 10:15
Hat sich bedankt: 1 Mal

Beitrag von Lufine »

Danke Markus :-) Das sollte ich jetzt hinkriegen!
Lufine
ConPresso-Checker
Beiträge: 127
Registriert: 01.09.2006 10:15
Hat sich bedankt: 1 Mal

Beitrag von Lufine »

Ein Problem gibt es jetzt glaube ich noch: einmal geparst immer geparst?
Was ist, wenn der Glossarbegriff bzw. der Artikel gelöscht wird???
Benutzeravatar
MarkusR
Handbuchversteher
Beiträge: 7362
Registriert: 01.01.1970 01:00
Hat sich bedankt: 111 Mal
Danksagung erhalten: 934 Mal
Kontaktdaten:

Beitrag von MarkusR »

Parsen bedeutet ja, daß bei der Anzeige die Seite erst erstellt wird.
Es wird also am eigentlichen Artikel nichts, aber auch gar nichts verändert. Nur bei der Ausgabe werden die Begriffe "ergänzt". Fällt also ein Begriff weg, dann gibt es eben keinen Link aufs Glossar mehr.
Ciao Markus
ConPresso-Module

Kein Support per PN!!! Für Fragen und Diskussionen ist das Forum da!

Succi recentis officinalis
Hochwertige Kräutersäfte und -Öle
Antworten