Neuigkeiten:

moziloCMS verwendet Cookies. Wenn Sie auf unserer Seite weitersurfen, stimmen Sie der Cookie-Nutzung zu Datenschutzerklärung
moziloCMS Layouts
moziloCMS Plugins

Hauptmenü

Lösungsansatz: Individuelle Mata Tags pro Seite

Begonnen von str, 07. Juni 2010, 18:55:00

« vorheriges - nächstes »

str

Dieser Post richtet sich haupsächlich an stefanbe und azett  ;)

Wie schon ein paar mal im Forum gewünscht, habe ich mir mal ein paar Gedanken zu dem Thema gemacht und dabei ist das folgende Plugin herausgekommen.

Das Plugin funktioniert einwandfrei (?) benötigt jedoch noch viel Handarbeit und FTP. Für erfahrene User sicher kein Problem.  :)

Offene Punkte:

  • Ich habe mal ein SubDir gewählt, ich kann mir aber auch vorstellen das pro Inhaltsdatei eine Conf Datei existiert in der dann die entsprechenden Einträge stehen (macht es einfacher für zukünftige Plugins!)
  • Ein grosses Thema ist auch das File Handling beim löschen, umbenennen..
  • Und nicht zuletzt ein komfortabler Editor  :D

Der erste Punkt ist ohne Problem über ein Plugin machbar. Die anderen beiden machen IMHO als Plugin keinen Sinn.

Ist da schon was angedacht, bezügich Admin Panel Plugins? Ich kann mir auch vorstellen das ganze in Mozillo direkt einzubauen, dürfte nicht allzu viel Aufwand sein, da alle Funktionen schon vorhanden sind. Ist in der Betaphase natürlich ein bisschen mühsam  ;) und auch kein Plugin mehr...

Was ist eure Meinung dazu?

Gruss
str

azett

#1
Warum gehst du den Umweg über die einzelnen Dateien? ;)

Ich würde das ähnlich den benutzerdefinierten Syntaxelementen regeln; einfach zwei Textboxen als Plugin-Konfiguration, eine für Keywords, eine für Descriptions. Darin dann zeilenweise Kategorie:Seite = Keywords (oder eben Kategorie:Seite = Description): Willkommen:Willkommen = Das ist die Startseite.
Willkommen:Impressum = Das Impressum meiner Website.
Produkte:Käsehobel = Alu-Käsehobel aus Anatolien zum Super-Preis!

Damit hättest du die gesamte Konfiguration des Plugins direkt im Admin.

Für das Auslesen der konfigurierten Descriptions und Keywords aus den key = value -Paaren nimmst du am besten gleich die CMS-Klasse Properties.php, die hat schon alle nötigen Funktionen.

str

#2
Zitat von: "azett"Warum gehst du den Umweg über die einzelnen Dateien? ;).
Weil es schnell gehen musste  ;)  Ich hatte keine Zeit um im Source zu suchen über welche Funktionen ich .conf Dateien auslesen kann  :oops:  War so ein 30min von der Idee zur Umsetzung Plugin...  :D  Ist ja nur ein erster Ansatz. Deswegen hatte ich ja auch geschrieben
Zitat von: "str"ich kann mir aber auch vorstellen das pro Inhaltsdatei eine Conf Datei existiert in der dann die entsprechenden Einträge stehen
Das geht in die Richtung die Du vorschlägst, ob jetzt eine Config Datei pro Seite oder eine Zentrale Datei für alle Seiten ist eigentlich egal.
Zitat von: "azett"Damit hättest du die gesamte Konfiguration des Plugins direkt im Admin.
Ich habe jedoch die Vorstellung das die beiden Felder im Editor erscheinen. Macht für mich Sinn, da ich gerade die Seite editiere und Keywords und Description direkt vor Augen habe. Macht es auch einfacher beim umbenennen, verschieben, löschen wenn ich alles was zu der Seite gehört an einer Stelle in der geleichen Maske eingeben kann. Ich sehe jedoch keine Möglichkeit das als Plugin umzusetzen.

