Hi Nino, *,
2010/11/20 Nino Novak <[email protected]>:
> 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 [email protected] 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