Beiträge von npostnik

Menüpunkten ein individuelles Bild zuweisen

Es soll ein Menü erstellt werden (TMENU oder GMENU) mit unterschiedlichen Bildern vor dem Seitentitel. Es gibt zwei Weisen, an das Problem heranzugehen.

Die erste Möglichkeit ist, das Bild bei den Seiteneingenschaften in das Feld „Media“ einzufügen. Beim Abspeichern wird eine Kopie der Bilddatei in den Ordner „uploads“ gelegt, mit listNum nimmt man genau das erste Bild. Dann kann man das Bild so auslesen:

1 = HMENU
  1.1 = TMENU
  1.1.NO = 1
  1.1.NO {
    1 = TEXT
    1.field = media
    1.listNum = 0
    1.wrap = <img src="uploads/media/|" />
    2 = TEXT
    2.field = TITLE
  }
}

Vorteil der Methode: Auch ein Redakteur kann es machen. Nachteil: falls man das Bild austauschen möchte, muss man es neu zuweisen.

Die zweite Möglichkeit ist die Bilder in einen bestimmten Ordner zu packen (z.B. fileadmin/bildmenu/) und dann entsprechend der Seiten-ID zu benennen. Also bild_12.gif soll der Seite mit der ID 12 zugewiesen werden. Und so sieht der vereinfachte Code dann aus:

1 = HMENU
  1.1 = TMENU
  1.1.NO = 1
  1.1.NO {
    1 = TEXT
    1.field = uid
    1.listNum = 0
    1.wrap = <img src="fileadmin/menubilder/bild_|.gif" />
    2 = TEXT
    2.field = TITLE
  }
}

Vorteil dieser Methode: Tausch man ein Bild aus, ist es gleich anders. Nachteil: Man muss mit der Bildbenennung genau sein und die Bilder nicht aus Versehen löschen dürfen.

Nachtrag: Aus dem Typo3-Forum kommt noch der folgende Vorschlag:

10 = IMAGE
10 {
  file.maxH = 200
  file.maxW = 760
  file.import = uploads/media
  file.import.data = levelmedia: -1, slide
  file.import.listNum = 0
  fiel.import.override.field = media
}

Wenn im Feld Media der Seite etwas steht, dann wird dieser Wert genommen, ansonsten der Wert der übergeordneten Seite.

Geschrieben in TYPO3 | Kommentare deaktiviert für Menüpunkten ein individuelles Bild zuweisen

Fehler bei Send-A-Card

Habe Send-A-Card installiert (sr_sendcard) – tolle Extension. Hatte nur leider gleich einen Fehler. Alles konfiguriert wie angegeben, bekomme aber eine leere Seite und die Fehlermeldung „cannot access empty property in“ und dann der Pfad zu class.tx_srsendcard_pi1.php. Nach einigem Raten, Ärgern und Recherche folgende Lösung gefunden: Da sind ein paar $ zu viel, also nach
$this->$subpart
suchen und durch
$this->subpart
ersetzen. Betroffen sind die Zeilen 260 bis 280, insgesamt 4 Ersetzungen.

Lasagne

Alles bei Plus zu kaufen, am besten BioBio. Die Lasagneform sollte eckig sein und da sollten 2 Blätter nebeneinander reinpassen. Reicht für 2-4 Leute (ja nach Magengröße und Hunger).
Zutaten:

  • Lasagneblätter
  • Packung BioBio Tiefkühlspinat
  • Packung BioBio Rinderhack
  • Glas VivaVital passierte Tomaten – Passata
  • Tomatenmark
  • Becher Creme Fraiche
  • Geriebener Käse
  • 2 kleine Zwiebeln
  • Knoblauch
  • Salz, Pfeffer, Oregano

Zubereitung:

1. Spinat auftauen lassen. Backofen auf 200 Grad vorheizen.

2. Spinat in einem Topf erhitzen, salzen, pfeffern und 1-2 Knoblauchzehen dazu durch die Presse drücken.

3. Die Zwiebeln schälen und klein schneiden. In einer Pfanne Olivenöl heiß werden lassen und die Zwiebeln darin kurz anbraten. Dann das Hackfleisch dazu geben und anbraten. Die Passata dazu geben und 5-6 Löffel Tomatenmark. Mit Salz, Pffefer und Oregano abschmecken.

