Beiträge von natalia

TabNavigator – Styles dynamisch zuweisen

In einem Tab-Navigator sollen die Styles, vor allem die Farben erst später gesetzt werden. Zunächst muss man die Stile für den TabNavigator fest definieren:

TabNavigator {
  backgroundColor: #8b8b8b;
  borderStyle: none;
  color: #ffffff;
  dropShadowEnabled: false;
  tabStyleName: "myTabs";
  firstTabStyleName: "myTabs";
  lastTabStyleName: "myTabs";
  selectedTabTextStyleName: "mySelectedTabs";
}

.myTabs {
  cornerRadius: 0;
  highlightAlphas: 0, 0;
  fillAlphas: 1, 1;
  fillColors: #ffffff, #ffffff;
  borderColor: #8b8b8b;
  color: #8b8b8b;
}

.mySelectedTabs {
  color: #ffffff;
  textRollOverColor: #ff9900;
}

Das macht man in einem Style-Abschnitt in der MXML-Datei. Dann kann man in einer Funktion auf die bestehenden Stile zugreifen und deren Attribute ändern.

// den TabNavigator CSS Style holen
var tabNavigatorStyle:CSSStyleDeclaration = StyleManager.getStyleDeclaration("TabNavigator");
// Hintergrundfarbe neu setzen (z.B. auf grün)
tabNavigatorStyle.setStyle("backgroundColor", 0x00FF00);
// den .myTabs CSS Style holen
var tabStyle:Object = StyleManager.getStyleDeclaration(".myTabs");
// z.B.cornerRadius setzen
tabStyle.setStyle("cornerRadius", 10);

Vielen Dank an Bort, den Flexperten auf dem Flex Forum.

Geschrieben in flash/flex | Kommentare deaktiviert für TabNavigator – Styles dynamisch zuweisen

Application auf Flash Media Server 2

Es gibt einige Beispiele auf der Adobe Seite, leider war da kein einziges, das Flash CS3 (mit AS3) und Flash Media Server 2 beschrieb. Hier sind einige Grundlagen:

Um eine Application zu erstellen, muss man im Ordner applications im Verzeichnis des Servers einen neuen Ordner anlegen, denn man dann z.B. “app” benennt. In diesem Ordner erstellt man eine Datei namens “main.asc”, die dann die Logik der Anwendung beschreibt.

Bei FMS2 wird die Datei in AS2 geschrieben, d.h. keine Typbeschreibung in der Variablen-Deklaration, also kein var i:Number; Ausserhalb der Funktionen dürfen keine Variablen stehen. Wenn man Variablen initialisieren will, muss man das in der onAppStart tun.

Die Funktion onAppStart wird automatisch beim Laden der Anwendung aufgerufen, die geschieht, wenn ein Client sich mit der Anwendung verbinden will oder wenn man die Anwendung manuell startet.

application.onAppStart = function() { ... }

Die Funktion onConnect wird aufgerufen, wenn ein Client sich verbinden möchte. Die Verbindung kann man annehmen oder ablehnen.

application.onConnect = function(clientObj,clientName) {
  application.acceptConnection(clientObj);
}

Um eine Funktion beim Client aufzurufen, muss diese in der NetConnection definiert sein. Auf dem Server ruft man über call die Funktion auf.

Flash AS3 (Client)
var nc:NetConnection = new NetConnection(); // Rest siehe voriger Post
nc.eineFunktion = function(wert1,wert2) { ... }

main.asc in AS2 auf Server
clientObj.call("eineFunktion",null,wert1,wert2);
application.broadcastMsg("eineFunktion", wert1,wert2)

An zweiter Stelle steht eine CallBack-Funktion, die aufgerufen wird, wenn eine Antwort erwartet wird. In der zweiten Zeile wird die Funktion auf allen Clients ausgeführt, zu beachten ist hierbei, dass da die CallBack-Funktion fehlt.

Anderherum funktioniert es wie folgt: auf dem Server definiert man über prototype die Funktion in der Client-Klasse. In Flash ruft man sie über call auf.

Flash AS3 (Client)
nc.call(neueFunktion,null,wert3,wert4);

main.asc in AS2 auf Server
Client.prototype.neueFunktion = function(wert3,wert4) { ... }

Noch ein Tipp: sobald man die Datei als asc abgespeichert hat, kann man keine Syntax-Überprüfung machen (was fürn Schwachsinn). Den Quellcode einfach kopieren, neues Fenster auf, ohne Speichern Syntax checken lassen.

Geschrieben in flash/flex | Kommentare deaktiviert für Application auf Flash Media Server 2

Flash CS3 und Flash Media Server 2

