[phpBB Debug] PHP Warning: in file [ROOT]/ext/tas2580/seourls/event/listener.php on line 213: Undefined array key "FORUM_NAME"
Google Sitemaps Template Erweitert - REDAXO Forum
Hallo,

Wir haben in letzter Zeit festgestellt, dass die Kommunikation via Slack viel schneller und zielführender ist als ein Beitrag im Forum. Aufgrund der neuen und besseren Möglichkeiten der Kommunikation haben wir uns entschlossen das Forum nur noch als Archiv zur Verfügung zu stellen. Somit bleibt es weiterhin möglich hier nach Lösungen zu suchen. Neue Beiträge können nicht mehr erstellt werden.

Wir empfehlen, für deine Fragen/Probleme Slack zu nutzen. Dort sind viele kompetente Benutzer aktiv und beantworten jegliche Fragen, gerne auch von REDAXO-Anfängern! Slack wird von uns sehr intensiv und meistens "rund um die Uhr" benutzt :-)
Selbst einladen kannst Du dich hier: https://redaxo.org/slack/
Benutzeravatar
gfc
Beiträge: 152
Registriert: 27. Dez 2005, 22:46
Kontaktdaten: Website

Google Sitemaps Template Erweitert

28. Dez 2005, 13:56

So, es existiert in der Doku ja schon ein Google Sitemaps Artikel. Nun hab ich mal folgendes für mich ergänzt:

- Als Time wird nun die Update-Zeit des Artikels an Google Sitemaps übergeben. So wie es sein sollte
- Die Priority wird gerundet
- Die Change Frequence wird automatisch aus der Update Zeit berechnet und switcht zwischen monthly und weekly automatisch

Hier die Anleitung:

1. öffnet redaxo/include/classes/class.ooarticle.inc.php

2. Sucht nach folgendem Code

Code: Alles auswählen

 function isSiteStartArticle()
   {
      global $REX;
      return $this->_id == $REX['STARTARTIKEL_ID'];
   }
Danach fügt folgenden Code ein:

Code: Alles auswählen

/**
* Accessor Method:
* returns the Updatetime of this article in Google Time
**/
function getUpdatedate() {
$articleUpdateTime = $this->_updatedate;
$last_time_post = date("Y-m-d\TH:i:s",$articleUpdateTime);
$last_time_post = $last_time_post ."+00:00";
return $last_time_post;
}
/**
* Accessor Method:
* returns the ChangeFrequence of the Article
**/
function getChangeFreq() {
$articleUpdatedTime = $this->_updatedate;
$actualtime = time();
$timepastsinceupdate = $actualtime - $articleUpdatedTime;
if ($timepastsinceupdate < 604800) { $changefreq = 'weekly'; } else { $changefreq = 'monthly'; }
return $changefreq;
}
/**
* Accessor Method:
* returns the priority of this article
**/
function getPriority() {
return $this->_prior;
}
3. Speichert die Datei (und natürlich hochladen)

So, nun braucht ihr noch das Template. Ich basier wiederum auf der Doku, habs aber ein wenig verändert:

Code: Alles auswählen

<?
// Execution Code
$rsb = new RexSitemapBuilder();
$rsb->setUrlPrefix("http://" . $_SERVER["HTTP_HOST"]."/");

// dump to requestor (the start category level as param)
echo $rsb->buildXML( OOCategory::getRootCategories() );

// Object Definitions

/**
* Class RexSitemapBuilder is a Component that does faciliate
* the URLSet and URL classes to build the SiteMap for Redaxo.
**/
class RexSitemapBuilder {

var $xml="";
var $urlprefix="";
var $document="";

function RexSitemapBuilder() {
$this->xml = "";
$this->document = new URLSet();
}

function setUrlPrefix( $urlprefix ) {
$this->urlprefix=$urlprefix;
}

function buildXML( $categories ) {
foreach ($categories as $category) {

$articles = $category->getArticles();
foreach ($articles as $article) {
if( $article->isOnline() ) {
$this->document->addURL(new URL( $this->urlprefix . $article->getUrl(), $article->getChangeFreq(), $article->getUpdatedate(), round((1 / $article->getPriority()), 1 ), $article->getName() ));
}
}

//recurse
if( sizeof( $category->getChildren() ) > 0) {
$this->buildXML( $category->getChildren() );
}
}
return $this->document->getAsXML();
}

}