4. Die Form mit Olivenöl fetten. Dann als erste Schicht ein wenig Tomaten-Hack-Sosse geben. Dann Platten drauf legen, darauf ein wenig Spinat. Auf den Spinat einige Teelöffel Creme Fraiche geben. Darauf wieder Lasagneblätter. Immer weiter Tomaten-Hack-Sosse und Spinat schichten. Auf die Spinatschicht immer ein wenig Creme Fraiche geben.

5. Ganz oben Lasagneblätter drauflegen. Darauf den Rest Creme Fraiche verteilen und alles dick mit Käse bestreuen, den Käse bis zum Rand verteilen.

6. Die Lasagne in den Ofen stellen und ca. 20-30 Minuten backen, bis der Käse eine hellbraune Kruste gebildet hat.

UPDATE: Noch ein paar Verbesserungsvorschläge – nachdem das Hack angebraten ist, zuerst das Tomatenmark dazu geben, dass karamellisiert ein wenig und dann erst die Passata. Die Hälfte der Creme fraiche unter den Spinat mischen (der Blubb) beim Kochen. Wie folgt schichten: zuerst etwas Olivenöl in die Form, direkt darauf die erste Blätterschicht (dann läßt sich die Lasagne gut herausnehmen) und dann immer abwechselnd Hack und Spinat. Nachdem alles aufgebraucht ist ganz oben die Lasagneblätter darauf legen und mit dem Rest Creme fraiche bestreichen. Und darauf den Käse verteilen, sehr großzügig. Die Schichten sollten nicht zu dick sein, damit sie gut durchziehen können, die Lasagne sich aber gut herausnehmen läßt und in Form bleibt.

Geschrieben in cooking | Kommentare deaktiviert für Lasagne

Die ultimative Suche – zwei Suchextensions kombinieren

Es gibt einige Suchextensions für Typo3: die Indexed Search durchsucht PDFs und gecachte Seiten, aber leider keine Datensätze, andere Extensions durchsuchen Datensätze, aber keine PDFs. Also beschloss ich zwei Extensions zu kombinieren.

Die erste ist die an_searchit: eine tolle Extensions, die mit TypoScript perfekt an die Bedürfnisse angepasst werden kann, durchsucht Datensätze.
http://typo3.org/extensions/repository/view/an_searchit/2.4.1/

Die zweite ist die indexed_search: durchsucht gecachte Seiten und externe Dokumente (ist seit 4.0 eine Systemextension).

Ich brauche zwei Seiten, die erste ist sichtbar, da kommt die Suchbox drauf. Die zweite ist untergeordnet und unsichtbar, da sollen die Ergebnisse angezeigt werden. Auf der ersten Seite Extensiontemplate anlegen und die an_searchit konfigurieren, in diesem Fall sollen die Tabellen der Branchendatenbank (pro_industrydb) und der Veranstaltungskalender (sk_calendar) durchsucht werden:

temp.renderHeader {
length = 100
wrap = <h2>|</h2>
markupColor = #ff0000
}
temp.renderBody {
length = 100
wrap = <p>|</p>
markupColor = #ff0000
}
temp.searchitConfig {
sections {
2 {
title = Veranstaltungen
table = tx_skcalendar_events
fields = title|description
PID = 8
customBody.show = 1
customBody.title < temp.renderHeader
customBody.description < temp.renderBody
}
3 {
title = Branchenbucheinträge
table = tx_proindustrydb_entries
fields = title|short|description|addinfo
PID = 54
#doNotShowLink = 1
params = tx_proindustrydb_pi1[showUid]=#uid#&tx_proindustrydb_pi1[backLink]=80
customBody.show = 1
customBody.title < temp.renderHeader
customBody.description < temp.renderBody
}
}
}

seite.10.marks.CONTENT_CENTER >
seite.10.marks.CONTENT_CENTER = COA
# configure the search form
seite.10.marks.CONTENT_CENTER.10 < plugin.tx_ansearchit_form
seite.10.marks.CONTENT_CENTER.10 {
resultPID = 80
format = label,field,button
label.caption = Suche
label.cssStyle = margin-right: 10px;
field.title = Bitte geben Sie einen Suchbegriff ein
field.cssStyle = margin-right: 10px;
button.caption = Suchen
}
seite.10.marks.CONTENT_CENTER.80 < styles.content.get
plugin.tx_indexedsearch.show.advancedSearchLink = 0

