Archiv für Oktober 2006

20
Okt

HTML Selectbox Optionen verschieben

Als ich auf einem Webinterface die Optionen einer SELECT-Box mittels JavaScript umsortieren musste, dachte ich es gibt im Internet sowieso tausend gute Implementierungen - wieso also selber eine entwicklen? Nach kurzer Zeit wurde ich auch schon auf diversen Seiten fündig, jedoch genügte keines dieser Scripts meinen Anforderungen. Ich benötigte nähmlich eine Version, die mehrere Optionen zusammen um mehrere Positionen verschiebt, und nicht nur um eine Position rauf und runter.

Damit beim Verschieben die Optionen nicht aus der SELECT-Box raus fliegen, musste zuerst eine Funktion zur Überprüfung und Korrektur der Schrittanzahl her:

function checkMoveCount(obj, moveCount) {
   if (moveCount == 0) return;
   if (moveCount > 0) {
      for (var index=obj.options.length-1; index>0; index--) {
         if (obj.options[index].selected) {
            var maxMove = obj.options.length - index - 1;
            if (maxMove < moveCount) {
               moveCount = maxMove;
            }
            break;
            }
         }
      } else {
         for (var index=0; index<obj.options.length-1; index++) {
            if (obj.options[index].selected) {
            var maxMove = index * -1;
               if (maxMove > moveCount) {
                  moveCount = maxMove;
               }
               break;
               }
            }
         }
   return moveCount;
}

Nun kann also die Hauptfunktion für die Umsortierung implementiert werden:

function move(id, moveCount) {
   var obj = document.getElementById(id);
   moveCount = checkMoveCount(obj, moveCount);
   if (moveCount == 0) return;
   if (moveCount > 0) {
      for (var index=obj.options.length-1; index>=0; index--) {
         if (obj.options[index].selected) {
            var toOption = index+moveCount;
            for (var from=index; from<toOption;from++) {
               swapOptions(obj, from, from+1);
            }
         }
      }
   } else {
      for (var index=0; index<=obj.options.length-1; index++) {
         if (obj.options[index].selected) {
            var toOption = index+moveCount;
            for (var from=index; from>toOption; from--) {
               swapOptions(obj, from, from-1);
            }
         }
      }
   }
}

Diese Funktion benötige eine kleine Hilfsfunktion, die das tatsächliche kopieren der Optionen übernimmt:

function swapOptions(obj, from, to) {
   var theOptions = obj.options;
   var isFromSelected = theOptions[from].selected;
   var isToSelected = theOptions[to].selected;
   var tempFrom = new Option(theOptions[from].text, theOptions[from].value,
                             theOptions[from].defaultSelected, theOptions[from].selected);
   var tempTo= new Option(theOptions[to].text, theOptions[to].value,
                          theOptions[to].defaultSelected, theOptions[to].selected);
   theOptions[from] = tempTo;
   theOptions[to] = tempFrom;
   theOptions[from].selected = isToSelected;
   theOptions[to].selected = isFromSelected;
}

Nun können mehrfache Optionen um beliebige Schritte nach oben bzw. unter verschoben werden. Unschön ist, dass die Verarbeitung der Verschiebung nach unter bzw. oben sehr separat gehandhabt werden. Die implementationen sind ähnlich aber halt doch nicht gleich. Eine Variante wäre, die Funktion move() in zweit Funktionen aufzusplitten: moveUp() und moveDown(). Es währe wahscheinlich auch möglich, mit ein paar Tricks beide Varianten in der gleichen Schlaufe abzuarbeiten, ich denke aber dieser Code würde man dann selber in zwei Wochen nicht mehr verstehen.

Das Resultat kann auf der Selectbox Beispiel angeschaut werden.

16
Okt

Wordpress auf Deutsch auf einem 64-Bit System

Als Blogging Software benutze ich selber Wordpress und verwende es auch für Kunden für die Webseitenverwaltung. Leider habe ich das Administrationsinterface bis jetzt nicht auf Deutsch umstellen können, obwohl ich mich genau an die Installationsanleitung gehalten habe. Nach einiger Suche im Web bin ich endlich auf die Lösung gestossen: gettext hat ein Problem auf einem 64-Bit System.

Also einfach den Konstruktor gettext_reader($Reader, $enable_cache = true) in der Datei gettext.php Datei anpassen:

/**
* Constructor
*
* @param object Reader the StreamReader object
* @param boolean enable_cache Enable or disable caching of strings (default on)
*/
function gettext_reader($Reader, $enable_cache = true) {
   // If there isn't a StreamReader, turn on short circuit mode.
   if (! $Reader) {
      $this->short_circuit = true;
      return;
   }

   // Caching can be turned off
   $this->enable_cache = $enable_cache;
   // $MAGIC1 = (int)0x950412de; //bug in PHP 5
   $MAGIC1 = (int) - 1794895138;
   // $MAGIC2 = (int)0xde120495; //bug
   $MAGIC2 = (int) - 569244523;
   $MAGIC3 = (int) 2500072158; // 64bit
   $this->STREAM = $Reader;
   $magic = $this->readint();
   if ($magic == $MAGIC1 || $magic == $MAGIC3) {
      $this->BYTEORDER = 0;
   } elseif ($magic == $MAGIC2) {
      $this->BYTEORDER = 1;
   } else {
      $this->error = 1; // not MO file
      return false;
   }

   // FIXME: Do we care about revision? We should.
   $revision = $this->readint();
   $this->total = $this->readint();
   $this->originals = $this->readint();
   $this->translations = $this->readint();
}

Danke für den Tip, Gagget!




Oktober 2006
M D M D F S S
« Sep   Nov »
 1
2345678
9101112131415
16171819202122
23242526272829
3031  

Werbung


Buttonitis