dbopp

Web.Programmierung.

January 15, 2014
by dave
0 comments

Contao-Modul mit wählbarem Template programmieren

Die folgende Anleitung geht von einer Contao-Erweiterung mit dem Namen “meinmodul” aus. Der Ordnername heisst so und wenn man das Modulpaket via Erweiterungskatalog installiert, findet man es unter diesem Namen. In dieser Erweiterung ist ein Modul namens meinmodul_1 enthalten (auf dessen Erstellung hier nicht eingegangen wird).

Was muss programmiert werden, damit die Contao-Administratoren ein Modul instanzieren und dabei aus verschiedenen Templates wählen können?

Die Templates werden erstellt, im Ordner meinmodul/templates/aufWunschInEinemUnterordner/

Die Templates erhalten dabei einen Präfix, analog der anderen Modul-Templates. In unserem Beispiel ist der Präfix “meinmodul_”. Zum Beispiel meinmodul_default.html5 und meinmodul_template2.html. Das System ist später darum besorgt nur Templates in der Auswahlliste anzuzeigen, die diesen Präfix im Namen haben.

Die Templates müssen registriert werden. In die Datei meinmodul/config/autoload.php schreiben wir folgenden Code:

TemplateLoader::addFiles(array
(
‘meinmodul_default’ => ‘system/modules/meinmodul/templates’,
‘meinmodul_template2′ => ‘system/modules/meinmodul/templates’,
));

Nun haben wir die Grundlagen in der Erweiterung geschaffen.

Als nächstes wird dafür gesorgt, dass bei der Instanzierung eines Moduls im Backend (Themes /Modules) bei den Optionen des Moduls die Eigenschaft vorhanden ist, in einer Template-Liste auszuwählen. Das passiert via dca-Container, wird also in meinmodul/dca/tl_module.php niedergeschrieben. Dort braucht es pro Modul eine Zeile die die Optionen bei der Instanzierung  beschreiben. Klassisch findet man dort name, headline und type, jnd. Legenden. Nun kommt eine von uns definierte Option hinzu. Nennen wir sie ‘meinmodul_template’. Diese Option können wir danach ebenfalls als dca definieren.

$GLOBALS['TL_DCA']['tl_module']['palettes']['meinmodul_1']    = ‘{title_legend},name,headline,type;{template_legend:hide},meinmodul_template;’;

$GLOBALS['TL_DCA']['tl_module']['fields']['meinmodul_template'] = array
(
‘label’                   => &$GLOBALS['TL_LANG']['tl_module']['meinmodul_template'] ,
‘exclude’                 => true,
‘inputType’               => ‘select’,
‘options_callback’        => array(‘tl_module_meinmodul’, ‘getMeinmodulTemplates’),
‘eval’                    => array(‘tl_class’=>’w50′),
‘sql’                     => “varchar(32) NOT NULL default ””
);

Die Option Callback (‘options_callback’) verweist auf eine Klasse und darin auf eine Methode die ausgeführt werden soll,wenn dieses data container array (dca) ausgegeben wird. Diese Klasse und ihre Methode schreiben wir ebenfalls direkt in die Datei meinmodul/dca/tl_module.php

class tl_module_meinmodul extends Backend
{
/**
* Import the back end user object
*/
public function __construct()
{
parent::__construct();
$this->import(‘BackendUser’, ‘User’);
}

/**
* Return all meinmodul templates as array
* @return array
*/
public function getMeinModulTemplates()
{
return $this->getTemplateGroup(‘meinmodul_’);
}
}

 

January 15, 2014
by dave
0 comments

Nomenklatur für Module in Contao

Ein kleiner Nachteil von Contao ist, dass einige Begriffe mehrdeutig sind.

Der Begriff Modul kann folgendes heissen:

  • Modul-Paket oder Modul-Ordner (Ordner im Dateisystem), auch Erweiterung genannt
  • Modul-Vorlage (wohl am ehesten das eigentliche Modul)
  • Modul-Instanz (die Instanzierung eines Moduls im BE unter Themes/FE-Module)
  • Modul-Inhaltselement (das Inhaltselement das die Instanz zur Ausgabe bringt)
  • und auch: Backend-Modul

In OO-Sprech (Objektorientiertem Denken) sind die Entsprechungen wie folgt:

  • Modul-Paket: Gruppe von Klassen, allenfalls ein Namespace
  • Modul-Vorlage: Klasse
  • Modul-Instanz: Objekt
  • Modul-Inhaltselement: GUI-seitige Einbindung des Moduls

Update

