haemmerl: Joomla: Sortierfunktion für eine Komponente

Hallo!
Ich bin gerade dabei, eine Komponente für das Joomla-CMS anzupassen. Und zwar wird dort eine Tabelle mit Mitgliedern ausgegeben, die sich für eine Veranstaltung angemeldet haben. Die einzelnen Spalten (d.h. mit Name, Adresse Telefon etc.) sollen nun aber sortierbar sein. Und das kriege ich überhaupt nicht gebacken. Vielleicht habt ihr da einen Tipp für mich. Ich poste mal die beiden Codeausschnitte (eine Datei ist für die Funktion an sich, die andere für die HTML-Formatierung verantwortlich)

  
function sem_g029($uid) {  
  $database = &JFactory::getDBO();  
  $config = &JComponentHelper::getParams('com_seminar');  
  $kurs = new mosseminar( $database );  
  $kurs->load( $uid );  
  $database->setQuery( "SELECT a.*, cc.*, a.id AS sid, a.name AS aname, a.email AS aemail FROM #__sembookings AS a LEFT JOIN #__users AS cc ON cc.id = a.userid WHERE a.semid = '$kurs->id' ORDER BY a.id");  
  $rows = $database->loadObjectList();  
  HTML_seminar::sem_g029($kurs,$rows,$uid);  
}  