Jetzt wo ich dies schreibe kommt mir jedoch eine Idee die gleich zur Frage wird  :D  Wenn man das ganze direkt in der Seite (txt Datei) eingibt, so nach folgendem Muster:
{description|Dies ist die Beschreibung}
{keywords|seite, keywords}
Ist das möglich, oder ist der Header schon aufgebaut wenn die txt eingelesen wird? Falls ja, könnte man dann eventuell sogar die "original" Variablen anpassen und müsste nichts im Template ändern.  Kann mir ein Entwickler wahrscheinlich schneller beantworten als ich es im Source herausfinde ;)

Das wäre eine Möglichkeitet das ganze als Plugin zu gestalten und trotzdem alles am gleichen Ort eizugeben  :D

stefanbe

#3
im head des templates {meine_description_keywords} im Plugin ist dann $value lehr und kann mit dem aus der Inhaltseite ersetzt werden.

setzt einfach eine $GLOBALS[meine_description_keywords] wenn die und $value lehr ist dann gib einfach denn Platzhalter zurück {meine_description_keywords}

die Plugins werden mehrmals ersetzt

und in den Inhalteseiten
{meine_description_keywords|description, Dies ist die Beschreibung}
{meine_description_keywords|keywords, seite, keywords}

gruss stefanbe

str

#4
Danke für den super Tip!!!

Habe jetzt endlich Zeit gefunden das ganze umzusetzen. Bevor ich es ins Pluginarchiv stelle, habe ich noch eine Frage:

Warum bringt die Suche nach {WEBSITE_KEYWORDS} keinen Erfolg, die Suche nach '~platz-WEBSITE_KEYWORDS-platzend~ jedoch zum gewünschten Resultat. :?  :o

Ist das "normal" oder liegt das noch am Betastadium von Mozilo? Nicht das ich auf einen Bug setze  ;)

stefanbe

#5
was meinst du mit suche nach {WEBSITE_KEYWORDS}?

gruss stefanbe

str

#6
Das folgende aus dem Plugin aufgerufen funktioniert nicht:
$HTML = preg_replace('/{WEBSITE_DESCRIPTION}/', $GLOBALS["MetaDescription"], $HTML);Das folgende findet die Stelle:
$HTML = str_replace('~platz-WEBSITE_DESCRIPTION-platzend~', $GLOBALS["MetaDescription"], $HTML);wobei preg_replace und str_replace keinen Unterschied beim Suchergebnis macht...

stefanbe

#7
Das geht auch nicht ein Plugin kann nur sich selbst ersetzen auser es heist WEBSITE_DESCRIPTION aber dann fehlt dir noch WEBSITE_KEYWORDS

Deswegen ein Pluginname für beides
Zitat von: "stefanbe"{meine_description_keywords|description, Dies ist die Beschreibung}
{meine_description_keywords|keywords, seite, keywords}

und WEBSITE_DESCRIPTION, WEBSITE_KEYWORDS im template ersetzen mit deinem Pluginplatzhalter

gruss stefanbe

str

#8
Eben aus diesem Grunde (unter anderem) versuche ich die Original Variablen zu ersetzen. Erster Versuch war es so zu machen wie in Mozilo selber, leider ohne Erfolg...

Den einzigen Weg den ich gefunden habe, ist folgender:
function getContent($value) {
global $MetaDescription;
global $MetaKeywords;
global $HTML;

$values = explode("#", $value);

if(!$values[0] == NULL) {
$GLOBALS["MetaDescription"] = $values[0];
$HTML = str_replace('~platz-WEBSITE_DESCRIPTION-platzend~', $GLOBALS["MetaDescription"], $HTML);
}

if(!$values[1] == NULL) {
$GLOBALS["MetaKeywords"] = $values[1];
$HTML = str_replace('~platz-WEBSITE_KEYWORDS-platzend~', $GLOBALS["MetaKeywords"], $HTML);
}
    }
