Umsetzung von dynamischen Webinhalten in Zope+Python

Django, Flask, Bottle, WSGI, CGI…
Antworten
Gnuser

Mittwoch 27. August 2003, 15:41

Ich habe eine Aufgabe gestellt gekriegt die mich schon etwas zum grübeln bewegt... (das ich poste ist der beweis ;-) ).

Und zwar konvertiere ich zur Zeit eine Firmenwebsite von "old-plain"-HTML in eine "wunderschön dynamische" DTML+Python Version.
Mir wurden zusätzlich einige "NoNo`s" aufgedrängt, z.B darf ich kein Java-Script nutzen was einige "schnöde" Arbeiten ziemlich umständlich gestalten lässt.

Im Web-design bin ich zwar kein Neuling, doch meine Python-Kenntnisse sind mehr als marginal. Ich muss nun mit Python ein Skript schreiben, welches in der Navigationsleiste den standard button bei aktivierung des links in einen "active-link"-Button ändert, also dynamisch durch einen anderern button ersetzt.
So wie ich das sehe liegt die Lösung unter verwendung von "content" und "container" im Skript , bin aber noch nicht wirklich einer Lösung nahe.

Hab auch schon überlegt es mit Perl oder so zu machen, allerdings sind mir andere Skript-sprachen wie gesagt untersagt worden.

ALSO: Wer ein fertiges -kommentiertes- Skript kennt was genau diese Aufgabe erledigt wäre ich sehr dankbar für nen geposteten Link,
bzw. Lösungsvorschläge.

Danke im Voraus

Daniel Gnuser
xturbo77
User
Beiträge: 39
Registriert: Montag 9. September 2002, 20:05
Kontaktdaten:

Donnerstag 28. August 2003, 07:29

Verstehe die Aufgabenstellung nicht so ganz :?:

Willst du bei einem Mouseover Event einen Button ersetzen???
Also nicht schon beim Laden der Seite und ohne erneutes laden? Sprich du willst die Seite ohne einen erneute Request verändern? Ich bin mir nicht sicher, aber ich denke das ginge nur mit JScript....
Zope/Python läuft ja serverseitig und liefert ja auch nix anderes als html (mit oder ohne JScript) zurück.
Gnuser

Dienstag 2. September 2003, 12:50

Also, es geht nicht um die Erstellung eines Mouse-Over Effekts!
Es ist eigentlich ziemlich einfach, klicke auf button Software (du hrefst nun weiter zu Software.html) und dieser Button wird nun (weil er der aktive Link ist) rot (durch nen anderes jpg ersetzt).

Mit Java mehr als simpel, in Python (bin halt nicht sehr konform mit P.) für mich kaum lösbar.

Ich denke das es mehr als nur einen gibt in diesem Forum der das Lösen kann, als "Gegenleistung" helfe ich natürlich gerne mit anderen Problemen aus dem Bereich des Webdesigns (zope usw.), und auch gerne im Software-Engeneering unter C (tu ich auch so wenn ich die Zeit habe ( gnuser@x84.de )

Danke im Voraus
xturbo77
User
Beiträge: 39
Registriert: Montag 9. September 2002, 20:05
Kontaktdaten:

Dienstag 2. September 2003, 14:31

Verstehe, du willst dem User also farblich darstellen WO er sich gerade befindet, oder?

Das kannst du relativ einfach mit Zope Page Templates machen.
Erstelle z.b. eine kleine Ordnerstruktur die so aussehen könnte:

Code: Alles auswählen

Homepage
   |
    teil1
   |
    teil2
   |
    teil3
Im Ordner homepage erstellst du nun ein Page Template "index_html". Dies könnte z.b. so aussehen:

Code: Alles auswählen

Home: 
<a href="HOME_URL" tal:attributes="href container/absolute_url"
                                tal:content="container/title_or_id">HOME TITLE OR ID</a><br>

<span tal:define="hier here/title_or_id">
 <span tal:repeat="foldy python:container.objectValues(['Folder'])" tal:omit-tag="">


            <a href="URL" style="color:red;"
                          tal:condition="python:hier!=foldy.title_or_id()"
                          tal:attributes="href foldy/absolute_url"
                          tal:content="foldy/title_or_id">TITLE OR ID</a>

            <a href="URL" style="color:green;"
                          tal:condition="python:hier==foldy.title_or_id()"
                          tal:attributes="href foldy/absolute_url"
                          tal:content="foldy/title_or_id">TITLE OR ID</a>
   | 


 </span>
<p>Sie sind hier:<div tal:content="python:hier">bla</div>
</span>

Zur Erklärung:

Code: Alles auswählen

<span tal:define="hier here/title_or_id">
Hiermit definiert man eine Variable "hier" die den titel bzw id des aktuellen Objektes beinhaltet, also z.b. "teil2" wenn du dich im Folder teil2 befindest.
Wichtig dabei ist dass die Variable "hier" nur innerhalb des <span> Tags verfügbar ist!

Code: Alles auswählen

<span tal:repeat="foldy python:container.objectValues(['Folder'])" tal:omit-tag="">
Hiermit Iterierst du durch die Sequence die dir die Methode objectValues zurückgibt, nämlich alle Unterordner unseres containers "homepage".
Auch hier ist unsere Variable foldy nur innerhalb des <span> Tags gültig!

Code: Alles auswählen

<a href="URL" style="color:red;"
                          tal:condition="python:hier!=foldy.title_or_id()"
                          tal:attributes="href foldy/absolute_url"
                          tal:content="foldy/title_or_id">TITLE OR ID</a>
Innerhalb unserer Schleife erstelle wir in Abhängigkeit (condition) unserer momentanen Position (siehe Variable "hier") links in 2 verschiedenen Farben. Wenn der Folder über den wir gerade iterieren unserer momentan Position entspricht machen wir einen grünen Link, anderenfalls einen roten.

Der "Trick" ist also in Abhängigkeit der angefordeten URL verschieden <a> Tags zu schreiben wie man es in einer simplen If Anweisung auch machen würde.
Hoffe ich konnte einigermassen helfen.
Antworten