Mit ‘Script’ getaggte Artikel

Options in Select per Javascript automatisch markieren

Mittwoch, 17. März 2010

Die sogenannten “<select>” HTML-Elemente (oder auch bekannt als Drop-Down Menüs) werden häufig in Webseiten eingesetzt, insbesondere in Formularen, wo eine Auswahl anhand von mehreren Möglichkeiten getrofffen wird.

Eine häufig-benutzte Eigenschaft bei der Programmierung mit Select-Elementen ist die Mehrfachauswahlmöglichkeit. Somit wird das Feld in ein Textbox mit Scrollbalken, wo mehrere Elemente per Maus selektiert werden können. Wenn die Elemente, die Sie selektieren möchten unter einander vorkommen, dann können Sie das oberste Element mit der Maus markieren und einfach mit gedrückter Maustaste nach unten ziehen. Wenn Sie mehrere Elemente/Options selektieren möchten, die nicht einander folgen, so können Sie die STRG Taste gedrückt halten und per Mausklick die Elemente markieren und somit selektieren.

Problematik

Die Problematik, die wir an dieser Stelle sehen und angreifen möchten, ist dass die Liste der Options einfach zu lang werden kann, was das Selektieren im wesentlichen umständlich macht. Ein Beispielsscenario wäre eine sehr lange Liste mit Tags, die Sie einer Seite oder Element zuordnen möchten. Der Schieberegler wird immer kleiner und das Markieren wird langsam unmöglich. Welche Möglichkeit gibts es auch vom Webdesign her da?

Einsatz

Man kann die Optionen im Selectfeld automatisch per Javascript markieren lassen, in dem man diese beispielsweise neben dem Feld als reine Links ausgibt und der Eigenschaft der Links “onclick” diese Funktion zuweist:

function SelectItemInSelect(arrSelect, sItem) {
   for (k=0; k<arrSelect.options.length; k++) {
      if (arrSelect.options[k].value==sItem) {
           arrSelect.options[k].selected = true;
      }
   }
}

Welche Parameter nimmt die Programmierfunktion?

1. arrSelect – das ist das eindeutig im ‘document’ identifizierte <select>, dessen Optionen durchsucht werden, Object
2. sItem – das ist der Wert des Options, nach dem es gesucht wird und dass wir selektieren möchten, String

Was macht die Funktion?

1. Die Funktion loopt durch die for-Schleife alle Elemente des übergebenen Selects.
2. Die Optionen vom Select würden so aussehen:

<option value="IrgendeinID">Text</option>

Sollte IrgendeinID gleich sItem sein, so wird das Element markiert. Das richtig coole dabei ist dass das Feld automatisch zum markierten Element springt, so dass es immer sichtbar ist. So nimmt man die Selektion wahr.

Wie setzt man die Funktion bei der Programmierung ein?

Alle Elemente/Options des Selectfeldes können neben dem Feld als Links ausgegeben, in dieser Form:


<a href="javascript:void(0);" onclick="SelectItemInSelect(document.forms.IhrSelect, 234)" id="Tag234">TextvonTag234</a>

Beim anklicken des Links wird die Funktion ausgeführt und das Optionelement wird selektiert.

Erweiterte Version

Sollten Sie eine sehr große Liste von Tags haben, wo Sie auch bei den Links nicht mehr durchschauen, so würden Sie die angeklickten Links schon mal auf eine Layouttechnische Art und Weise bezeichnen, dass sie angeklickt/markiert wurden. Aus diesem Grund haben wir bei der Gestaltung vom Link die id=”Tag234″ hinzugefügt, so dass wir in der Javascript Funktion diesen Link wieder erkennen und manipulieren wollen. Anbei die erweiterte JS Funktion, die die angeklickten Links im Rot einfärbt:

function SelectItemInSelect(arrSelect, sItem) {
   for (k=0; k<arrSelect.options.length; k++) {
      if (arrSelect.options[k].value==sItem) {
           document.getElementById('Tag'+sItem).style.color='#FF0000';
           arrSelect.options[k].selected = true;
      }
   }
}

Sie können gerne eine andere Farbe sich aussuchen, in dem Sie den RGB Wert “#FF0000″ ändern.

Fazit

Diese Funktion hilft uns ganz schnell eine Mehrfachauswahl bei großen <select> Listen zu treffen. Wie man allerdings die selektierten Elemente mit PHP behandeln kann und in ein Array speichern kann, lesen Sie bei unserem nächsten Artikel über die Übergabe von multiple Selects an PHP.

Text abschneiden mit PHP

Dienstag, 16. März 2010

