Google Sitemaps Template Erweitert

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

Google Sitemaps Template Erweitert

Beitragvon gfc » 28. Dez 2005, 12: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, 10:17, insgesamt 2-mal geändert.
http://www.parkrocker.net/ - Die Rock im Park Community
Benutzeravatar
gfc
 
Beiträge: 153
Registriert: 27. Dez 2005, 21:46

Beitragvon Markus.Staab » 28. Dez 2005, 14: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
Markus.Staab
Entwickler
 
Beiträge: 9781
Registriert: 29. Jan 2005, 14:50
Wohnort: Aschaffenburg/Germany

Beitragvon gfc » 28. Dez 2005, 14: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
gfc
 
Beiträge: 153
Registriert: 27. Dez 2005, 21:46

Beitragvon Markus.Staab » 28. Dez 2005, 15: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
Markus.Staab
Entwickler
 
Beiträge: 9781
Registriert: 29. Jan 2005, 14:50
Wohnort: Aschaffenburg/Germany

Beitragvon gfc » 28. Dez 2005, 16: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
gfc
 
Beiträge: 153
Registriert: 27. Dez 2005, 21:46

Beitragvon svenalbert » 28. Dez 2005, 21: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
svenalbert
 
Beiträge: 1295
Registriert: 24. Nov 2005, 16:21
Wohnort: Clausthal-Zellerfeld / lower saxony

Beitragvon Markus.Staab » 29. Dez 2005, 07: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
Markus.Staab
Entwickler
 
Beiträge: 9781
Registriert: 29. Jan 2005, 14:50
Wohnort: Aschaffenburg/Germany

Beitragvon gfc » 29. Dez 2005, 10: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
Benutzeravatar
gfc
 
Beiträge: 153
Registriert: 27. Dez 2005, 21:46

Beitragvon Gast » 22. Feb 2006, 15:40

Der fehlende / fehlt aber auch in der DOKU.
Gast
 

Beitragvon Markus.Staab » 22. Feb 2006, 16:01

Hi,

ich habe die Seite aktualsiert.

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

Beitragvon AlaskaGold » 6. Mär 2006, 10:41

Danke! Hatte mich als REDAXO-Neuling doch sehr irritiert, dass die "offiziell" zur Verfügung gestellte Erweiterung keine vernüftigen Links erzeugt hat.
AlaskaGold
 
Beiträge: 20
Registriert: 6. Mär 2006, 10:37

Beitragvon rob_bark » 10. Aug 2009, 14: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
Benutzeravatar
rob_bark
 
Beiträge: 70
Registriert: 17. Feb 2009, 07:55
Wohnort: Berlin Kreuzberg


Zurück zu Templates/Navigationen [R3]

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 0 Gäste