/**
* Class URLSet does implement the Parent object
* that can host as many URL objects as required
**/
class URLSet {

var $urls = "";
var $opentag = "<urlset xmlns=\"http://www.google.com/schemas/sitemap/0.84\">";
var $closetag = "</urlset>";
var $xmlheader = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>";

/**
* construct me please
**/
function URLSet () {
$this->urls = array();
}

/**
* allows to add URL Objects. And just those.
* okay. I could explicitly type-safe it, but
* i use it internally anyway.
**/
function addURL($url) {
$this->urls[$url->loc] = $url;
}

/**
* returns this Artifact of the XML document
* which is in fact the entire one.
**/
function getAsXML() {
$xml = "";
$xml .= $this->xmlheader . " ";
$xml .= $this->opentag . " ";
foreach($this->urls as $url) {
$xml .= $url->getAsXML();
}
$xml .= $this->closetag . " ";
return $xml;
}
}


/**
* The URL Class does represent a URL SubElement
* that handles an entire url Element in itself
**/
/*public*/ class URL {

var $loc = "";
var $changefreq = "";
var $lastmod = "";
var $priority = "";
var $name = "";

/**
* Constructor Method for a new URL Artifact
**/
/*public*/ function URL($u, $c, $l, $p, $n) {
$this->loc = $u;
$this->changefreq = $c;
$this->lastmod = $l;
$this->priority = $p;
$this->name = $n;
}

/**
* returns this object as XML Artifact
**/
/*protected*/ function getAsXML() {
$xml = "";
//$xml .= " <!-- " . htmlentities( $this->name ) . " --> ";
$xml .= " <url> ";
$xml .= " <loc>" . $this->loc . "</loc> ";
$xml .= " <changefreq>" . $this->changefreq . "</changefreq> ";
$xml .= " <lastmod>" . $this->lastmod . "</lastmod> ";
$xml .= " <priority>" . $this->priority . "</priority> ";
$xml .= " </url> ";
return $xml;
}
}

?>
So, nun noch einen Artikel erstellen und ihm das neue Template zuweisen. Diesen Artikel könnt ihr dann google sitemaps als Link übergeben.

DEMO: http://www.parkrocker.net/58-0-sitemap.html


Wer nun will, kann google das ganze auch noch als xml übergeben. Dazu einfach das ganze in die .htaccess eintragen.
Zuletzt geändert von gfc am 29. Dez 2005, 11:17, insgesamt 2-mal geändert.
http://www.parkrocker.net/ - Die Rock im Park Community

Benutzeravatar
Markus.Staab
Entwickler
Beiträge: 9634
Registriert: 29. Jan 2005, 15:50
Wohnort: Aschaffenburg/Germany
Kontaktdaten: ICQ Website

28. Dez 2005, 15:04

Hi,

super sache!

ein paar kleine Verbesserungsvorschläge meiner Seits.

Am besten keine Änderungen direkt in den REDAXO Klassen durchführen, da es sonst schwer für euch wird, das ganze evtl mal auf REDAXO 3.2 o.ä. upzudaten.

Besser das ganze via Vererbung lösen!

Ausserdem sollte es doch bereits eine Methode getUpdateDate und getCreateDate geben? Evtl das ganze in ein Addon (z.b. "seo") auslagern, somit bleibt das ganze übersichtlicher.

Ausserdem wäre schön, wenn zu dem ganzen ein Eintrag im Wiki platz finden würde.

Gruß,
Markus

Benutzeravatar
gfc
Beiträge: 152
Registriert: 27. Dez 2005, 22:46
Kontaktdaten: Website

28. Dez 2005, 15:44

äähm nun ja, ich setz Redaxo grad mal 3 Tage ein, kenn noch nicht alle gängigen Funktionen auswendig, noch weniger hab ich die "wie mach ich ein Add-On" Doku gelesen..
http://www.parkrocker.net/ - Die Rock im Park Community

