Hi Nino, *, 2010/11/20 Nino Novak <nn.l...@kflog.org>: > On Saturday 20 November 2010 00:33, Christian Lohmaier wrote: > >> http://pumbaa.ooodev.org:7780/sitemap-status-testbed-page > > cool :-)
:-) > Für Farben fühle ich mich als Rot-Grün-Blinder nun überhaupt nicht > zuständig, Oh, dann aber als "Veto" instanz - (kann ich nicht lesen/ist unklar,...) > aber K-J's Einwand mit der Breite halte ich für ziemlich > berechtigt... Ja, dachte dann, daß mit jquery zu scrollen/spalten ein bzw. auszublenden.(aber mit jquery stehe ich noch auf Kriegsfuß, das will nicht so, wie ich will :-)) > [...] > Kannst du mir vielleicht den Code mal schicken? Der wird vmtl. ohne Silverstripe nicht viel bringen, aber hier ist der Template-Code (noch mit css-code direkt im Elemenent, das soll natürlich in der endgültigen Version nicht mehr drin steheen) <ul class="sitemap"> <% control SitemapStatus %> <% if controllist == open %><ul><% else_if controllist == close %></li></ul> <% else %> <li style="margin-right: 0px;"><div style="width:100%"><a href="$Link">$Title</a> <% control ControlTranslations %><div class="$Stage" style="margin-left:15px;text-align: center; width:70px; float:right"> <% if page.ExistsOnLive %><a href="$page.Link" title="$page.Title">$locale</a><% else %>$locale<% end_if %> </div><% end_control %><div class="clear"></div></div> <% end_if %> <% end_control %> Mal kurz erklärt: "control SitemapStatus" man sich als for-loop über alle Elemente, die die Funktinon "SitemapStatus" (siehe unten) zurückgiebt, ebenso "control ControlTranslations" die in dem Fall die Liste der auf der Seite vorhandenen Sprachen abklappert Die if-statements dürften selbsterklärend sein, und die parameter $Link $Title ebenso - das sind die entsprechenden Eigenschaften des gerade in der Schleife behandelten Elements. Das Template baut aus den Daten eine Verschachtelte ul, bei der die Einträge jeweils so aufgebaut sind <li> <div>Link zur entsprechenden en-US-Seite <div>Sprache1</div><div>Sprache2</div><div>Sprache3</div>...<div>spracheN</div> <div class="clear"></div> </div> [ggf ul mit unterseiten] </li> Der Code im Seitencontroller ist alles anderes als sauber 1) Der Code, der die auf der Subsite existierenden Sprachen zurückgibt (indirekt für die innere Schleife des Templates): private function controlLanguages() { // the list of existing translation for the subsite (minus the default langauge) $subsiteid = $this->owner->SubsiteID ; $langs = Translatable::get_existing_content_languages("SiteTree", '"SubsiteID" = ' . $subsiteid); $subsite = Subsite::currentSubsite(); if ($subsite == NULL) { $subsitelang = i18n::default_locale(); } else { $subsitelang = $subsite->getLanguage(); } unset($langs[$subsitelang]); // return set of available translation langauges minus the subsite default $result_dos = new DataObjectSet(); foreach ($langs as $key => $value) { $result_dos->push(new ArrayData(array("locale" => $key, "name" => $value))); } return $result_dos; } 2) Die Methode, für die Äußere Schleife, die alle Einträge der Sitemap zusammenbastelt public function SitemapStatus() { $lang = i18n::default_locale(); if ($this->SubsiteID) { $subsite = DataObject::get_by_ID("Subsite", $this->SubsiteID); if ($subsite) { $lang = $subsite->getLanguage(); } } $toplevel = Translatable::get_by_locale("SiteTree", $lang, "\"ParentID\" = 0 AND \"ClassName\"<>'ErrorPage' AND \"ClassName\"<>'ForumHolder'"); $result = new DataObjectSet(); $languages = $this->controlLanguages(); $oldMode = Versioned::get_reading_mode(); Versioned::reading_stage("Stage"); foreach ($toplevel as $page) { $this->recursivePageadd($result, $page); } Versioned::set_reading_mode($oldMode); return $result; } 3) Die Methode, die die eigentliche Arbeit macht: private function recursivePageadd(&$resultref,$page) { $translations = new DataObjectSet(); foreach($this->controlLanguages() as $lang) { $transpage = $page->getTranslation($lang->getField("locale")); if (!$transpage) { $stage = "missing"; } elseif ($transpage->getExistsOnLive()) { $stage = "live"; if ($transpage->getIsModifiedOnStage() && ($transpage->ClassName != "UserDefinedForm")) { $stage = "changed"; } } else { $stage = "unpublished"; } $translations->push(new ArrayData(array("locale" => $lang->getField("locale"), "page"=>$transpage, "Stage"=>$stage))); } $page->ControlTranslations = $translations; $resultref->push($page); $childpages= Translatable::get_by_locale("SiteTree", "en_US", "\"ParentID\" = " . $page->ID . " AND \"ClassName\"<>'ErrorPage'"); if ($childpages) { $resultref->push(new ArrayData(array("controllist" => "open"))); foreach($childpages as $childpage) { $this->recursivePageadd($resultref, $childpage); $resultref->push(new ArrayData(array("controllist" => "close"))); } } } (mit mehr Erfahrung dürfte das vmtl auch kürzer gehen...) ciao Christian -- E-Mail to discuss+h...@de.libreoffice.org for instructions on how to unsubscribe List archives are available at http://de.libreoffice.org/lists/discuss/ All messages you send to this list will be publicly archived and cannot be deleted