Home  |  Über den Autor  |  Impressum  |  .NET Developer Group Braunschweig  |  AX Solutions

RSS 2.0 | Atom 1.0 | CDF | Send mail to the author(s)  
 Thursday, April 03, 2008

Heute will ich mal was dazu schreiben, wie man die LATIKA Knowledgebase an seine Bedürfnisse anpassen kann. Als Beispiel habe ich mir überlegt, wie man YouTube Videos in einen Artikel einbetten kann und zwar mit einem eigens "entwickelten" Tag. Aber vielleicht sollte ich erstmal erklären was ein Tag ist.

 

Für LATIKA haben wir die LATIKA Markup Language (LML) entwickelt, dabei handelt es sich um eine erweiterte Markupsprache, um das Schreiben von Artikeln zu vereinfachen. Beispiele für Standardtags findet man hier.

Ein Tag hat folgenden Aufbau:

[[command:param_1;param_2;...;param_n]subject]

Die Parameter und das Subjekt sind je nach Kommando/Tag optional.

 

Ein Wiki-Tag im Bearbeitenmodus sieht zum Beispiel so aus:

LATIKA Tags unterstützen auch [[wiki]Javascript].

Im Lesemodus wird dann folgendes generiert:

LATIKA Tags unterstützen auch Javascript.

 

Die Tag-Konfiguration befindet sich in der Datei ~\Configuration\TagDecrypter\tagdecrypter.config und hat folgenden Aufbau:


<?xml version="1.0" encoding="utf-8" ?> 
<Tags>  
...  
<Tag> 
    <Command type="wiki">Verlinkt zu Wikipedia.</Command> 
    <Subject optional="false">Der zu verlinkende Text.</Subject> 
    <Params> 
    </Params> 
    <ErrorReplacement>$subject$</ErrorReplacement> 
    <Transformation type="SimpleTagTransformation" replaceEqualTags="true"
      <Html> 
        <![CDATA[<a href="http://de.wikipedia.org/wiki/$subject$" title="Definition von
'$subject$' bei Wikipedia nachschlagen" target="_blank">$subject$</a>]]>
 
      </Html> 
      <Text>$subject$</Text>       
    </Transformation> 
  </Tag> 
... 
</Tags>

 

Diese XML-Datei kann nach belieben verändert und ergänzt werden. Die Tags können von beliebig implementierbaren TagInterpretern verarbeitet werden. Ein TagInterpreter wiederum benutzt verschiedene TagTransformationen um die Tags zu rendern. Standardmässig wird die Knowledgebase nur mit der SimpleTagTransformation ausgeliefert. Mit einer SimpleTagTransformation können wir ein Tag durch einen statischen Inhalt austauschen, der über Parameter angepasst werden kann. Für die Zwecke meines Beispiels reicht eine SimpleTagTransformation aber vollkommen aus.

 

Ein eigenes Tag erstellen

So, kommen wir nun aber zum Thema: Videos von YouTube einbetten mit einem eigenem Tag.

Dafür hab ich mir mal folgendes Video rausgesucht: http://www.youtube.com/watch?v=U4sjNtH3pRI ...Wer mein Blog schon länger liest weiß warum ;-)

Es gibt auf der YouTube-Seite zu (fast) jedem Video ein Stück HTML-Code das man kopieren kann und somit in seine eigene Seite einbauen kann:

<object width="425" height="355">
  <param name="movie" value="http://www.youtube.com/v/U4sjNtH3pRI&hl=en"></param>
  <param name="wmode" value="transparent"></param>
  <embed src="http://www.youtube.com/v/U4sjNtH3pRI&hl=en" type="application/x-shockwave-flash" wmode="transparent" width="425" height="355"></embed>
</object>

Natürlich könnten wir diesen Code auch nehmen, um ihn direkt in der Codeansicht des Bearbeitenmodus eines Artikels einzufügen. Ein Tag macht das Ganze aber noch etwas "smoother".

 

Die Basis

Als erstes kopieren wir ein beliebiges Tag aus der Tagkonfiguration und fügen es erneut ein. Nehmen wir zum Beispiel das oben bereits erwähnte wiki-Tag und löschen alle Inhalte:

<Tag> 
    <Command type=""></Command> 
    <Subject optional="false"></Subject> 
    <Params> 
    </Params> 
    <ErrorReplacement>$subject$</ErrorReplacement> 
    <Transformation type="SimpleTagTransformation" replaceEqualTags="true"
      <Html> 
        <![CDATA[...]]> 
      </Html> 
      <Text>$subject$</Text>       
    </Transformation> 
  </Tag> 

 

Als nächstes geben wir dem Tag einen Namen (youtube) und fügen den HTML-Code von der YouTube-Seite ein:

<Tag> 
    <Command type="youtube"></Command> 
    <Subject optional="false"></Subject> 
    <Params> 
    </Params> 
    <ErrorReplacement>$subject$</ErrorReplacement> 
    <Transformation type="SimpleTagTransformation" replaceEqualTags="true"
      <Html> 
        <![CDATA[<object width="425" height="355">
<param name="movie" value="http://www.youtube.com/v/U4sjNtH3pRI&hl=en"></param>
<param name="wmode" value="transparent"></param>
<embed src=http://www.youtube.com/v/U4sjNtH3pRI&hl=en" type="application/x-shockwave-flash"
wmode="transparent" width="425" height="355"></embed>
</object>]]>
 
      </Html> 
      <Text>$subject$</Text>       
    </Transformation> 
  </Tag> 

 

Der Code (U4sjNtH3pRI) über den das Video identifiziert wird, habe ich schwarz markiert. Dies sind die einzigen Stellen an denen sich der Code von den Videos unterscheidet.

Unser Tag könnte also wie folgt aussehen [[youtube:U4sjNtH3pRI]]

 

Dafür müssen wir aber noch einen erforderlichen Parameter definieren und an den entsprechenden Stellen einsetzen. Da wir kein Subjekt benötigen müssen wir das entsprechende Attribut auf "true" setzen.

Schließlich fügen wir für das Kommando und das Subjekt einen beschreibenden Text ein. Dies ist wichtig, da aus der Konfigurationsdatei auch gleichzeitig der Hilfetext für die Tags generiert wird. Jedes neue Tag das wir erstellen erscheint also auch automatisch in der Taghilfe (siehe Ende des Artikels).

 

<Tag> 
    <Command type="youtube">Einbetten eines YouTube-Videos.</Command> 
    <Subject optional="true"></Subject> 
    <Params> 
      <Param id="1" optional="false">Eindeutiger Code des Videos der aus dem URL (Parameter "v=") kopiert werden kann.</Param>
    </Params> 
    <ErrorReplacement>$subject$</ErrorReplacement> 
    <Transformation type="SimpleTagTransformation" replaceEqualTags="true"
      <Html> 
        <![CDATA[<object width="425" height="355">
<param name="movie" value="http://www.youtube.com/v/$param_1$&hl=en"></param>
<param name="wmode" value="transparent"></param>
<embed src=http://www.youtube.com/v/$param_1$&hl=en" type="application/x-shockwave-flash"
wmode="transparent" width="425" height="355"></embed>
</object>]]>
 
      </Html> 
      <Text>$subject$</Text>       
    </Transformation> 
</Tag> 

 

Nun können wir das Ganze auch mal testen:

 

Bearbeitungsmodus

latika_youtube_01

 

Lesemodus

latika_youtube_02

 

Funktionalität ergänzen

Um das Tag noch ein bisschen weiter auszubauen, habe ich mir überlegt, dass es ganz gut wäre, wenn man noch einen Textlink zur YouTube-Seite einbauen könnte. Weiterhin sollte man auswählen können, ob man nur das Video, nur den Link oder beides anzeigen lassen möchte. Mit ein bisschen Javascript-Unterstützung sieht das fertige Tag wie folgt aus:

 

<Tag> 
    <Command type="youtube">Einbetten eines YouTube-Videos.</Command> 
    <Subject optional="true"></Subject> 
    <Params> 
      <Param id="1" optional="false">Eindeutiger Code des Videos der aus dem URL (Parameter "v=") kopiert werden kann.</Param>
      <Param id="2" optional="true">0 = Video nicht einbetten.</Param>
    </Params> 
    <ErrorReplacement>$subject$</ErrorReplacement> 
    <Transformation type="SimpleTagTransformation" replaceEqualTags="true"
      <Html> 
        <![CDATA[
        <script>
          if("$subject$"!="") {
            document.write('<p><a href="http://www.youtube.com/watch?v=$param_1$" target="_blank">$subject$</a></p>');
          }
          if("$param_2$"!="0") {
            document.write('<object width="425" height="355"><param name="movie" value="http://www.youtube.com/v/$param_1$"></param>
<param name="wmode" value="transparent"></param><embed src="http://www.youtube.com/v/$param_1$&hl=en" type="application/x-shockwave-flash"
wmode="transparent" width="425" height="355"></embed></object>');
          }
        </script>]]>
      </Html> 
      <Text>$subject$</Text>       
    </Transformation> 
</Tag> 

 

Die Syntax für die 3 Fälle sieht wie folgt aus:

Nur Video
[[youtube:U4sjNtH3pRI]]

Video und Link
[[youtube:U4sjNtH3pRI]How We Do!]

Nur Link
[[youtube:U4sjNtH3pRI;0]How We Do!]

 

Zu guter Letzt werfen wir noch einen Blick auf die dynamisch generierte Hilfe:

latika_youtube_03

 

So, das wars erstmal. Ich denke in einem anderen Blogeintrag werde ich zeigen wie man eine eigene TagTransformation implementieren kann, die etwas mehr kann, als nur statisch Texte auszutauschen.

posted on 4/3/2008 1:51:17 PM (W. Europe Standard Time, UTC+01:00)  #    Comments [1]

 Friday, March 28, 2008

Gerade hat der Postbote die neueste Ausgabe des dot.net magazins vorbeigebracht. An sich nichts Besonderes, wenn in dieser Ausgabe nicht die LATIKA Knowledgebase auf der CD wäre :)

 

Zu LATIKA siehe auch:
http://www.eljed.de/blog/PermaLink,guid,ca4b21b9-2546-43ec-8798-7d699303e774.aspx

posted on 3/28/2008 11:18:16 AM (W. Europe Standard Time, UTC+01:00)  #    Comments [0]

 Thursday, March 20, 2008

Ich hatte gerade einen sehr interessanten Fehler in Visual Studio. Beim Starten meiner Webapplikation öffnete sich immer UltraEdit anstatt des Internet Explorers:

 

UltraEdit und VS 2008

 

Die Dateiverknüpfungen in UltraEdit und VS 2008 waren alle so wie sie sein sollten. Es war nix zu finden, was daraufhin deutete warum nun UltraEdit versucht einen Url als Dokument zu öffnen.

Fehlermeldung:

C:\Program Files (x86)\UltraEdit\hhtp:\\localhost:5215\Default.aspx enthält eine ungültige Pfadangabe.

 

Die einfache Lösung die ich gefunden habe:

1) VS beenden

2) UltraEdit.exe umbenennen