Auf die zweite Seite kommt das Ergebnis hin. Das hab ich auf der ersten Seite vorkonfiguriert. Wieder Extensiontemplate anlegen und die beiden Extensions konfigurieren. Auf dieser Seite wird als Content Element die indizierte Suche eingebunden, die das Suchwort auch bekommen und auswerten soll. Deswegen schreib ich ein Mini-PHP-Skript, das diese Aufgabe für mich übernimmt:

Das Skript speichere ich im Ordner fileadmin/script als switch_search_vars.inc ab. Nun muss ich nur noch die Extension konfigurieren und das Skript einbinden.

config.no_cache = 1
# set post vars from indexed search
seite.10.marks.CONTENT_CENTER.5 = PHP_SCRIPT
seite.10.marks.CONTENT_CENTER.5.file = fileadmin/script/switch_search_vars.inc
# configure the search result overview
seite.10.marks.CONTENT_CENTER.20 < plugin.tx_ansearchit_resOverview
seite.10.marks.CONTENT_CENTER.20 {
config < temp.searchitConfig headline.show = 1 headline.caption = Gefunden in folgenden Bereichen headline.wrap = <h1 class="sectionsHeader">|</h1><p>klicken Sie eine Bereich an, um die komplette Ergebnisliste anzuzeigen</p> sections.format = name, count sections { NO.wrap = <strong>|</strong><br /> ACT = 1 ACT.doNotLink = 1 ACT.wrap = <strong>|</strong><br /> name.wrap = | count.wrap =  (|) } sections.wrap = <div class="sectionsDisplay">|</div> noResults.caption = Ihre Suche brachte leider keine Ergebnisse } #configure the search result list seite.10.marks.CONTENT_CENTER.30 < plugin.tx_ansearchit_resList seite.10.marks.CONTENT_CENTER.30 { config < temp.searchitConfig headline.show = 1 headline.caption = Ergebnisse headline.wrap = <h1 class="resultsHeader">|</h1> outString = <div class="resultItem">###BODY### ###LINK###</div> }

Mann kann noch aus dem HTML-Template der indexed_search die Inhalte vom Marker SEARCH_FORM löschen, damit immer nur ein Suchformular angezeigt wird.

Geschrieben in TYPO3 | Kommentare deaktiviert für Die ultimative Suche – zwei Suchextensions kombinieren

Tipps zum Tunen eines vServers

Anstatt Hosting-Paket hab ich mich letztens für einen Virtual Server vond 1und1 entschieden – mit Plesk als Verwaltungsoberfläche. Es ist schon ganz schick, man kann so viele Sachen selbst machen. Die Installierte PHP-Version und die Apache Version waren mit einfach zu alt, deswegen hab ich einfach beschlossen Apache und PHP neu kompilieren. Als erstes die aktuellste Apache Version herunterladen, entpacken (gunzip, tar -xf), konfigurieren (.configure Optionen siehe unten), kompilieren (make) und installieren (make install). Dann in einen anderen Ordner PHP herunterladen und die gleiche Prozedur durchführen. Über Plesk den alten Apache stoppen und das automatische Starten unterbinden.

Hier die Konfiguration für Apache2

./configure --prefix=/opt/apache2
--enable-auth-digest --enable-cache
--enable-mem-cache --enable-rewrite
--enable-vhost-alias --enable-so

Hier die Konfiguration für PHP5
./configure --prefix=/opt/php5 --with-zlib
--with-gd --enable-gd-native-ttf
--with-freetype-dir --enable-exif
--with-mysql=/usr
--with-mysqli=/usr/bin/mysql_config
--with-regex=php
--with-apxs2=/opt/apache2/bin/apxs

Jetzt der Trick: Nachdem der Apache installiert ist, einige der Konfigurationsdateien aus dem alten Verzeichnis in das neue Verzeichnis kopieren, und die Pfade so ändern, dass einige der Dateien immer noch aus dem eigentlichen Verzeichnis ausgelesen werden, vor allem die Datei, in der die Virtual Hosts eingetragen werden (das ist wahrscheinlich die default-server.conf), dann kann man die Domains immer noch über Plesk konfigurieren. Eine wichtige Datei ist die load_modules.conf. Da werden bei dieser Konfiguration fast alle Einträge entfernt, und der Pfad zum neuen PHP-Modul eingefügt. Zwischendurch den Apache von der Konsole starten (Plesk geht nicht mehr) und schauen, ob alles funktioniert.