Aufruf aus der Seite mit
{MetaTag|description#keywords}Dieser Ansatz hat den grossen Vorteil das es auch funktioniert wenn das Plugin aktiviert ist und kein Platzhalter eingegeben wurde. Es funktioniert ebenfalls ohne Anpassungen im Template.
Funktioniert bei mir einwandfrei, hab es produktiv eingebunden.

Gruss
Stefan

stefanbe

#9
Das soltest du so auf keinen fall machen

ein Plugin sollte sich nur mit sich ersetzen sollen dürfen

gruss stefanbe

str

#10
Das wäre dann diese Varinate
   function getContent($value) {
global $CMS_CONF;
global $specialchars;
global $MetaDescription;
global $MetaKeywords;
global $HTML;

$values = explode("#", $value);

if(!$values[0] == NULL) {
$GLOBALS["MetaDescription"] = $values[0];
} else {
$GLOBALS["MetaDescription"] = $specialchars->rebuildSpecialChars($CMS_CONF->get("websitedescription"),false,true);
}

if(!$values[1] == NULL) {
$GLOBALS["MetaKeywords"] = $values[1];
} else {
$GLOBALS["MetaKeywords"] = $specialchars->rebuildSpecialChars($CMS_CONF->get("websitekeywords"),false,true);
}

$HTML = preg_replace('/{MetaDescription}/', $GLOBALS["MetaDescription"], $HTML);
$HTML = preg_replace('/{MetaKeywords}/', $GLOBALS["MetaKeywords"], $HTML);
    }

Aufruf wie bei der anderen Variante oder alternativ, um nur eine Variable zu haben
{MetaTag|description, Dies ist die Beschreibung}
{MetaTag|keywords, seite, keywords}
Hier sehe ich jedoch ein paar Fallen für die User:

  • Ist das Plugin aktiv und auf der Seite kein Platzhalter eingefügt bleiben die Meta Felder leer.
  • Ist das Plugin deaktiviert bleiben die Meta Felder leer.
  • Die Variablen müssen ins Template eingebaut werden.

Genau die Probleme die die andere Variante vermeidet. Vor allem der erste Punkt ist vermutlich die häufigste Fehlerquelle, es muss auf der Seite zumindest
{MetaTag|#}drinstehen, ansonsten keine Meta Einträge... Auch nicht die Standard Werte!

Kurz gesagt diese Version Meta Einträge nur wenn auf der Seite definiert. Die andere Variante setzt immer den Standard ausser es wurde explizit auf der Seite was anderes definiert.

stefanbe

#11
mit $HTML solst und braust du garnichts zu machen einfach ein return "meta tags" :D

dann wird {dein Platzhalter} mit "meta tags" ersetzt

als tip if(isset($GLOBALS["MetaKeywords"])) u.s.w.

gruss stefanbe

str

#12
Das hatte ich als erstes versucht... Funktioniert soweit auch ganz gut, bloss nicht da wo es sein soll! return ersetzt den string im body der Seite, da wo der Platzhalter steht, und nicht im head. In der ersten Version, die per File, hat es funktioniert. Aber da wurde das Plugin nicht über den Inhalt intialisiert, sondern über das Template...
Gruss und gute Nacht
Stefan

stefanbe

#13
es gibt zwei wege aus einer Inhaltseite im Template was zu ersetzen
als demo das Sidebar Plugin

1ter im Template steht nur {Sidebar}
        if(empty($value)) {
            if(isset($GLOBALS["sidebar"]))
                # im Template wird {Sidebar} mit $GLOBALS["sidebar"] ersetzt
                return $GLOBALS["sidebar"];
        } else {
            # aus Inhaltseite {Sidebar|inhalt} wird in global hinterlegt
            $GLOBALS["sidebar"] = $value;
        }
        # in der Inhaltseite {Sitebar|inhalt} mit lehr ersetzen
        return NULL;
 
2ter im Template steht {Sidebar|sidebar}
        if($value == "sidebar") {
            if(isset($GLOBALS["sidebar"]))
                #  im Template wird {Sidebar|sidebar} mit $GLOBALS["sidebar"] ersetzt
                return $GLOBALS["sidebar"];
        } else {
            # aus Inhaltseite {Sidebar|inhalt} wird in global hinterlegt
            $GLOBALS["sidebar"] = $value;
        }
        # in der Inhaltseite {Sitebar|inhalt} mit lehr ersetzen
        return NULL;
 
ich würde 1ten nehmen :D

gruss stefanbe

str

#14
Ich komme im Moment leider zeitlich nicht dazu hier weiterzumachen...  :( Vielleicht hat ja jemand anderes die Zeit und die Freude das Plugin fertig zu stellen  :D