Benutzeravatar
Markus.Staab
Entwickler
Beiträge: 9634
Registriert: 29. Jan 2005, 15:50
Wohnort: Aschaffenburg/Germany
Kontaktdaten: ICQ Website

28. Dez 2005, 16:05

Hi GFC,

das ganze sollte kein Vorwurf sein.

War nur ein Tipp, wie du es "bessser" gestalten kannst, um keine Probleme bei künftigen Updates zu bekommen.

Gruß,
Markus

Benutzeravatar
gfc
Beiträge: 152
Registriert: 27. Dez 2005, 22:46
Kontaktdaten: Website

28. Dez 2005, 17:05

Ich könnte mich natürlich auf die Hoffnung stützen, dass die sitemaps (vielleicht noch in einer besseren version) den weg ins 3.2 schaffen :wink: :wink:
http://www.parkrocker.net/ - Die Rock im Park Community

Benutzeravatar
svenalbert
Beiträge: 1308
Registriert: 24. Nov 2005, 17:21
Wohnort: Clausthal-Zellerfeld / lower saxony
Kontaktdaten: ICQ Website

28. Dez 2005, 22:47

mal ne kurze frage, hab mich noch nicht so richtig mit beschäftigt, aber ...
http://85.10.192.71/1-0-bands-news-infos-forum.html weekly
fehlt da nicht ein slash? oder weiß google das selber.

Sven

Benutzeravatar
Markus.Staab
Entwickler
Beiträge: 9634
Registriert: 29. Jan 2005, 15:50
Wohnort: Aschaffenburg/Germany
Kontaktdaten: ICQ Website

29. Dez 2005, 08:56

Hi
gfc hat geschrieben:Ich könnte mich natürlich auf die Hoffnung stützen, dass die sitemaps (vielleicht noch in einer besseren version) den weg ins 3.2 schaffen :wink: :wink:
Hm Teil von REDAXO selbst wird diese Google Sitemap Geschichte sicher nicht werden (zu speziell, brauch nicht jeder), aber evtl ein Addon.
svenalbert hat geschrieben: fehlt da nicht ein slash? oder weiß google das selber.
jep, da fehlt der "/".

Gruß,
Markus

Benutzeravatar
gfc
Beiträge: 152
Registriert: 27. Dez 2005, 22:46
Kontaktdaten: Website

29. Dez 2005, 11:14

svenalbert hat geschrieben:mal ne kurze frage, hab mich noch nicht so richtig mit beschäftigt, aber ...
http://85.10.192.71/1-0-bands-news-infos-forum.html weekly
fehlt da nicht ein slash? oder weiß google das selber.

Sven
danke, habs oben grad verbessert
http://www.parkrocker.net/ - Die Rock im Park Community

Gast

22. Feb 2006, 16:40

Der fehlende / fehlt aber auch in der DOKU.

Benutzeravatar
Markus.Staab
Entwickler
Beiträge: 9634
Registriert: 29. Jan 2005, 15:50
Wohnort: Aschaffenburg/Germany
Kontaktdaten: ICQ Website

22. Feb 2006, 17:01

Hi,

ich habe die Seite aktualsiert.

Gruß,
Markus

AlaskaGold
Beiträge: 20
Registriert: 6. Mär 2006, 11:37

6. Mär 2006, 11:41

Danke! Hatte mich als REDAXO-Neuling doch sehr irritiert, dass die "offiziell" zur Verfügung gestellte Erweiterung keine vernüftigen Links erzeugt hat.

Benutzeravatar
rob_bark
Beiträge: 70
Registriert: 17. Feb 2009, 08:55
Wohnort: Berlin Kreuzberg
Kontaktdaten: Website

10. Aug 2009, 15:45

Hallo gfc,

Du schreibst, dass "Wer nun will, kann google das ganze auch noch als xml übergeben. Dazu einfach das ganze in die .htaccess eintragen."

Wie soll diese Eintrag in .htaccess aussehen? Bitte um Beispiel.

Danke

Zurück zu „Allgemeines [R3]“