Archiv

Archiv für April, 2011

FTP Backup von Verzeichnisen über die Komandozeile

22. April 2011 gabriel Keine Kommentare

Wer schon mal versucht hat per FTP auf der Kommandozeile etwas zu machen, wird sehr schnell festgestellt haben, dass es 1.) recht mühsam und unkomfortabel ist, sich mit den vorhandenen Befehlen durch einen Verzeichnisbaum zu hangeln und dass (viel Wichtiger) 2.) manche Sachen einfach nicht gehen. So ist es zum Beispiel nicht möglich, einen Verzeichnisbaum mit einem Befehl herunter zu laden!! Man kann immer nur eine Datei gleichzeitig laden.

Mir ist das noch nie aufgefallen, da ich immer mit FTP-Programmen gearbeitet habe, die machen das quasi “im Hintergrund” für einen. Wenn man das aber auf der untersten Ebene versucht – sprich auf der Kommandozeile – dann fällt das eben auf.

Konkret ging es darum, einen Backup-Server, auf dem nur FTP-Zugriff möglich war (ja, leider, ich hätte auch lieber per ssh drauf zugegriffen!), ein Backup im Hintergrund auf ein NAS zu machen, ohne dabei über ein FTP den Hauptrechner zu belasten, bzw. das ganze zu automatisieren.

Machbar ist es nun nicht über ftp, sondern per wget:

wget -r -l0 -np ftp://user:password@host.com/verzeichnis

-r steht für rekursiv (also alle Dateien durchsuchen)
-l0 steht für die Verzeichnistiefe (0 = unbeschränkte Tiefe, 1 = Eine Verzeichnisebene, 2 = Zwei Verzeichnisebenen, etc.)
-np steht für “no parent”, also nicht in die darüber liegenden Verzeichnisse wechseln
/verzeichnis/ ist optional

Das ganze kann man dann noch wunderbar mit dem screen Befehl oder einem cronjob verknüpfen.

Link: http://www.essential-freebies.de/board/viewtopic.php?t=4075

KategorienTech-Talk Tags: , , ,

Typo3 Backend: stdWrap in eigner Funktion nutzen

11. April 2011 gabriel Keine Kommentare

Um in einen Aufruf einer php-Funktion in einer eigenen Extension das “Schweizer Messer” ‘’stdWrap” nutzen zu können bedarf es einiger – nicht wirklich gut dokumentierter – Kniffe. Beispielsweise ist es sinnvoll, einen Wrap um ein eigenes Feld setzen zu können, ohne dass dies im PHP-Code hardkodiert werden muss, oder ein Template genutzt und geparst werden muss.

Und so funktioniert es.
Wir verwenden im Beispiel ein Typoscript, dass eine eine userFunc aufruft und ”apptitle” als Parameter wrappen soll.

  10 = USER_INT
  10 {
    	userFunc = tx_lpiphone_pi2->getXMLValue
    	apptitle.stdWrap.dataWrap = <apptitle updated="{field:tstamp}">|</apptitle>
  }

Zuerst sucht man sich das entsprechende Element aus dem Konfigurationsarray.

 function FUNCTIONNAME ($content, $conf)    {
		$this->conf=$conf;
		...
 }

nun muss es durch das cObj-Objekt “geschleust” werden und dort dann die stdWrap-Methode aufgerufen werden. Die stdWrap-Mehtode cObj-Objekt nimmt zwei Parameter entgegen: Der erste Parameter ist der Parameter/die Variable auf der der stdWrap angewendet werden soll. Der zweite Parameter ist ein array der die stdWrap Anweisungen enthält (was wir uns gleich aus dem $conf-igurations-Array bauen werden).

Den zweiten Parameter (also die Anweisungen) holen wir uns jetzt aus dem $conf array:

$arrayValueFromConfig = 'apptitle'; //das ist der Parametername aus dem Typoscript
$arrayValueFromConfigPlusPoint = $arrayValueFromConfig."."; //hier fügen wir einen Punkt (".") hinzu damit wir einen Array kriegen!.

$valueToWrap = "Beispielvariable"; // Wer aus dem Phpskript, der per stdWrap verarbeitet werden soll (hier ge-dataWrappt).

Diese so zusammen gebastelten Werte übergeben wir jetzt an die funktion stdWrap vom cObj-Objekt und fügen sie der Variable $content hinzu, damit sie im Frontend angezeigt wird.

 $content .= $this->cObj->stdWrap($valueToWrap, $conf[arrayValueFromConfigPlusPoint]);

Hier noch ein einfacheres Beispiel, was die Verwendung noch etwas veranschaulicht:

$valueToWrap = "hallo";
$wrapAnweisungsArray = array ('case' => 'upper', 'wrap' => '<font size="10"> | </font>');
$content .= $this->cObj->stdWrap($valueToWrap,$wrapAnweisungsArray);

// gibt folgendes aus: <font size="10">HALLO</font>

http://www.pi-phi.de/functions.html
http://www.typo3.net/tsref/functions/stdwrap/
http://wiki.typo3.org/De:TSref/stdWrap

Typo3: Backend-Felder an die richtige Stelle positionieren

6. April 2011 gabriel Keine Kommentare

Um im Typo3 Backend selbst erstellte Felder an die richtige Stelle zu positionieren, gibt es nachfolgende Möglichkeit.

Beispiel:

  • Aus welcher Tabelle: ”tt_content”
  • Das (Datenbank-)Feld das eingebunden werden soll ‘tx_lpiphonedisplay_color’
  • In welchen CType soll das neue Feld eingefügt werden: ”lp_iphone_pi1” (hier könnte auch so was stehen, wie ”textpic” oder ”text”).
  • Vor oder nach welchem Feld es eingefügt werden soll: ”before:tx_lpiphone_lp_aditional_items” (fügt das neue Feld vor dem Feld ”tx_lpiphone_lp_aditional_items” ein). Entsprechend ”after:” für nach dem Feld.

In der Datei ”ext_tables.php” werden folgende Zeilen hinzugefügt:


// in $tempColumns wird das Feld erzeugt (sieht bei Euch bestimmt ganz anders aus
// hier werden drei Radobuttons für die Werte 1,2,3 erzeugt
$tempColumns = Array (
	"tx_lpiphonedisplay_color" => Array (
		"exclude" => 1,
		"label" => "LLL:EXT:lp_iphone_display/locallang_db.xml:tt_content.tx_lpiphonedisplay_color",
		"config" => Array (
			"type" => "radio",
			"items" => Array (
				Array("LLL:EXT:lp_iphone_display/locallang_db.xml:tt_content.tx_lpiphonedisplay_color.I.1", "1"),
				Array("LLL:EXT:lp_iphone_display/locallang_db.xml:tt_content.tx_lpiphonedisplay_color.I.2", "2"),
				Array("LLL:EXT:lp_iphone_display/locallang_db.xml:tt_content.tx_lpiphonedisplay_color.I.3", "3"),
			),
		)
	),
);

t3lib_div::loadTCA("tt_content");
t3lib_extMgm::addTCAcolumns("tt_content",$tempColumns,1);

// ### diese Zeile fügt nun Euer neues Feld an die richtige Stelle ein: ###
t3lib_extMgm::addToAllTCAtypes('tt_content','tx_lpiphonedisplay_color','lp_iphone_pi1','before:tx_lpiphone_lp_aditional_items');