Im Contao-Core wird eine klare Nomenklatur verwendet. Dort ist ein Modul das fertig konfigurierte Modul. Bereit zur Ausgabe! Die Vorlagen heissen Modultypen.

  • Erweiterung – können diverses enthalten, aber unter anderem Modultypen
  • Modultypen – Vorlagen, die konfiguriert werden müssen
  • Module – fertig konfigurierte Einheiten

Klarheit

In diesem Blog wird versucht eine einheitliche Nomenklatur zu verwenden, und und zwar diejenige des Cores:

  • Erweiterung für ein Paket aus Modulen, Erweiterungs-Ordner für den Ordner im Dateisystem
  • Modultyp für die Modulklasse
  • Modul für die Instanz eines Moduls in Contao

 

October 12, 2013
by dave
0 comments

Websites müssen in Pixeln gestaltet werden

Ein Bildschirmbild besteht aus Tausenden von Bildpunkten. Aus Pixeln. Aus kleinsten Einheiten die man mit blossem Auge sehen kann, wenn man genug nahe am Bildschirm ist. Oder genug lange daran gearbeitet hat.

Eine Website wird aus Pixeln zusammengesetzt. Deshalb sollte sie von Anfang an in Pixeln gestaltet werden.

Immer noch werden Websites häufig in Print-Layout-Programmen (z.B. InDesign) gestaltet. Mit einer Vermassung in Punkten, Zentimetern oder ganz ohne Grössenvorgabe. Was beim layouten gut aussehen mag (man arbeitet zwar auch auf einem Bildschirm, aber häufig mit vergrösserter oder verkleinerter Darstellung), kann dann nicht eins zu eins umgesetzt werden. Das führt zu unnötigen Revisionsrunden und damit zu frustrierten Gestaltern und Programmierern.

Einige Beispiele wie sich eine diesbezüglich mangelhafte Gestaltung auswirken kann

Linien die in der Vorlage einen halben Pixel breit sind

Im Endprodukt – auf der Website auf dem Bildschirm – wird die Linie einen Pixel breit sein. Weniger geht nicht. Und schon stimmt die Umsetzung nicht mit der Vorlage überein.

Linien die eineinhalb Pixel breit sind

Der Programmierer hat die Wahl: Setzt er die Linie einen Pixel breit um? Oder zwei? Oder exakt wie in der Vorlage: Das kriegt man mit Antialiasing hin: einen Pixel breit dunkel, einen halb so dunkel. Eine Linie und daran angeschlossen eine hellere Linie. Das wirkt auf den Betrachter wie eineinhalb Pixel. Aber es wirkt auch etwas verschwommen. Keine der Optionen wird den Gestalter wirklich glücklich machen.

Eineinhalb Pixel breite Linie, gerastert

Eineinhalb Pixel breite Linie in Originalgrösse

Linien die zwischen zwei Pixelreihen positioniert sind

Noch verheerender wird es wenn eine ein Pixel dicke Linien genau zwischen zwei Pixelreihen positioniert ist. Bleibt der Programmierer bei der exakten Positionierung, resultiert daraus eine zwei Pixel dicke graue Linie. Die wirkt auf weissem Hintergrund ebenfalls wie eine schwarze Linie – aber noch unschärfer als in obigem Beispiel.

Linie die in der Gestaltung nicht exakt positioniert wurde

Wie die Linie im Pixelraster umgesetzt aussieht

v.l.n.r.: Vorlage, Umsetzung mit Rastering, Umsetzung mit Re-Positionierung

Setzt er die Linie einen Pixel breit um, dann ist die Linie schwarz wie vorgesehen, ihre Position verändert sich aber, sie hat nicht mehr denselben Abstand zu den Nachbarelementen.

In diesem Bild wird dreimal dasselbe Bild dargestellt: 2 blaue Elemente die durch eine schwarze Linie getrennt werden sollen. Links ist die problematische Gestaltungsvorlage zu sehen – so wie sie vergrössert aussieht. In der Mitte sieht man die Umsetzungsvariante mit Rastering. Und rechts die Festlegung auf eine Pixelreihe.

Was all diesen Beispielen gemeinsam ist: Es handelt sich um Ungenauigkeiten in der Gestaltung die kein Programmierer mehr korrigieren kann. Ihm bleiben nur diese ungenauen Möglichkeiten. Häufig führen diese Ungenauigkeiten zu Unzufriedenheit mit der Implementierung. Sie können aber von Anfang an vermieden werden. Indem die Vorlage von Anfang an in Pixeln gestaltet wird.

January 8, 2013
by admin
0 comments

Mit der Firefox Adresszeile bei Google suchen

