Metadaten rekursiv vererben

Wie verwendet man Templates oder erstellt Navigationen und passt diese an.

Metadaten rekursiv vererben

Beitragvon Kalle01 » 26. Jun 2008, 13:33

In dem augenblicklich von mir verwendeten Template (REX 3.2) werden bei nicht Vorhandensein von Keyword und Description die entsprechenden Inhalte der Startseite ausgegeben:

Code: Alles auswählen
$article = OOArticle::getArticleById($REX['START_ARTICLE_ID'], $REX['CUR_CLANG']);
$articleK = $article->getValue("_keywords");
$articleD = $article->getDescription();


if($this->getValue("description") != "") {
  $meta_beschreibung = htmlspecialchars($this->getValue("description"));
}

else {
  $meta_beschreibung = htmlspecialchars($articleD);
}

if($this->getValue("keywords")!= "") {
  $meta_suchbegriffe = htmlspecialchars($this->getValue("keywords"));
}

else {
  $meta_suchbegriffe = htmlspecialchars($articleK);
}

abrufen dann über:
Code: Alles auswählen
<meta name="description" content="<?php print $meta_beschreibung; ?>" />
<meta name="keywords" content="<?php print $meta_suchbegriffe; ?>" />


Ich würde dies gerne so ändern, dass zunächst in der übergeordneten Kategorie dann in der nächsthöheren usw. gesucht wird, bis ein Inhalt gefunden wird.

Es wäre toll wenn mir jemand die Codeschnipsel geben könnte, die hierzu notwendig sind. Eine Suche im Forum hat keine Ergebnisse gebracht.

Dies ist für mich bzw. für die SEO sehr wichtig, da ich auf meinen Unterseiten stark von der Startseite abweichende Inhalte habe.

Vielen Dank für Eure Hilfe!

Gruß Kalle
Kalle01
 
Beiträge: 285
Registriert: 10. Jan 2007, 20:27
Wohnort: Mettmann, NRW

Beitragvon Markus.Staab » 26. Jun 2008, 14:10

Hi,

das müsste es hier schon irgendwo im Forum.

Prinzipielles Vorgehen:
- aktuellen OOArticle ermitteln
- aktuelle meta-angaben vom article auslesen
- wenn keine meta-angaben vorhanden sind, aus dem OOArticle den ParentTree auslesen
- solange über den parent Tree iterieren, und mit dem jeweils aktuellen OOArticle aus dem Tree dann meta-angaben vom article auslesen
- iteration beenden sobald ein article ein ergebnis liefert

Gruß,
Markus
Zuletzt geändert von Markus.Staab am 26. Jun 2008, 16:20, insgesamt 1-mal geändert.
Benutzeravatar
Markus.Staab
Entwickler
 
Beiträge: 9781
Registriert: 29. Jan 2005, 14:50
Wohnort: Aschaffenburg/Germany

Beitragvon Kalle01 » 26. Jun 2008, 15:10

Hallo Markus,
Danke für die Tipps, es gibt tatsächlich etwas in dieser Richtung als Modul um die Headerbilder rekursiv einzubinden.
Code: Alles auswählen
<?php
$art = OOArticle::getArticleById( $this->getValue('article_id'));
$metaFile = $art->getFile();

if ( $metaFile == '') {
  $cat = OOCategory::getCategoryById( $art->getCategoryId());
  while ( $metaFile == '') {
     if ($cat == null) {
       break;
     }
     $metaFile = $cat->getFile();
     $cat = $cat->getParent();
  }
}

if ( $metaFile != '') {
  $media = OOMedia::getMediaByName( $metaFile);
  //$path = $media->getFullPath();
  $path = '/files/'.$metaFile;
  $desc = htmlentities( $media->getDescription());
  $width = $media->getWidth();
  $height = $media->getHeight();
  echo ' style="background: url(';
  printf ('%s', $path, $desc, $desc, $width, $height);
  echo ') top right no-repeat;"';
}

if ( $metaFile == '') {
  echo ' style="background: url(/files/homeheader.jpg) top right no-repeat;"';
}