LoadModule php5_module /opt/php5/php-5.2.3/libs/libphp5.so

Die Dateien mit der Endung PHP mit dem folgenden Befehl als PHP interpretieren lassen. Server nochmal stoppen und starten. Fertig!

AddType application/x-httpd-php .php
AddType application/x-httpd-php .inc

Zu beachten: Domains können mit Plesk angelegt werden, dann muss aber nach dem Anlegen der Server neu gestartet werden.

Geschrieben in default | Kommentare deaktiviert für Tipps zum Tunen eines vServers

Date Cube

Ein in 2D dargestellter Würfel, um 45 Grad nach oben und nach links gedreht. Auf der linken Seite stehen Zahlen von 1 bis 31, auf der rechten Seite des Würfels die Zahlen von 1 bis 12 und auf der nach unten zeigenden Seite die Jahreszahlen. Die Idee dahinter ist, dass es mühsam ist, aus einem herkömmlichen Kalender das Datum rauszusuchen. Ich finde es nervig, erstmal ein Jahr auszuwählen, dann bis zum richtigen Monat durchzuklicken und dann den Tag auszuwählen. Der Date Cube ermöglicht es, alle drei Parameter fast gleichzeitig auszuwählen. Wenn man so den 12.Juni 2007 markieren will, klickt man zunächst links auf 12, dann rechts auf 7 und unten auf 2007 und fertig. Funktionsfähige Flash-Demo folgt bald.

Geschrieben in crazyideas | Kommentare deaktiviert für Date Cube

Aerobic

Block A (16 ZZ):
1. Steptouch
2. Heel Dig seit, Füße öffnen
3. Leg Curl gesprungen, Schritt vor
4. Leg Curl gesprungen, Schritt vor

Block B (16 ZZ):
1. Grapevine mit Curl und Sprung am Ende
2. Mambo
3. Grapevine mit Curl und Sprung am Ende
4. Mambo

Block c (16 ZZ):
1. March vor (4 Schritte)
2. V-Step 180 Grad-Drehung, Front-Wechsel
3. March vor (zurück zum Auasgang, 4 Schritte)
4. V-Step 180 Grad-Drehung, Front-Wechsel

A+A+B+B+C+C = 3×32 ZZ, dann halbieren A+B+C+A+B+C = 3×32 ZZ

Geschrieben in choreos | Kommentare deaktiviert für Aerobic

Aerobic

32 ZZ gesamt
Block A (16 ZZ):
1. Scoop diagonal rechts vor
2. Out-In rechts
3. Scoop diagonal rechts
4. Out-In rechts

Block B (16 ZZ):
1. March zurück (4 Schritte)
2. Lunge rechts+links
3. March zurück (4 Schritte)
4. 2 Jumping Jack

am Ende Wechsel auf links möglich

Geschrieben in choreos | Kommentare deaktiviert für Aerobic

DB-Abfrage bei Zuordnung im BLOB

In Typo3 werden 1:n Beziehungen als kommaseparierte Liste in einem BLOB gespeichert. Dabei ist es nicht ohne weiteres möglich das Feld zu bearbeiten oder aus dem Feld auszulesen. Um aus einem solchen Feld auszulesen, liefert TYPO3 sinnvolle Funktionen, die man bei der Extensionentwicklung einsetzen kann. In der ersten Zeile bastelt man sich mit der Hilfe der Funktion listQuery einen Abfragestring. In diesem Fall sollte der gesuchte Eintrag der Kategorie $catint angehören, die Liste steht dazu im Feld ‚category‘. Die Variable $table enthält den Namen der Tabelle, die Abgefragt werden soll. Die zweite Zeile führt eine Anfrage aus, in $fields gibt man die Felder an, die zurückgegeben werden sollte. An den Where-String aus der ersten Zeile kann man bei Bedarf weitere Abfragen dranhängen wie z.B. ‚hidden=0 AND deleted=0‘.

$where = $GLOBALS['TYPO3_DB']->listQuery('category',$catint,$table);
$res = $GLOBALS['TYPO3_DB']->exec_SELECTquery($fields,$table,$where);

Geschrieben in TYPO3 | Kommentare deaktiviert für DB-Abfrage bei Zuordnung im BLOB