Hallo - ich weiß ich weiß - aber ich komm aktuell zu fast nix.
Wie schauts bei dir jetzt aktuell aus?
Torty
Hallo - ich weiß ich weiß - aber ich komm aktuell zu fast nix.
Wie schauts bei dir jetzt aktuell aus?
Torty
[Blockierte Grafik: http://www.oreilly.de/catalog/covers/cssckbk2.s.gif]
ZitatAlles anzeigen
„CSS Cookbook“
2nd Editionrezensiert von
Torsten Hinze
Vorwort
Mit CSS kann man jede Menge Spaß haben und auch nette Effekte basteln. Jedoch ist seine Hauptaufgabe das Vereinheitlichen von Gestaltungsmerkmalen und die Trennung des Markup vom Layout. Dabei ist das Thema CSS sehr vielschichtig und birgt an einigen Stellen deutliche Stolperfallen, die es zu umschiffen gilt.
Dieses Buch will für ausgewählte und aus Sicht des Autors praxisrelevante Problemstellungen diskutieren und eine entsprechende Lösung anbieten.Mit dem Erscheinen der 2nd Edition wurden die Inhalte auf einen aktuelleren Stand gebracht, wodurch nun auch der IE7 und der Firefox 1.5 mit berücksichtigt werden. Dies bezieht sich hauptsächlich auf den Anhang, den sogenannten Appendix.
Ich war bisher nur von einem Kochbuch besonders angetan (Python Cookbook) und habe sonst generell meine Zweifel über die Nützlichkeit von sehr punktuellen Problemlösungen. Dies sei vorweggenommen: das CSS Cookbook hat mich in dieser Auffassung eher bestätigt.
zum Inhalt
Da das Buch dem klassischen Kochbuch-Konzept folgt, werden hier alle Beispiele nach dem Schema "Problem – Lösung – Diskussion" abgehandelt. Diese Problemstellungen wurden in thematische Abschnitte wie Schriften, Bilder, Formulare, Layout, usw. zusammengefasst. Die Auswahl der Probleme reicht dabei von besonders einfachen bis zu anspruchsvolleren Aufgabenstellungen.Die meisten Lösungen sind dabei praxistauglich und verständlich. Sie können dem Anfanger, der auf der Suche nach schnellen Lösungen ist, durchaus entscheidende Ansätze liefern. Jedoch werden auch Methoden gezeigt, die das Problem zwar lösen, jedoch nicht in allen Browsern funktionieren. Dies wird nur durch einen knapper Hinweis, dass dies in diesem oder jenem Browser nicht nutzbar ist angemerkt.
Besonders diese Tatsache hat mir bitter aufgestpossen, denn der Buchtitel legt ja nahe, dass der Author für praxisnahe Aufgaben auch genauso praxisnahe Lösungen bietet. Ein Feature das wunderbar funktioniert, aber nur vom Safari oder Mozilla unterstützt wird, ist nunmal keine Lösung.Da der Autor nun aber auch diese, sagen wir mal halb-tauglichen, Lösungen anbietet, wäre es keine schlechte Idee gewesen dies in irgendeiner Art kenntlich zu machen. Eine einfache Icon-Sprache ala "IE only" oder der Gleichen, hätte da schon gereicht. Somit muss der Leser einen solchen Hinweis erst im Text suchen.
Des Weiteren sind einige Beispiele dabei, die nicht CSS, sondern Javascript als Lösungsmethode anbieten. In diesem Punkt bin ich mir nicht sicher, wie es sich für einen Hilfesuchenden darstellt. Ich denke ein CSS Cookbook sollte bei den aufgezeigten Möglichkeiten auch bei CSS bleiben. Auf der anderen Seite inspiriert es ja vielleicht auch den Leser dazu Techniken zu mischen.
Als nützlichen Zusatz läßt sich der Anhang verwenden. Er bietet neben eine guten Property-Übersicht auch einen Teil, der sich mit Browser-Inkompatibilitäten beschäftigt. Das kann helfen problematische Styles zu finden und zu beseitigen bzw. ganz zu vermeiden. Das ist schon ganz praktisch.
Fazit
Ein generelles Fazit fällt schwer, da ich es aus Sicht eines erfahrenen Anwenders gelesen habe und ich somit kaum nachvollziehen kann, wie ein Einsteiger mit diesem Buch zurecht käme. Sicher gibt es einige komplexere Probleme im Buch, aber der Schwierigkeitsgrad des Hauptteils der Probleme bewegt sich im unteren bis mittleren Bereich.Da der Einsteiger schnell begreift wofür CSS alles gut ist und was sich für Möglichkeiten auftun, wird er viel experimentieren und genauso schnell auf typische Probleme stossen. Um diese zu lösen muss sich der Entwickler als mit dem Thema CSS näher auseinandersetzen und anfangen CSS zu lernen.
Hier kann das Buch ein guter Freund sein, wenn die Zeit knapp ist. Denn es zeigt Basics und erspart somit Sucherei. Um den Prozess des Lernens kommt man dadurch aber nicht herum.Meine Meinung lautet daher: ein Buch für CSS sollte den gesamten Themenkomplex erläutern, so dass der Leser sich schrittweise in den Stoff einarbeiten kann. Das bietet eine solidere Grundlage als nur Rezepte nachzubauen. Dies bedeutet nicht, dass ich das von einem Cookbook erwarte. Ich meine nur, dass man mit fundiertem Grundlagenwissen die vielseitigen Probleme in der Praxis lösen kann.
Trotzdem kann das Buch gute Dienste erbringen, da man für viele Probleme fertige und (fast immer) kompatible Lösungen erhält. Somit läßt es sich vermutlich genauso nutzen wie andere Kochbücher. Zusätzlich bietet der Anhang eine vernünftige Aufstellung von Attributen und Browser-Inkompatibilitäten. Also kann man den Anhang auch als Kurzreferenz benutzen.
Ich glaub ich bleib dann doch bei meinen dicken Schmökern, die sich über jedes Detail des CSS auslassen. ;-P
Torty
Im Plonesite-Root gibts das "error.log" dort findest du den Traceback.
Torty
Aha - warum klappt das denn jetzt?
Basierend auf den letzten Code hier also die Ausgabe der Hits. Die Änderung liegt in der Zeile 25 und 31.
<html xmlns:tal="http://xml.zope.org/namespaces/tal"
xmlns:metal="http://xml.zope.org/namespaces/metal"
i18n:domain="plone">
<body>
<div metal:define-macro="portlet"
tal:define="utool nocall: here/portal_url;
portal utool/getPortalObject;
mxmCounter portal/mxm_counter;
hitList mxmCounter/getSortedByHits;">
<dl class="portlet" id="portlet-workflow-review">
<dt class="portletHeader">
<span class="portletTopLeft"></span>
<span i18n:translate="">Site Statistic</span>
<span class="portletTopRight"></span>
</dt>
<tal:hasHits condition="hitList">
<tal:vars repeat="hit python: hitList[:5]">
<dd class="portletItem"
tal:define="oddrow repeat/hit/odd"
tal:attributes="class python:test(oddrow, 'portletItem even','portletItem odd')">
<div tal:define="hitObj python: here.restrictedTraverse(hit[0]);
hitCount python: here.restrictedTraverse(hit[1]);"
tal:attributes="class python:'visualIcon contenttype-' + normalizeString(hitObj.portal_type)">
<a href="#" class="visualIconPadding tile"
tal:condition="not: nothing"
tal:attributes="href string:${hitObj/absolute_url};
title hitObj/Description;"
tal:content="string:${repeat/hit/number}. ${hitObj/Title} ($hitCount)">
title of the page
</a>
</div>
</dd>
</tal:vars>
</tal:hasHits>
<tal:noHits condition="not: hitList">
<dd class="portletItem odd">
<div class="visualIcon"
i18n:translate="">
no hits found
</div>
</dd>
</tal:noHits>
<dd class="portletFooter">
<span class="portletBottomLeft"></span>
<span class="portletBottomRight"></span>
</dd>
</dl>
</div>
</body>
</html>
Alles anzeigen
Torty
[Blockierte Grafik: http://www.galileocomputing.de/download/cover/9783898428491.gif]
ZitatAlles anzeigen
„Einstieg in Joomla!“rezensiert von
Torsten Hinze
Vorwort
Die DVD als Schulungsmedium bietet dem "Lehrkörper" den Vorteil direkt zu unterrichten und zu zeigen. Ich habe schon einige solcher Schulungsvideos gesehen und finde, dass dieses Konzept eine sehr angenehme Form der Wissensvermittlung ist. Man kann sich den Einstieg vermitteln lassen, dann selbst zur Tat schreiten und je nach Bedarf wieder zum Video zurückkehren.Wer sich also nicht stundenlang durch staubtrockene Textwüsten von mehreren Dokumentationen wühlen will, der ist bei dieser Lernform sicher richtig. Sobald man sich eingearbeitet hat kann man dann in besagten Dokumenten leicht nach dem suchen was man zusätzlich benötigt. Die meißt hohe Hemmschwelle sich in ein komplett neues Thema "einzulesen" fällt somit deutlich geringer aus.
Diese DVD folgt dabei dem Vorbild vieler vorheriger Video-DVD's und präsentiert sich gut strukturiert und didaktisch aufbereitet dem interessierten Zuschauer.
Die anvisierten Zielgruppen sind dabei die der Einsteiger und Fortgeschrittenen, wobei Letztere eher weniger Neues erfahren dürften.Die DVD ist in einer hübschen Hülle verpackt, die ausklappbar ist und schon im Vorfeld über den Inhalt informiert. So werden alle Kapitel aufgeführt und man sieht den Schulungsscreen inklusive der Trainer.
Auf zwei übersichtlichen Cover-Innen-Seiten werden die wesentlichen Features aufgezeigt, so dass der Schüler leicht sehen kann, welche Zusatzinformationen bzw. -aktionen im zur Verfügung stehen.
Nett gemacht.
zum Inhalt
Die einzelnen Kapitel drehen sich um die Erstellung einer Beispiel-Website. Damit können alle relevanten Themen wie Installation, Einstellungen, Anpassungen, Wartung, usw. abgehandelt werden. Die Kurse bauen dabei logisch aufeinander auf und bieten einen guten Einstieg in das CMS.Alle Kapitel enthalten eine Einführung die über den Inhalt und das Lernziel aufklärt.
Die Kapitel sind in weitere Lektionen und diese wiederum in einzelne Wiedergabeschritte unterteilt. Dadurch kann man leicht weiterskippen bzw. den letzten Punkt seiner Lernsession anspringen. Der angezeigte Fortschrittsbalken zeigt dabei die Position innerhalb der aktuellen Lektion an.
Die integrierte Lernhistorie merkt sich während der Session den aktuellen Fortschritt und blendet diesen dezent in die Anzeige der Kapitel- & Lektionsübersicht ein. Dadurch erkennt man bei einer späteren Fortsetzung der DVD sofort bis wo man den Lernstoff bereits angeschaut hat.Als nützliches Kontrollfeature ist für jedes Kapitel ein Test eingebaut, der dem Lernenden dazu dienen kann, zu prüfen, ob er alles verstanden und realisiert hat. Am Anfang ist das noch recht einfach und wird mit jedem Kapitel schwerer, da auch die Wissensmenge zunimmt. Wer also bemerkt, dass er den Test nicht besteht, sollte sich das Kapitel erneut zu Gemühte führen.
Hier zu schummeln macht wenig Sinn, da die Kapitel aufeinander aufbauen und man somit gefahr läuft, weitere Details nicht zu verstehen bzw. passend einzuordnen.
Jedes Themengebiet wird dabei nicht zur Gänze, sondern nur bis zu einer wohldosierten Tiefe behandelt. Man erfährt also wichtige Informationen ohne in den Details zu "ertrinken". Für einen Einsteiger ist das sehr hilfreich.
Die zusätzlichen Funktionen wie Glassar mit Direktlinks zu den Lektionen, Lesezeichen inklusive Notizmöglichkeit, zusätzlichem Hilfesystem usw. runden das Gesamtbild sehr gut ab. Besonders der verlinkte Index dürfte auch nach dem Studium der Lektionen des öfteren in Gebrauch sein. Es ist nunmal sehr kompfortabel, wenn man zu einem Begriff, wie z.B. "Erweiterungen installieren", einen Link präsentiert bekommt, der direkt das Video für das entsprechende Thema öffnet. Das ist sehr praktisch.
Als besonders nützlich wird der so genannte Live-Modus erwähnt, der das Abspielen der Lektion ermöglicht, während man direkt in Joomla die Schritte nacharbeitet. Bei meinen Versuchen war dies jedoch nicht der Modus meiner Wahl, da er recht pixelig ausfiehl, bedingt durch die Verkleinerung des Wiedergabefenster, und weil man kaum noch Details erkennen konnte. Die Idee dahinter ist nachvollziehbar und auch logisch, jedoch verpuffte der Effekt aus besagten Gründen.
Fazit
Diese DVD bietet einen soliden Einstieg in das CMS Joomla und führt an hand von einem praktischen Beispiel (Webseite) in die Thematik ein. Dabei bekommt der Einsteiger die Informationen die er braucht, um mit Joomla umzugehen. Alle weiterführenden oder tiefergreifenderen Fragen müssen dann andere Medien (Internet, Bücher, etc.) abdecken.Rein von der Informationsdichte ist diese DVD sehr gut gelungen. Die Unterstützung durch die Suchfunktion und den verlinkten Index, ermöglichen das schnelle Auffinden von releavnten Informationen, so dass man nie lange auf die gewünschten Informationen warten muss.
Allein der für diese Videos typische monotone und emotionsfreie Redefluss ist gewöhnungsbedürftig. Im Grunde unterstützt dies jedoch das Aufnehmen des Stoffes, da man nicht durch "auffällige" Redestyles gestört wird. Das empfindet aber sicher jeder anders.
Als Fazit bleibt wiedermal eine Empfehlung, da man mit dieser DVD sehr leicht "in den Stoff" kommt. Der logische Kapitel- & Lektionsaufbau nimmt den Schüler an die Hand und führt ihn vorwärts. Einen effektiveren Einstieg kann man kaum bekommen, außer man hat einen Privatlehrer zur Hand ...
Auf der Webseite des Verlages kann man sich auch ein Beispiel-Video ansehen: http://www.galileocomputing.de/trailer#25
Torty
Diese Meldung sagt dir, dass ein Plone-Script fehlerhaft ist. Dies kann man jedoch ausschliessen. Dann stimmt eher was mit deiner Installation nicht. Was das sein kann? Sorry - da fällt mir kaum was ein zu. Vielleicht stimmt dein Filesystem-Encoding nicht oder es fehlen Rechte oder ...
Ich kann mir vorstellen, dass dies für dich sicher frustrierend ist, aber tröste dich damit, dass du so einen tieferen Einblick in das Thema bekommst, als wenn alles gleich klappen würde. *eyesroll*
Ich werde einen Bekannten nochmal auf dieses Thema hinweisen, denn er hat seine Server alle unter Linux zu laufen.
Mal schauen ob er dir helfen kann.
Torty
Kleines Update, damit das Portlet "ganz bleibt" wenn keine Treffer gefunden werden.
<html xmlns:tal="http://xml.zope.org/namespaces/tal"
xmlns:metal="http://xml.zope.org/namespaces/metal"
i18n:domain="plone">
<body>
<div metal:define-macro="portlet"
tal:define="utool nocall: here/portal_url;
portal utool/getPortalObject;
mxmCounter portal/mxm_counter;
hitList mxmCounter/getSortedByHits;">
<dl class="portlet" id="portlet-workflow-review">
<dt class="portletHeader">
<span class="portletTopLeft"></span>
<span i18n:translate="">Site Statistic</span>
<span class="portletTopRight"></span>
</dt>
<tal:hasHits condition="hitList">
<tal:vars repeat="hit python: hitList[:5]">
<dd class="portletItem"
tal:define="oddrow repeat/hit/odd"
tal:attributes="class python:test(oddrow, 'portletItem even','portletItem odd')">
<div tal:define="hitObj python: here.restrictedTraverse(hit[0]);"
tal:attributes="class python:'visualIcon contenttype-' + normalizeString(hitObj.portal_type)">
<a href="#" class="visualIconPadding tile"
tal:condition="not: nothing"
tal:attributes="href string:${hitObj/absolute_url};
title hitObj/Description;"
tal:content="string:${repeat/hit/number}. ${hitObj/Title}">
title of the page
</a>
</div>
</dd>
</tal:vars>
</tal:hasHits>
<tal:noHits condition="not: hitList">
<dd class="portletItem odd">
<div class="visualIcon"
i18n:translate="">
no hits found
</div>
</dd>
</tal:noHits>
<dd class="portletFooter">
<span class="portletBottomLeft"></span>
<span class="portletBottomRight"></span>
</dd>
</dl>
</div>
</body>
</html>
Alles anzeigen
Torty
Ok - schauen wir was auf der DZUG dazu kommt ...
Torty
Nein.
Also normalizeString wird in plone_templates/global_defines.pt definiert und wird fortan als Funktion verwendet. Hat er Plone - hat er auch diese Methode/Funktion.
Ich weiß ich dreh mich im Kreis mit meinen Aussagen, aber so ist es nun mal.
hit[0] ist nicht das Problem, denn sonst würde er sagen 'out of range' oder der Gleichen. Er will hit als Key verwenden was nicht sinnig ist. Logisch schon gleich gar nicht.
Die Anweisung:
sagt aus: "traversiere zu dem Object, welches durch den Pfad in hit[0] definiert ist und lege die Referenz darauf in hitObj ab."
Da es ein Pfad ist, der in hit[0] gespeichert ist, sollte auch
funktionieren. ... mom ... jupp - klappt auch.
Ich bin mir nicht sicher ob wir nicht irgendwas übersehen.
Mein Vorschlag:
Setze eine neue Plonesite auf in der du den mxm nochmal versuchst einzubinden. Dann richte dort einen User xyz ein und gib mir das Pwd. Dann habe ich maximal Zugriff auf die neue Plonesite und die ist ja praktisch leer. Anders denk ich werden wir nicht zum Zuge kommen.
Du hast natürlich die Freiheit dein Problem auch auf der DZUG-ML zu schreiben, denn dort laufen viele fähige Leute rum.
Torty
Was hast du denn bei dir eingerichtet?
Also:
* OS (war glaub ich WinXP)
* Zope-Version
* Plone-Version
Die Methode normalizeString() ist in CMFPlone und CMFCore definiert. Wobei CMFPLone in PloneTool.py in Zeile 1055 auch auf die CMFCore-Methode in utils.py ab Zeile 219 verweist. Wenn du also Plone installiert hast und es läuft, dann hast du auch diese Methoden zur Verfügung.
In deinem Screen war zu sehen, dass du noch keine "Plone site" erstellt hast. Bist du dir sicher, dass mein Portlet in deinem Plone läuft. Sorry für die seltsamen Fragen, aber es ist auczh ein seltsames Problem...
Torty
Also ich hab deinen Code bei mir in einer Standard-Plone2.5.1-Instanllation probiert und das klappte.
Siehe Bild.
Torty
Du findest es im Plonesite-Root unter /error.log. Dort klickst du auf den Fehler und bekommst den Traceback. Diesen gibst du mal hier an.
Thx.
PS: Komm erst wieder gegen Abend zum Antworten - also bis denne.
Torty
Hehe - wieso soll's euch anders gehen wie mir damals.
Aber tröste dich: alles wird gut.
Torty
Wieso kommt bei dir ein solcher Fehler der keinen Sinn macht, da es zu Plone gehörende Funktionalitäten sind.
Ok gibt bitte noch den Traceback aus /error.log.
Torty
Poste mal bitte dein PageTemplate welches du in /portal_skins/custom/portlet_stats stehen hast.
Das kommt mir echt merkwürdig vor.
Torty
Plone ist Schuld? *g* Na da bin ich anderer Meinung.
Hatte selbst auch viele Ungereimtheiten mit festen Layouts und stellte fast immer fest, dass mein Markup oder CSS nicht perfekt waren. Aber gut - das mal so just4info.
Hast du Plone Tabless als Skin verwendet?
Hast du evtl. einen Link zu deinem Portal?
Torty
So - nu hab ich's lokal richtig gestrickt und präsentiere die aktuelle Version:
Try it and buy it ... äähhmmm ... try it and enjoy it - oder so ... *eyesroll*
<html xmlns:tal="http://xml.zope.org/namespaces/tal"
xmlns:metal="http://xml.zope.org/namespaces/metal"
i18n:domain="plone">
<body>
<div metal:define-macro="portlet"
tal:define="utool nocall: here/portal_url;
portal utool/getPortalObject;
mxmCounter portal/mxm_counter;
hitList mxmCounter/getSortedByHits;">
<dl class="portlet" id="portlet-workflow-review">
<dt class="portletHeader">
<span class="portletTopLeft"></span>
<span i18n:translate="">Site Statistic</span>
<span class="portletTopRight"></span>
</dt>
<tal:hasHits condition="hitList">
<tal:vars define="top5 python: hitList[:5];"
repeat="hit top5">
<dd class="portletItem"
tal:define="oddrow repeat/hit/odd"
tal:attributes="class python:test(oddrow, 'portletItem even','portletItem odd')">
<div tal:define="hitObj python: here.restrictedTraverse(hit[0]);"
tal:attributes="class python:'visualIcon contenttype-' + normalizeString(hitObj.portal_type)">
<a href="#" class="visualIconPadding tile"
tal:condition="not: nothing"
tal:attributes="href string:${hitObj/absolute_url};
title hitObj/Description;"
tal:content="string:${repeat/hit/number}. ${hitObj/Title}">
title of the page
</a>
</div>
</dd>
</tal:vars>
</tal:hasHits>
<tal:noHits condition="not: hitList">
<span i18n:translate="">no hits found</span>
</tal:noHits>
<dd class="portletFooter">
<span class="portletBottomLeft"></span>
<span class="portletBottomRight"></span>
</dd>
</dl>
</div>
</body>
</html>
Alles anzeigen
Torty
nein, denn die Suche besteht aus 3-4 Files die zu Plone gehören. Es ist also kein eigenes Produkt, sondern eine Kern-Komponente.
Torty
Ok ok - ich seh schon -> Ich muss mir das mxm-Dingenskirchen mal installieren.
Wie hast du das bei dir gemacht?
Dann dokter ich hier rum und poste das Portlet erneut.
Torty