Bei der Programmierung mit PHP kommt es oft vor, dass man Texte/Strings von hinten abschneidet, damit sie Layouttechnisch an der richtigen Stelle passen. Somit wird das Webdesign beibehalten, egal welche Texte vorkommen. Das gilt sowohl für kleine Headlines bei Blöcken mit Breite von 200 Pixel, die maximal 10 bis 20 Zeichen enthalten dürfen, als auch für lange Texte, wovon man einen oder zwei Absätze braucht.

Man kann ganz pauschal mit PHP sagen – bitte ab dem Zeichen xxx einfach abschneiden. Jedoch ist das unschön, weil gegebenenfalls Wörter von Zeichenketten in der Mitte abschnitten werden. Wir stellen hier eine Funktion zur Verfügung, die genau das berücksichtigt.  Diese schneidet bis zum Zeichenlimit plus den Text bis zum nächsten Leerzeichen. Anbei die Funktion:

 

function CropText ($sText, $nCropLimit = 250, $bSetDots = true) {

     if ($nCropLimit<strlen($sText)) {
          if (strpos($sText, " ", $nCropLimit)!==FALSE)
               return substr($sText, 0, $nCropLimit).substr($sText, $nCropLimit, strpos($sText, " ", $nCropLimit) - $nCropLimit).($bSetDots ? " ..." : "");
          else
               return substr($sText, 0, $nCropLimit).($bSetDots ? " ..." : "");
          } else {
               return $sText;
          }

}

Welche Parameter nimmt die Programmierfunktion?

1. $sText – das ist Ihr abzuschneidender Text, Zeichenkette
2. $nCropLimit – stellt den Rahmen des Textes, den Sie erreichen wollen, also nach wie vielen Zeichen soll der Text abschnitten werden, Zahl, Standardwert ist 250 Zeichen
3. $bSetDots – gibt an, ob nach dem Abschneiden 3 Pünktchen hinzugesetzt werden sollen. Ja/Nein, Standardwert ist Ja

Was macht die Funktion?

1. Prüft zuerst ob das Zeichenlimit, nachdem abgeschnitten werden soll, überhaupt erreicht wird. Dazu wird die Länge der Zeichenkette überprüft. Falls nicht wahr, dann wird der Text einfach zurückgegeben.
2. Wenn wahr, dann wird es überprüft, ob es Leerzeichen in dem Text enthalten ist, den wir abschneiden wollen.  Wenn ja, wird der Text abgeschnitten bis zum Zeichenlimit und ab dem Punkt bis zum nächsten Leerzeichen. Auf dieser Art und Weise wird die Lesbarkeit des Textes beibehalten. Wenn nicht wahr, wird der Text genau bis zu dem Zeichenlimit zurückgegeben. In beiden Fällen wird es anhand des Parameters $bSetDots geprüft, ob die Pünktchen nach dem Abschneiden hinzugesetzt werden sollen.

Tipp – Man kann auch über ein Parameter das Leerzeichen, wonach es zwecks richtigem Abschneiden gesucht wird, durch ein Punkt oder etwas anderes ersetzen. Dann schneiden Sie beispielsweise bis zum nächsten Punkt ab Zeichenlimit. Somit erhalten Sie die kompletten Sätze.

Google mag nicht ausgelesen werden

Montag, 28. September 2009

Nun, nachdem ich, wie tausende andere Webarbeiter, fleissig meine Links in verschiedenste Webkataloge und Verzeichnisse eingetragen hatte brauchte ich neue Linkmöglichkeiten.

Also kurz gegoogelt und schwupps hatte ich Auswahl genug. Etliche sogar mit Angabe des Pageranks der jeweiligen Seite. Wirklich praktisch, denn ich möchte meine Seite ja bei “guten” Seiten mit hohem Rank werben.

Die Webmaster hatten einfach ein kleines Script geschrieben das den Pagerank der angezeigten Seite direkt bei Google ausliest. Da sich die unterschiedlichen Betreiber auch gegenseitig verlinken z.B. auch bei Katalogen die den Pagerank händisch eingetragen haben und wo die alten Werte noch nachzulesen sind, ist mir etwas aufgefallen…Nach dem letzten Rankupdate sind diese ehemals extrem hoch bewerteten Kataloge, durch die Bank, ins Bodenlose gefallen… Mmh…

Das Google auch sonst nicht ausgelesen werden mag, hat der eine oder andere Webmaster der mit z.B. FreeMonitor for Google arbeitet, sicher auch schon festgestellt. Wenn man damit komplexere Schlagwortlisten auslesen will, erhält man beim nächsten Aufruf des Suchdienstes eine Sperre.

Ich glaube das diese Arten des Auslesens bei Google technische Probleme auslösen oder ein anderer trifftiger Grund dafür vorliegt. Denn im einzelnen stellt Google diese Services ja für jedermann bereit.