Tippen sie auch des öfteren ihre Suchbegriffe in die Adresszeile von Firefox? Haben sie sich auch schon gewünscht Firefox würde merken, was sie wollen und ihre Suchbegriffe gleich an Google weiterleiten?

Sie können das Firefox beibringen.

Gehen sie in die Konfiguration von Firefox. Tippen sie dazu folgendes in die Adresszeile.

about:config

Bestätigen sie Firefox, dass sie brav sein werden und suchen sie nach

keyword.url

Rechtsklick auf den Wert, Bearbeiten wählen, folgende Adresse einfügen

https://www.google.ch/search?q=

So werden ihre Suchbegriffe gleich an Google weitergeleitet.

Das passiert allerdings nur, wenn ihre Eingabe von Firefox als Eingabe von Keywords erkannt wird. Das ist z.B. der Fall wenn sie mehr als ein Wort zur Suche eintippen.

October 9, 2012
by admin
0 comments

Filezilla Serverliste kopieren

C:\Users\<yourname>\AppData\Roaming\Filezilla

Haben sie schon mal Filezilla auf einem Zweitcomputer installiert und sich gefragt wie sie ihre Serverliste mitzügeln können? In obigem Pfad finden sie alle ihre Filezilla-Einstellungen. Die Datei mit der Serverliste heisst sitemanager.xml. Einfach an den neuen Ort kopieren und Filezilla starten.

Where to find Filezilla’s config files

In the above path, you can find all your Filezilla config files. The list of all your server connections is in the file sitemanager.xml.

March 22, 2011
by admin
0 comments

Google Maps Route Planning integrated in your website

It took me some searching to find out how to integrate route planning with a google map into a customers website.

Here is a good tutorial on how to integrate route planning in your website: http://dreamdealer.nl/tutorials/getting_directions_with_google_maps.html

More information on how the programming interface for Google Maps looks at Google. Obviously, much more is possible!

May 17, 2010
by dave
0 comments

Stuff XY people like

There is a great concept out there, a bit more than a year old, waiting for eager bloggers to be copied.

It goes like that:

  • take a distinct
  • but still large and diverse group
  • that you are a member of
  • and write articles about all the things this group typically does that could be viewed as odd or a bit ridiculous.
  • The whole thing started with
    Stuff White People Like, soon Stuff Asian People Like followed, and now there is also Stuff Christians Like.

    What these blogs have in common is that they are all written in a humorous, satire style. Like that they make the members of the group laughing about themselves and the outsiders about the strangeness of the group. But not only, they also make the outsiders more conciliatory towards the group.

May 17, 2010
by dave
0 comments

Stuff Swiss people like

http://www.expatica.com/ch/life-in-switzerland/blogs_photos/Stuff-Swiss-people-like_-part-one-_14803.html

Not comparable with the regular blog stuffwhitepeoplelike.com (or the wonderful stuffchristianslike.net), it is just another view of how an outsider experiences Switzerland. With a focus on what we love.

There are some great ones to be found, like

#9: Recycling
I am amazed at the great importance and emphasis this country places on recycling. In a place with a rather limited amount of land, you can’t just toss everything into a landfill, and we wouldn’t want to do that anyway with all our natural resources dwindling.

February 16, 2009
by dave
0 comments

Es macht keinen Sinn in der Steuererklärung anzukreuzen ob man fernsieht oder nicht

In der heutigen 20 Minuten wird davon berichtet, dass der Preisüberwacher die TV-Gebühren via Steuern eintreiben will und so die Ausgaben für die Billag beseitigen will. CVP-Sprecherin Marianne Binder findet es nun “fragwürdig wenn auch Personen für Leistungen bezahlen müssen die sie gar nicht beziehen.” Und schlägt vor, “dass man in der Steuererklärung ankreuzen soll, ob man fernsieht oder nicht.”

Ein Einzug über die Bundessteuer ist natürlich nicht fair. Die Bezahlung und der Bezug der Leistung werden sich in den seltesten Fällen entsprechen. Doch das ist bei vielen Ausgaben die der Bund tätigt der Fall! Soll man in Zukunft auch ankreuzen können ob man Filme die aus Filmfördergeldern bezahlt wurden sah oder nicht sah? Soll man ankreuzen können ob man <<wenig>> oder <<häufig>> durch aus Bundesgeldern gebauten Tunnels fuhr?

Die TV-Gebühren erfassen bisher auch nicht ob jemand wenig oder viel fernsieht. Von Fairness kann also nicht die Rede sein. Mich als Nicht-Fernseh-Besitzers stört es nicht wenn wir ein Einsparungspotential ausnützen, den Einzug der Gebühren vereinfachen und von mir aus auch gleich ans Einkommen anpassen.