Bin am verzweifeln gewesen – habe die Dokumente zum Flash Media Server 2 durchgelesen, dummerweise sind alle Beispiele für Action Script 2. In AS3 hat sich einiges geändert. Das waren schon die ersten Probleme: NetConnection.onStatus existiert so nicht mehr, bis man erstmal findet, wie man sich sonst korrekt mit dem Server verbinden kann, vergehen Studen. Und ein weiterer wichtiger Punkt: AS3 nutzt ein neues Format, um Action Script Daten zu übertragen, das aber leider inkompatibel ist mit dem alten Action Message Format (AMF). In allen Beispielen kein Wort davon, dass man dem AS3 mitteilen muss, dass anstatt AMF3 AMF0 verwendet werden soll.

NetConnection.defaultObjectEncoding = flash.net.ObjectEncoding.AMF0;

Und so baut man nun eine Connection auf:

private function init():void{
  nc = new NetConnection();
  nc.addEventListener(NetStatusEvent.NET_STATUS, netStatus);
  nc.addEventListener(SecurityErrorEvent.SECURITY_ERROR, netSecurityError);
  nc.connect("rtmp:/myApplication");
}

private function netStatus(event:NetStatusEvent):void {
  var info:Object = event.info;
  trace(info.code);
}

private function netSecurityError(event:SecurityErrorEvent):void {
  trace("netSecurityError: " + event);
}

Diese Infos habe ich von der Seite Programming Flash Communication Server.

Geschrieben in flash/flex | Kommentare deaktiviert für Flash CS3 und Flash Media Server 2

Meta-Angaben in TS-Setup

Das sollte man ins TS-Setup reinschreiben, damit seitwert.de bei den "Technischen Details" weniger meckert.

seite {
  meta.keywords = Schlüsselwörter, wichtige Begriffe, mit denen die Seite assoziiert werden soll
  meta.author = Autor der Seite
  meta.description = Beschreibung der Seite, ganze Sätze
  meta.verify-v1 = Google-Webmasters Validierungs-Code
  meta.robots = index
}

Geschrieben in TYPO3 | Kommentare deaktiviert für Meta-Angaben in TS-Setup

Typo3 Links

vor allem für Kerstin 🙂

Zunächst mal gibt es gute Einsteigertutorials. Im ersten wird erklärt, was wie zu bedienen ist und ein paar grundsätzliche Sachen. Im zweiten, wie man ein eigenes HTML-Template einbindet (denn die Typo3 Beispiel Templates sind echt häßlich).
Der Einstieg (doc_tut_quickstart)
Moderne Templateerstellung (doc_tut_templ_sel)

Wenn man das fertig hat, dann empfiehlt sich ein Blick in Typo3 by Example – es ist nett geschrieben (Kaspar hat einen interessanten Humor) und ist sehr aufschlussreich.
TypoScipt by Example (doc_core_tsbyex)

Evtl. könnte auch TypoScript Templates interessant sein, hab ich aber nicht gebraucht.

Auf lange Sicht gesehen, sind die Referenzen für TypoScript sehr sinnvoll. Ich habs mir ausgedruckt und markiere da auch manchmal Wörter oder Absätze.
TSref (doc_core_tsref) – für Template Setup
TSconfig (doc_core_tsconfig) – für Page und User config

Grundsätzlich ist typo3.org die erste Anlaufstelle – da gibt es viele Manuals, Tutorials, Extensions und Informationen. Wenn man da nicht weiterkommt, gibt es nette deutsche Seiten und Foren.

typo3.net enthält eine deutsche Dokumentation zu Typo3, hat ein gutes FAQ. Empfehlenswert ist auch das Probekapitel aus dem Buch “Praxiswissen Typo3“.

Ein sehr hilfsbereites Forum (auch mit FAQ) ist das typo3forum.net, da gibt es auch FAQ und Anleitungen.

Geschrieben in TYPO3 | Kommentare deaktiviert für Typo3 Links

Typo3 Installation lokal unter Windows

Zunächst mal braucht man lokal einen Web- und einen Datenbankserver. Dazu eignet sich am besten XAMPP, auch in der Lite Version.
Gehe auf typo3.org, dann auf “Download” und anschliessend auf die Packages-Seite.

Um eine funktionierende Typo3-Installation zu bekommen, braucht man pro Typo3-Seite eine Dummy und insgesamt mindestens eine Source. Auf Windows spielt es keine Rolle, da dort keine symbolischen Links möglich sind. Deswegen lädt man sich eine “Source with Dummy size ZIP”-Version herunter. Diese dann entpacken und in den htdocs-Ordner des Servers packen.

Danach ist die Installation relativ einfach. Man ruft die Startseite auf, wenn man dann nicht automatisch auf die Installationsroutine weitergeleitet wird, sollte man /typo3 dranhängen. Daraufhin sollte die Installation gestartet werden – man muss den Datenbankserver angeben, die Zugangsdaten und Typo3 legt dann die Tabellen an.

Wenn man fertig ist, kann man sich in Backend einloggen.

Handys mit Benutzerverwaltung