Und das hier ist für die HTML-Ausgabe:

  
function sem_g029($kurs,$rows,$uid) {  
    global $my;  
    $config = &JComponentHelper::getParams('com_seminar');  
    JHTML::_('behavior.modal');  
  
// ---------------------------------------  
// Ueberschrift  
// ---------------------------------------  
  
    $html = sem_f026(2)."\n<table width=\"100%\"><tr><th width=\"90%\" style=\"text-align:left\">".JTEXT::_('SEM_0048').": ".$kurs->title."</th>";  
    $html .= "<td style=\"text-align: right; white-space: nowrap\">".sem_f038(2,$kurs->id).sem_f038(4,$kurs->id).sem_f038(5,$kurs->id)."</td></tr></table>";  
  
  
	  
// ---------------------------------------  
// Ausgabe der Kurstabelle  
// ---------------------------------------  
  
    $html .= "\n<table class=\"adminlist\"><thead>";  
    $temp3 = "<input type=\"checkbox\" name=\"toggle\" value=\"\" onclick=\"checkAll(".count( $rows ).");\" />";  
    $temp = array($temp3,JTEXT::_('SEM_0059'),JTEXT::_('SEM_2023'),JTEXT::_('SEM_0097'),JTEXT::_('SEM_0052'),JTEXT::_('SEM_0032'));  
    if( $kurs->fees > 0) {  
      $temp[] = JTEXT::_('SEM_0065');  
    }  
    array_push($temp,JTEXT::_('SEM_2024'),JTEXT::_('SEM_2025'),JTEXT::_('SEM_2026'),JTEXT::_('SEM_2027'),JTEXT::_('SEM_2028'),JTEXT::_('SEM_2029'),JTEXT::_('SEM_2030'),JTEXT::_('SEM_0069'));  
    $html .= "\n".sem_f024( "th", "", "", $temp, "");  
    $html .= "</thead><tbody>";  
  
// Schleife fuer die einzelnen Kurse  
  
    $n = count($rows);  
    if( $n > 0 ) {  
      $k = 0;  
      $neudatum = sem_f046();  
      $anzahl = 0;  
      $i = 0;  
      foreach ($rows as $row) {  
        if($row->userid==0) {  
          $row->name = $row->aname;  
          $row->email = $row->aemail;  
        }  
        $anzahl = $anzahl + $row->nrbooked;  
        $bild = "2502.png";  
        $altbild = JTEXT::_('SEM_0030');  
        if( $anzahl > $kurs->maxpupil ) {  
          if( $kurs->stopbooking < 1 ) {  
            $bild = "2501.png";  
            $altbild = JTEXT::_('SEM_0025');  
          } else {  
            $bild = "2500.png";  
            $altbild = JTEXT::_('SEM_0029');  
          }  
        }  
        $temp = array();  
        $temp[] = "<input type=\"checkbox\" id=\"cb".$i."\" name=\"cid[]\" value=\"".$row->sid."\" onclick=\"isChecked(this.checked);\" />";  
        $temp[] = $row->name;  
		$temp[] = $row->zusatz1;  
		$temp[] = $row->id;  
        $temp[] = "<a href=\"mailto:".$row->email."\">".$row->email."</a>";  
        $temp[] = sem_f047($row->bookingdate,"kurz")." ".sem_f047($row->bookingdate,"zeit");  
        $tempa = array("c","","","c","c");  
        if( $kurs->fees > 0) {  
          $htxt = "&nbsp;";  
          if($anzahl<=$kurs->maxpupil) {  
            $paidbild = "2200.png";  
            $paidtitel = JTEXT::_('SEM_0064');  
            if( $row->paid == 1) {  
              $paidbild = "2201.png";  
              $paidtitel = JTEXT::_('SEM_0063');  
            }  
            $htxt = "<a title=\"".$paidtitel."\" href=\"javascript: void(0)\;\" onclick=\"return listItemTask('cb".$i."','paid')\"><img src=\"".sem_f006().$paidbild."\" border=\"0\" alt=\"".JTEXT::_('SEM_0065')."\"></a>";  
          }  
          $temp[] = $htxt;  
          $tempa[] = "c";  
        }  
        $temp[] = $row->zusatz2;  
        $temp[] = $row->zusatz3;  
		$temp[] = $row->zusatz4;  
		$temp[] = $row->zusatz5;  
		$temp[] = $row->zusatz6;  
		$temp[] = $row->zusatz7;  
		$temp[] = $row->zusatz8;  
        $tempa[] = "c";  
        $klasse = "row".$k;  
        $html .= "\n".sem_f024( "td", $tempa, "", $temp, $klasse);  
        $k = 1 - $k;  
        $i++;  
      }  
    } else {  
      $html .= "\n<tr class=\"row0\"><td colspan=\"9\">.".JTEXT::_('SEM_0061')."</td></tr>";  
    }  
    $html .= "\n</tbody></table>";  

Vielleicht hat ja jemand einen Tipp für mich, wie man das mit JS lösen könnte. Man müsste im Prinzip, jede Spalte bzw. den Spaltenkopf anklicken können, damit der Inhalt dementsprechend sortiert würde.

  1. Hi,

    Vielleicht hat ja jemand einen Tipp für mich, wie man das mit JS lösen könnte.

    Der Tipp lautet: Suchen vor dem Fragen.

    Googlen nach tabelle sortieren javascript liefert als ersten Treffer sogar einen SEFLHTML-Artikel, JavaScript: Tabellen dynamisch sortieren

    Und jetzt verrate mir bitte, wieso du das nicht selber konntest ...?

    MfG ChrisB

    --
    Light travels faster than sound - that's why most people appear bright until you hear them speak.
    1. Und jetzt verrate mir bitte, wieso du das nicht selber konntest ...?

      Danke für deinen Link.
      Leider hilft mir das nicht wirklich weiter, da ich ja nicht eine gegrenzte Anzahl an Daten-Arrays habe und diese auch nicht mit den Werten im Script angeben kann.

      Grüße, Dominik

      1. Hi,

        Danke für deinen Link.
        Leider hilft mir das nicht wirklich weiter, da ich ja nicht eine gegrenzte Anzahl an Daten-Arrays habe und diese auch nicht mit den Werten im Script angeben kann.

        Ja dann pass' es halt so an, dass das JavaScript sich die Daten direkt aus der Tabelle besorgt, die du als HTML ausgibst.

        MfG ChrisB

        --
        Light travels faster than sound - that's why most people appear bright until you hear them speak.