3) VS starten

4) Webapplikation starten

5) UltraEdit.exe umbenennen rückgängig machen

 

komisch, komisch...

posted on 3/20/2008 5:08:25 PM (W. Europe Standard Time, UTC+01:00)  #    Comments [0]

 Monday, March 17, 2008

Für alle die nicht bei der MIX waren hat Brad Abrams das Silverlight 2 Developer Reference Poster in seinem Blog zum Download zu Verfügung gestellt. Es gibt eine Übersicht über die Namensräume und was alles neu darin ist, sowie eine Liste der Controls, Tools und der unterstützten Plattformen und Browser. "A must have" sozusagen.

posted on 3/17/2008 5:37:55 PM (W. Europe Standard Time, UTC+01:00)  #    Comments [0]

 Tuesday, March 11, 2008

Zwar schon "etwas" länger her, aber eben gerade erst gefunden: Shawn Burke hat in seinem Blog den Quellcode der in Silverlight 2 Beta 1  enthaltenen Controls inklusive Unit Tests veröffentlicht. Der Quellcode dürfte sehr hilfreich für die Entwicklung von Silverlight-Applikationen sein.

Die Controls stehen übrigens unter der Microsoft Source License for Silverlight Controls.

posted on 3/11/2008 3:14:44 PM (W. Europe Standard Time, UTC+01:00)  #    Comments [0]

 Monday, March 10, 2008

Das war sie nun wieder die CeBIT. Einen neuen Besucherrekord hat es wohl auch gegeben, wie ich heute Morgen im Radio gehört habe. Eine halbe Million Besucher, nicht schlecht. Das neue Messe-Konzept scheint also aufgegangen zu sein.

Auch Lars und ich waren auf der CeBIT. Als Axinom Partner war der Besuch beim Axinom Stand natürlich Pflicht. Die perfekte Gelegenheit sich die neue Version 8.0 von einem Entwickler oder in unserem Fall von einer Entwicklerin persönlich vorführen zu lassen.

Neue Features für die Benutzer des CMS gibt es allerdings nicht gerade in Unmengen, aber dafür einige Sinnvolle. Beispielsweise kann man nun die Übersichtsseiten so filtern, dass man nur die Elemente angezeigt bekommt die man bearbeiten darf. Bei größeren Seiten eine sehr angenehme Arbeitserleichterung. Die meisten Verbesserungen sollen unter der Haube passiert sein und sind nur für Entwickler von Interesse. Das Anpassen der Übersichtsseiten und der Filter z.B. sollen nun leichter von der Hand gehen.

Highlight war natürlich das Silverlight 2.0 Frontend, dass über spezielle Services Objekte aus dem AxCMS abrufen und visualisieren kann. Axinom hat das außergewöhnliche Glück schon mit einer Vorabversion arbeiten zu können. Nicht das ich jetzt neidisch bin oder so... :-)

Sobald man die neue Version herunterladen kann, werde ich das Ganze mal testen und wenn es die Zeit zulässt schreibe ich noch einen detaillierteren Blogeintrag über die neuen Features.

 

Ach ja, bevor ich es vergesse. Mein persönliches Highlight der CeBIT war übrigens, dass ich mit meinem Wagen direkt in der Halle parken durfte ;-)

Mein_Auto

posted on 3/10/2008 9:19:25 AM (W. Europe Standard Time, UTC+01:00)  #    Comments [0]

 Thursday, March 06, 2008

Endlich ist es soweit. Die Beta 1 von Silverlight 2 und die dazu gehörigen Tools für Visual Studio stehen zum Download bereit. Wer sich als Webentwickler bisher noch nicht mit Silverlight beschäftigt hat kommt wohl nun nicht mehr drum herum ;-)

 

Microsoft Silverlight Tools Beta 1 for Visual Studio
http://www.microsoft.com/downloads/details.aspx?FamilyId=E0BAE58E-9C0B-4090-A1DB-F134D9F095FD&displaylang=en

Silverlight 2 Beta 1
http://www.microsoft.com/silverlight/resources/installationFiles.aspx?v=2.0

 

Tutorials von Scott Guthrie

First Look at Silverlight 2
http://weblogs.asp.net/scottgu/archive/2008/02/22/first-look-at-silverlight-2.aspx


First Look Using Expression Blend with Silverlight2
http://weblogs.asp.net/scottgu/archive/2008/02/28/first-look-at-using-expression-blend-with-silverlight-2.aspx

posted on 3/6/2008 10:51:23 AM (W. Europe Standard Time, UTC+01:00)  #    Comments [0]

 Tuesday, February 26, 2008

Sehr lustiges Kabarett von Pigor & Eichhorn, auch wenn ich mich persönlich etwas angegriffen fühle, obwohl ich nicht braun gebrannt bin und blonde Strähnchen habe...


 

Ab Minute 8:03 bin ich übrigens auch aufgestanden ;-)

posted on 2/26/2008 12:42:30 PM (W. Europe Standard Time, UTC+01:00)  #    Comments [1]