Eigentlich will ich mit meinem Telefon einfach nur telefonieren und SMS senden. Hatte letzens ein neueres Handy in der Hand und das Hauptmenü besteht da aus 13 Punkten, das ist doch ätzend. Und wenn man mal was braucht, dann sucht man stundenlang, bis man es irgendwo im Unterpunkt 22 des 11.Punktes des Hauptmenüs findet. Daher meine Idee: ganz einfache Benutzerverwaltung fürs Telefon! Es gibt einen Adminzugang (8-stellige Nummer), damit bekomme ich das ganze Menü, und dann kann ich auswählen, welche Menüpunkte der Benutzer sehen soll oder nicht, die werden dann im Admin-Menü als transparent dargestellt z.B. Wenn man dann beim Hochfahren des Telefons eine 4-stellige Nummer eingibt, dann ist man als Benutzer angemeldet und hat nur noch wenige Menüpunkte zur Verfügung.

Dieses System hätte nur Vorteile: Jugendliche könnten nicht das Geld ihrer Eltern verschwenden, weil die Eltern die MMS und weitere teuere Funktionen einfach ausmachen. Man hat keine lästigen 15 Punkte Menüs, sondern nur Kontakte, SMS und Kalender.

Weitere Entwicklung: Sortierung der Menüpunkte, Einschränken bestimmter Funktionen (20 SMS pro Tag) etc.

Geschrieben in crazyideas | Kommentare deaktiviert für Handys mit Benutzerverwaltung

RealURL: Sysfolder-Namen aus Pfad entfernen

Ich lege die Seiten eines Untermenüs gerne in Sysfoldern ab. Das führt leider dazu, dass der Name des Sysfolders in dem Pfad zur Seite erscheint. Eine (meiner Meinung nach einfache und gute) Lösung habe ich hier gefunden:
https://www.xing.com/app/forum?op=showarticles;id=3797882

In der Datei typo3conf/ext/realurl/class.tx_realurl_advances.php ändert man die Zeilen ab 346 zu
if ($rootFound) {
  if (!t3lib_div::inList($this->>conf['excludeDoktypes'], $rootLine[$a]['doktype'])) {
    if (!t3lib_div::inList($this->conf['excludeUids'], $rootLine[$a]['uid'])) {
      $newRootLine[] = $rootLine[$a];
    }
  }
}

die if-Abfrage steht da vorher schon, sie muss nur erweitert werden.

In die Konfguration von RealURL in der localconf.php kann noch folgendes ergänzt werden:
'pagePath' => array(
  'type' => 'user',
    'userFunc' => 'EXT:realurl/class.tx_realurl_advanced.php:&tx_realurl_advanced->main',
    'spaceCharacter' => '-',
    'excludeDoktypes' => '254'
),...

die 254 steht für den Doktype “Sysfolder”.

Geschrieben in TYPO3 | Kommentare deaktiviert für RealURL: Sysfolder-Namen aus Pfad entfernen

RealURL Konfiguration für pro_industrydb und sk_calendar

Auszug aus der RealURL-Konfiguration in der typo3conf/localconf.php
$TYPO3_CONF_VARS['EXTCONF']['realurl']['_DEFAULT'] = array(
'init' => array(...),
'pagePath' => array(...),
'fileName' => array(...),
'postVarSets' => array(
   '_DEFAULT' => array(
    'industrydb' => array(
      array(
        'GETvar' => 'tx_proindustrydb_pi1[showUid]',
        'lookUpTable' => array(
          'table' => 'tx_proindustrydb_entries',
          'id_field' => 'uid',
          'alias_field' => 'title'
        ),
      ),
    ),
    'calendar' => array(
      array(
        'GETvar' => 'tx_skcalendar_pi1[view]',
      ),
      array(
        'GETvar' => 'tx_skcalendar_pi1[uid]',
      ),
      array(
        'GETvar' => 'tx_skcalendar_pi1[offset]',
      ),
      array(
        'GETvar' =>'tx_skcalendar_pi1[datefrom]',
      ),
      array(
        'GETvar' => 'tx_skcalendar_pi1[dateto]',
      ),
      array(
        'GETvar' => 'tx_skcalendar_pi1[targetgroups]',
        'lookUpTable' => array(
          'table' => 'tx_skcalendar_targetgroup',
          'id_field' => 'uid',
          'alias_field' => 'title'
        ),
        'noMatch' => 'bypass',
      ),
      array(
        'GETvar' => 'tx_skcalendar_pi1[categories]',
        'lookUpTable' => array(
          'table' => 'tx_skcalendar_category',
          'id_field' => 'uid',
          'alias_field' => 'title'
        ),
        'noMatch' => 'bypass',
      ),
      array(
        'GETvar' => 'tx_skcalendar_pi1[locations]',
        'lookUpTable' => array(
          'table' => 'tx_skcalendar_location',
          'id_field' => 'uid',
          'alias_field' => 'title'
        ),
        'noMatch' => 'bypass',
      ),
      array(
        'GETvar' => 'tx_skcalendar_pi1[organizers]',
        'lookUpTable' => array(
          'table' => 'tx_skcalendar_organizer',
          'id_field' => 'uid',
          'alias_field' => 'title'
        ),
        'noMatch' => 'bypass',
      ),
    ),
  ),
),
);