?>


Ich habe das versucht zu adaptieren, aber ... Asche über mein Haupt...
Code: Alles auswählen
<?php
$art = OOArticle::getArticleById( $this->getValue('article_id'));
$articleK = $art->getValue("_keywords");
$articleD = $art->getDescription();

if ( $articleK == '') {
  $cat = OOCategory::getCategoryById( $art->getCategoryId());
  while ( $articleK == '') {
     if ($cat == null) {
       break;
     }
      $articleK = $cat->getValue("_keywords");
     $cat = $cat->getParent();
  }
}
if ( $articleK != '') {
   $meta_suchbegriffe = htmlspecialchars($this->getValue("keywords"));
}

if ( $articleK == '') {
   $meta_suchbegriffe = htmlspecialchars($articleK);
}

if ( $articleD == '') {
  $cat = OOCategory::getCategoryById( $art->getCategoryId());
  while ( $articleD == '') {
     if ($cat == null) {
       break;
     }
     $articleD = $cat->getDescription();
     $cat = $cat->getParent();
  }
}

if ( $articleD != '') {
  $meta_beschreibung = htmlspecialchars($this->getValue("description"));
}

if ( $articleD == '') {
  $meta_beschreibung = htmlspecialchars($articleD);
}

?>


Aus dem Bauch sieht das für mich ziemlich schräg aus. Kannst Du das mal checken?

Vielen Dank

Kalle[/code]
Kalle01
 
Beiträge: 285
Registriert: 10. Jan 2007, 20:27
Wohnort: Mettmann, NRW

Beitragvon Markus.Staab » 26. Jun 2008, 16:26

Hi Kalle,

sieht gar net soooo schlecht aus ;)

Ich würds ein bissl einfacher machen:

Code: Alles auswählen
<?php
$art = OOArticle::getArticleById($this->getValue('article_id'), $this->getValue('clang'));
$cat = $art->getCategory();

$articleK = $art->getValue("art_keywords");
$articleD = $art->getValue("art_description");

while ( $articleK == '') {
     if ($cat == null) {
       break;
     }
     $articleK = $cat->getValue("art_keywords");
     $articleD = $cat->getValue("art_description");
     $cat = $cat->getParent();
}

$meta_beschreibung = htmlspecialchars($articleD);
$meta_suchbegriffe = htmlspecialchars($articleK);

?>


Ausserdem willst du doch sich die Keywords und die Description immer vom gleichen Artikel erben?
Also nicht unabhängig voneinander...?

Gruß,
Markus
Benutzeravatar
Markus.Staab
Entwickler
 
Beiträge: 9781
Registriert: 29. Jan 2005, 14:50
Wohnort: Aschaffenburg/Germany

Beitragvon Kalle01 » 27. Jun 2008, 10:28

Danke Markus!

Danke das hilft mir weiter! Allerdings wollte ich eigentlich tatsächlich keyword und descirption unabhängig von einander machen.

Begründung: Innerhalb eines Astes der HP sind die die Keywörter gleich, die Inhalte aber differieren. Beispiel:

Keyword Auto

Artikel 1 description Motor
Artikel 2 descripion Getriebe
Artikel 3 descripion Fahrwerk

Gruß Kalle
Kalle01
 
Beiträge: 285
Registriert: 10. Jan 2007, 20:27
Wohnort: Mettmann, NRW

Beitragvon Kalle01 » 27. Jun 2008, 11:04

Ich habe das Coding in ein separates Template gepackt, das ich include (REX3.23). Jetzt bekomme ich folgenden Fehler:
Code: Alles auswählen
Fatal error: Call to a member function getCategory() on a non-object in /mnt/web5/11/07/5172707/htdocs/cms-hof-luettgesheide/redaxo/include/generated/templates/2.template on line 3


Was sagt mir die Fehlermeldung?

Danke Kalle
Kalle01
 
Beiträge: 285
Registriert: 10. Jan 2007, 20:27
Wohnort: Mettmann, NRW


Zurück zu Templates/Navigationen [R3]

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast