+ Antworten
Seite 1 von 2 1 2 LetzteLetzte
Ergebnis 1 bis 10 von 12

Thema: Verständnisproblem bei Sortierung und mehreren Views

  1. #1
    Neu an Board Avatar von pak7
    Registriert seit
    21.09.2009
    Ort
    Luzern - Ausserhalb EU Gesetzgebung
    Beiträge
    40
    Bedankte sich
    3
    Erhielt 7 Danksagungen
    in 6 Beiträgen

    Standard Verständnisproblem bei Sortierung und mehreren Views

    Ich besitze 2 tabellen. jos_photomuseum_hersteller und jos_photomuseum_laender.

    Wobei die struktur der tabellen folgendermassen ist:
    jos_photomuseum_hersteller
    ========================
    id
    hersteller
    ...

    jos_photomuseum_laender
    =======================
    id
    land
    iso3166
    ...

    die buildquery functions sind aufgeteilt, wobei ich normalerweise für die order so einen abschnitt verwende
    Code:
    function _buildContentOrderBy()
    {
    	global $mainframe, $option;
    	$filter_order		= $mainframe->getUserStateFromRequest( $option.'.filter_order',		'filter_order',		'a.land',	'cmd' );
    	$filter_order_Dir	= $mainframe->getUserStateFromRequest( $option.'.filter_order_Dir',	'filter_order_Dir',	'',				'word' );
    		
    	if ($filter_order == 'a.land') {
    		$orderby = ' ORDER BY '.$filter_order .' '. $filter_order_Dir . ', a.iso3166 '. $filter_order_Dir;
    	} else if ($filter_order == 'a.iso3166') {
    		$orderby = ' ORDER BY '.$filter_order .' '. $filter_order_Dir . ', a.land '. $filter_order_Dir;
    	} else {
    		$orderby = ' ORDER BY '.$filter_order .' '. $filter_order_Dir;
    	}
    	return $orderby;
    }
    das problem ist, dass wenn ich bei den herstellern, nach hersteller sortiere, und anschliessend auf die länder wechsle
    Code:
    $filter_order		= $mainframe->getUserStateFromRequest( $option.'.filter_order',		'filter_order',		'a.land',	'cmd' );
    $filter_order den Wert "a.hersteller" hat.
    was natürlich zu einem sql error führt.

    ursprünglich hab ich gedacht, dass $filter_order pro controller oder so neu generiert wird... oder so ähnlich
    jedoch ist $filter_order immer für die ganze komponente anscheinend aktiv.
    wie auch immer,

    ich hab jetzt auf die schnelle so was gebaut:
    Code:
    function _buildContentOrderBy()
    {
    	global $mainframe, $option;
    	$filter_order		= $mainframe->getUserStateFromRequest( $option.'.filter_order',		'filter_order',		'a.land',	'cmd' );
    	$filter_order_Dir	= $mainframe->getUserStateFromRequest( $option.'.filter_order_Dir',	'filter_order_Dir',	'',				'word' );
    		
    	//workaround 
    	if($filter_order == 'a.hersteller') {
    		$filter_order = 'a.land';
    	}
    		
    	if ($filter_order == 'a.land') {
    		$orderby = ' ORDER BY '.$filter_order .' '. $filter_order_Dir . ', a.iso3166 '. $filter_order_Dir;
    	} else if ($filter_order == 'a.iso3166') {
    		$orderby = ' ORDER BY '.$filter_order .' '. $filter_order_Dir . ', a.land '. $filter_order_Dir;
    	} else {
    		$orderby = ' ORDER BY '.$filter_order .' '. $filter_order_Dir;
    	}
    	//dump($orderby);
    	return $orderby;
    }
    was ich aber ziemlich hässlich finde... bei der sortierung hab ich da noch ne wissenslücke (na ja nicht die einzige in joomla)... aber es wurmt mich total.
    es muss doch ne generelle lösung für dieses problem geben. Oder ich hab irgendwo generell in den controllers oder anderswo ein code-snippet vergessen.

    hat irgendjemand mir einen tipp (und nein, ich will nicht alle queries mit a.hersteller AS a.title und a.land AS a.title umschreiben, denn es werden sehr komplexe views mit vielen individuellen spalten nach denen sortiert werden soll, was dann wieder zu diesem problem führen wird).

    Für jede Hilfe bin ich dankbar
    Geändert von pak7 (24.06.2010 um 10:21 Uhr)
    Ich sag nur RTFM

  2. #2
    Neu an Board Avatar von tomGB
    Registriert seit
    22.07.2009
    Beiträge
    51
    Bedankte sich
    11
    Erhielt 5 Danksagungen
    in 5 Beiträgen

    Standard

    Hallo,

    hast Du in deinem Formular mit der zu sortierenden Tabelle die hidden Textfelder
    filter_order und filter_order_Dir eingebunden?

    Tom
    Probleme die man formulieren kann, können auch gelöst werden.

  3. Erhielt Danksagungen von:


  4. #3
    Neu an Board Avatar von pak7
    Registriert seit
    21.09.2009
    Ort
    Luzern - Ausserhalb EU Gesetzgebung
    Beiträge
    40
    Bedankte sich
    3
    Erhielt 7 Danksagungen
    in 6 Beiträgen

    Standard

    Hallo Tom

    ja die hab ich bei allen views zuunterst jeweils eingebunden

    Code:
    <input type="hidden" name="task" value="" />
    <input type="hidden" name="boxchecked" value="0" />
    <input type="hidden" name="filter_order" value="<?php echo $this->lists['order']; ?>" />
    <input type="hidden" name="filter_order_Dir" value="<?php echo $this->lists['order_Dir']; ?>" />
    <input type="hidden" name="option" value="<?php echo $this->option; ?>" />
    <input type="hidden" name="controller" value="<?php echo $this->controller; ?>" />
    <input type="hidden" name="<?php echo JUtility::getToken(); ?>" value="1" />
    jeweils mit aktuellen wert... nehme an, dass diese vor submit per javascript entsprechend gesetzt werden.

    sonst noch eine idee?
    Ich sag nur RTFM

  5. #4
    Neu an Board Avatar von tomGB
    Registriert seit
    22.07.2009
    Beiträge
    51
    Bedankte sich
    11
    Erhielt 5 Danksagungen
    in 5 Beiträgen

    Standard

    Wie sieht denn das eigendliche Query aus.

    Wenn Du über 2 Tabellen sortieren möchtest, muss dein Query ja auch über 2 Tabellen gehen. (join).

    Edit: Hast Du in der Tabelle jos_photomuseum_laender eine Spalte mirt einem Verweis auf die Hersteller ID?
    Tom
    Geändert von tomGB (18.06.2010 um 19:58 Uhr)
    Probleme die man formulieren kann, können auch gelöst werden.

  6. #5
    Verbringt hier viel Zeit
    Registriert seit
    24.01.2006
    Beiträge
    594
    Bedankte sich
    108
    Erhielt 359 Danksagungen
    in 203 Beiträgen

    Standard

    So ganz naiv gefragt: Hast du überhaupt geschaut, was

    PHP-Code:
    $mainframe->getUserStateFromRequest 
    macht? Oder nutzt du die Methode einfach weil sie anderen auch nutzen.

    Zitat Zitat von pak7 Beitrag anzeigen
    ursprünglich hab ich gedacht, dass $filter_order pro controller oder so neu generiert wird... oder so ähnlich
    jedoch ist $filter_order immer für die ganze komponente anscheinend aktiv.
    wie auch immer
    Das kommt immer drauf an, wie man die getUserStateFromRequest Methode aufruft, also es ist durchaus möglich, dass man es für jeden Controller neu setzt.

    Globals sind nebenbei veraltet und sollten nicht mehr genutzt werden, alternativ z.B. JFactory::getApplication()

  7. #6
    Neu an Board Avatar von pak7
    Registriert seit
    21.09.2009
    Ort
    Luzern - Ausserhalb EU Gesetzgebung
    Beiträge
    40
    Bedankte sich
    3
    Erhielt 7 Danksagungen
    in 6 Beiträgen

    Standard

    hi bembelimen
    So ganz naiv gefragt: Hast du überhaupt geschaut, was

    Code:
    $mainframe->getUserStateFromRequest
    macht? Oder nutzt du die Methode einfach weil sie anderen auch nutzen.
    schmunzel... ja "weil die anderen sie auch nutzen"...
    zuerst hab ich mir das vielzitierte weblinks modul als vorlage genommen.
    musste dann aber feststellen, dass die 1.5 core komponenten leider nicht "wirklich" auf MVC aufbaute, wie viele es hier propagieren... daher hab ich natürlich auch andere module angeschaut.

    aber du hast schon recht, ich hab mir natürlich nicht alle funktionen bis jetzt angeschaut. betrachte mich ja auch joomla newbi programmierer.

    Globals sind nebenbei veraltet und sollten nicht mehr genutzt werden, alternativ z.B. JFactory::getApplication();
    Verstehe ich das so richtig, dass also
    Code:
    global $mainframe, $option;
    nicht mehr benutzt werden soll
    also eher so was

    Code:
    $_mainframe = & JFactory::getApplication()
    ok... aber jetzt muss ich gleich gestehen, dass ich getApplication auch noch nie genau angeschaut habe

    anyway, kannst du mir dann eine komponente empfehlen, die als beispielhafte vorlage für 1.5 in frage kommt?

    es ist durchaus möglich, dass man es für jeden Controller neu setzt
    und wie würde ich das pro controller sauber implementieren?

    Ich schätz mal, dass Du erahnen kannst, wo ich einen denkfehler mache. Aber der Wissenstand halt sooft weit auseinanderliegt und jeder halt die einzelnen Methoden/Funktionen (salopp gesagt) "irgendwo" implementiert ergibt sich bei MVC trotzdem nie einen klaren Hinweise, wo denn der Fehler stecken könnte (bei solchen Fragethreads im Forum)...

    an Tom
    Du hast natürlich recht, dass ich dort zusätzlich einen inner join vom hersteller auf die länder will (aber noch nicht implementiert). wollte es nur an einem einfachen beispiel demonstrieren, da ich noch genügend andere views habe.

    Mal vorweg Danke, dass Ihr beiden Euch bemüht
    Ich sag nur RTFM

  8. #7
    Neu an Board Avatar von tomGB
    Registriert seit
    22.07.2009
    Beiträge
    51
    Bedankte sich
    11
    Erhielt 5 Danksagungen
    in 5 Beiträgen

    Standard

    Wenn ich mich richtig erinnere, war doch das Problem, das das Query zum sortieren nicht richtig ausgeführt wurde, oder?

    Schau Dir doch mal die com_content unter administrator in Joomla an. Vielleicht hilft es.

    Oder aber Du hast, eventuell, schon einen Fehler in der Grundumsetzung / Grundüberlegung.

    Greez
    Tom
    Probleme die man formulieren kann, können auch gelöst werden.

  9. #8
    Verbringt hier viel Zeit
    Registriert seit
    24.01.2006
    Beiträge
    594
    Bedankte sich
    108
    Erhielt 359 Danksagungen
    in 203 Beiträgen

    Standard

    Zitat Zitat von pak7 Beitrag anzeigen
    eher so was

    Code:
    $_mainframe = & JFactory::getApplication()
    Ja, wobei es nicht unbedingt $_mainframe heißen muss, ansonsten stimmt es.

    Zitat Zitat von pak7 Beitrag anzeigen
    anyway, kannst du mir dann eine komponente empfehlen, die als beispielhafte vorlage für 1.5 in frage kommt?
    Eventlist, oder du suchst dir jemand, der dir das ganze Prinzip zeigt

    Zitat Zitat von pak7 Beitrag anzeigen
    und wie würde ich das pro controller sauber implementieren?
    PHP-Code:
    /**
     * Gets the value of a user state variable.
     *
     * @access    public
     * @param    string    The key of the user state variable.
     * @param    string    The name of the variable passed in a request.
     * @param    string    The default value for the variable if not found. Optional.
     * @param    string    Filter for the variable, for valid values see {@link JFilterInput::clean()}. Optional.
     * @return    The request user state.
     */
        
    function getUserStateFromRequest$key$request$default null$type 'none' 
    Das Ding ist einfach, dass der Wert unter dem Namen $key in der Usersession steht. Wenn du nun von einer anderen Stelle mit dem selben Key auf diese Variable zugreifst (ohne dass eine Request Variable gesetzt worden ist), hast du wieder den selben Wert. Also musst du das mehr spezifizieren, z.B. den Key

    PHP-Code:
    $option.$view.'filter_order' 
    nennen.

  10. Erhielt Danksagungen von:


  11. #9
    Neu an Board Avatar von pak7
    Registriert seit
    21.09.2009
    Ort
    Luzern - Ausserhalb EU Gesetzgebung
    Beiträge
    40
    Bedankte sich
    3
    Erhielt 7 Danksagungen
    in 6 Beiträgen

    Standard Fast Reply

    Danke nochmals an beide für die schnelle Antwort.

    Jetzt muss ich mal zuerst die erhaltenen Informationen verarbeiten/analysieren.

    Betreffend Eventlist bembelimen, meinst du schon diese komponente, oder?

    http://www.schlu.net/eventlist-overview/downloads.html

    Tom. Das ist noch immer genau das Problem... aber da hackt es irgendwo bei mir in der logik... bzw. dachte Joomla Framework würde sich "einfach so" um die jeweiligen RequestVars per View kümmern, bzw. ist mir schon einleuchtend, dass ein RequestVar beim Wechseln von views per klick natürlich übernommen werden.
    Nur eben wie man diese "sauber" per view trennt/implementiert im Joomla Framework.

    Jedenfalls, sobald ich weitere Infos (hoffentlich enden die Fragen ) werde ich sie hier mitteilen.
    Ich sag nur RTFM

  12. #10
    Neu an Board Avatar von tomGB
    Registriert seit
    22.07.2009
    Beiträge
    51
    Bedankte sich
    11
    Erhielt 5 Danksagungen
    in 5 Beiträgen

    Standard

    OK,

    ich glaube zu vermuten wo das Problem liegt.

    Wenn Du sortierst, macht Du das innerhalb eines Views.

    Z.B. Dein View heist list.php, es gibt das model und den conroller list.php

    sortieren kannst Du nur innerhalb der Daten die Du mit deinem Model list lädst.

    Deshalb die frage nach dem join. Du must nicht, wenn du deine daten sortieren möchtest einen anderen view aufrufen. Nur die sortier infos übergeben.

    Tom
    Probleme die man formulieren kann, können auch gelöst werden.

+ Antworten
Seite 1 von 2 1 2 LetzteLetzte

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein