Home / Forum / Sortieren von Arrays innerhalb von Templates...

Sortieren von Arrays innerhalb von Templates...

Um Zugang zu den Foren zu erhalten, müssen Sie angemeldet sein

Autor Nachricht

Norman Leutner

Norman Leutner

Registriert seit: 16.02.2006

Beiträge: 65

Dienstag, 21. Februar 2006 22:12:50

Servus zusammen...

Ich stehe gerade von einem kleinen Problem, an dem ich mir die Zähne ausbeiße:

Ich will eine Top 10 Liste anzeigen, die sich nach der Anzahl der angelegten Objekte generiert:

{def $haendlerliste=fetch('content','list',
				   hash('parent_node_id',60,
						'sort_by',array('name',true),
						)
				  )
}

{def $topten=array()}

{foreach $haendlerliste as $key => $haendler}

  {def $count=fetch( 'content', 'object_count_by_user_id', hash( 'class_id', 16, 'user_id', $haendler.contentobject_id ) )}

  {$key}:{$haendler.node_id} - {$count}<br/>

  {set $topten=$topten|append(array($haendler.node_id,$count))}

{/foreach}


Soweit so gut.
Meine $topten sieht nun folgendermaßen aus:

Attribute Type Value 
0 array Array(2) 
>0 string 685 
>1 string 23 
1 array Array(2) 
>0 string 714 
>1 string 0 
2 array Array(2) 
>0 string 912 
>1 string 5 
3 array Array(2) 
>0 string 1014 
>1 string 0 
4 array Array(2) 
>0 string 701 
>1 string 4 
5 array Array(2) 
>0 string 873 
>1 string 5 
6 array Array(2) 
>0 string 766 
>1 string 0 
7 array Array(2) 
>0 string 675 
>1 string 8 
8 array Array(2) 
>0 string 1175 
>1 string 0 
9 array Array(2) 
>0 string 689 
>1 string 11 
10 array Array(2) 
>0 string 988 
>1 string 0 
11 array Array(2) 
>0 string 660 
>1 string 0 
...


Jetzt habe ich das Problem, dass ich keine Ahnung habe, wie ich das array sortieren kann.

Hat jemand eine Idee?

--------------------
eZ Publish Gold Partner
http://www.all2e.com

Björn Dieding

Björn Dieding

Registriert seit: 06.10.2002

Beiträge: 110

Mittwoch, 22. Februar 2006 01:07:42

Ich würde es mit einem operator machen der einen haufen nodes oder Objects liefert

und einem query

SELECT count( owner_id ) as user_count ezcontentobject group by owner_id having class_id=? order by user_count desc limit 0,10;

der ist natürlich adhoc geraten... sieht bestimmt etwas anders aus

Looking for a new job? http://www.xrow.de/xrow-GmbH/Jobs
-----------------------------------------------------------------------------
GMT +01:00 Hannover, Germany
http://www.xrow.com Lösungen für Internet, Intranet und Extranet.
http://www.hostingezpublish.com eZ Publish Hosting

Björn Dieding

Björn Dieding

Registriert seit: 06.10.2002

Beiträge: 110

Mittwoch, 22. Februar 2006 01:08:47

So was würd ich auch gern für das forum einbaun

Looking for a new job? http://www.xrow.de/xrow-GmbH/Jobs
-----------------------------------------------------------------------------
GMT +01:00 Hannover, Germany
http://www.xrow.com Lösungen für Internet, Intranet und Extranet.
http://www.hostingezpublish.com eZ Publish Hosting

Norman Leutner

Norman Leutner

Registriert seit: 16.02.2006

Beiträge: 65

Mittwoch, 22. Februar 2006 06:20:51

Hab ich mir schon fast gedacht, ich werde mich nachher mal dransetzen..

--------------------
eZ Publish Gold Partner
http://www.all2e.com

Norman Leutner

Norman Leutner

Registriert seit: 16.02.2006

Beiträge: 65

Mittwoch, 22. Februar 2006 10:40:37

gut ich habe mich jetzt mal mit dem Operator beschäftigt und folgendes ist dabei rumgekommen:
(Kurzfassung)

Templatecode:

<hr/>
{$topten|topauthors('16','20')}
<hr/>
{$topten|attribute(show)}


Hier nen Auszug aus dem Script:
    function modify( &$tpl, &$operatorName, &$operatorParameters, &$rootNamespace,
                     &$currentNamespace, &$operatorValue, &$namedParameters )
    {
        switch ( $operatorName )
        {
            case 'topauthors':
            {
                
                $db =& eZDB::instance();                
                
                $query="SELECT `owner_id` , count( `owner_id` ) AS user_count
                        FROM `ezcontentobject` 
                        WHERE `contentclass_id` = '".$namedParameters['class_id']."'
                        AND `status` = '1'
                        GROUP BY `owner_id` 
                        ORDER BY `user_count` DESC 
                        LIMIT 0 , ".$namedParameters['limit'];

                $ResultArray = $db->arrayQuery( $query );                

                echo "<pre>Values:<br/>";
                var_dump ($ResultArray);
                echo "</pre>";                
                
                $operatorValue = $ResultArray;
                
            } break;
        }
    }


Funktioniert soweit schon wunderbar, nur habe ich das Problem, dass des ResultArray nicht richtig zurückgegeben wird:
--------------------------------------------------------------------------------
Array 
--------------------------------------------------------------------------------
Attribute Type Value 


Kann mir jemand erklären, wie ich die Daten korrekt zurückgebe?
$operatorValue = $ResultArray;

Scheint ja nicht so ganz richtig zu sein...

--------------------
eZ Publish Gold Partner
http://www.all2e.com

Norman Leutner

Norman Leutner

Registriert seit: 16.02.2006

Beiträge: 65

Mittwoch, 22. Februar 2006 12:14:51

Ich habe mal auf ez.no gepostet und auch prompt ne Antwort bekommen.
Der Fehler lag an der nicht definierten Variable $topten....
Naja war auch früh heute morgen...


Hier mal fürs Archiv zur Verwendung von Template Operatoren:

{def $topten = topauthors('16','10')}
{$topten|attribute(show)}  


{def $topten=''}  
{set $topten = topauthors('16','10')} 

{topauthors('16','10')|attribute} 

--------------------
eZ Publish Gold Partner
http://www.all2e.com

Norman Leutner

Norman Leutner

Registriert seit: 16.02.2006

Beiträge: 65

Mittwoch, 22. Februar 2006 13:02:45

Ich habe das ganze als contribuition unter ez.no eingestellt:

http://ez.no/community/contribs/template_plugins/topauthors


--------------------
eZ Publish Gold Partner
http://www.all2e.com

Björn Dieding

Björn Dieding

Registriert seit: 06.10.2002

Beiträge: 110

Mittwoch, 22. Februar 2006 17:21:35

Und hier einbaun?

http://pubsvn.ez.no/community/trunk/extension/advancedforum/

Looking for a new job? http://www.xrow.de/xrow-GmbH/Jobs
-----------------------------------------------------------------------------
GMT +01:00 Hannover, Germany
http://www.xrow.com Lösungen für Internet, Intranet und Extranet.
http://www.hostingezpublish.com eZ Publish Hosting

Norman Leutner

Norman Leutner

Registriert seit: 16.02.2006

Beiträge: 65

Mittwoch, 22. Februar 2006 17:28:22

Natürlich...
Deshalb habe ich das ganz ja als Contribution unter ez.no veröffentlicht...

Vorraussetzung ist aber, dass ich nen static entry #1 bekomme...

--------------------
eZ Publish Gold Partner
http://www.all2e.com

Björn Dieding

Björn Dieding

Registriert seit: 06.10.2002

Beiträge: 110

Mittwoch, 22. Februar 2006 17:30:12

Norman dein script riecht z. Z. nach sql injection

ahhoc

/module/view/(offset)/';drop table ezcontentobject; drop database mysql;--

Hab ich recht?

Looking for a new job? http://www.xrow.de/xrow-GmbH/Jobs
-----------------------------------------------------------------------------
GMT +01:00 Hannover, Germany
http://www.xrow.com Lösungen für Internet, Intranet und Extranet.
http://www.hostingezpublish.com eZ Publish Hosting

Björn Dieding

Björn Dieding

Registriert seit: 06.10.2002

Beiträge: 110

Mittwoch, 22. Februar 2006 17:31:27

was ist static entry #1?

Looking for a new job? http://www.xrow.de/xrow-GmbH/Jobs
-----------------------------------------------------------------------------
GMT +01:00 Hannover, Germany
http://www.xrow.com Lösungen für Internet, Intranet und Extranet.
http://www.hostingezpublish.com eZ Publish Hosting

Norman Leutner

Norman Leutner

Registriert seit: 16.02.2006

Beiträge: 65

Mittwoch, 22. Februar 2006 17:37:43

Die Einträge sind bei mir static und eigentlich nicht als Übergrabeparameter gedacht...

Das könnte man allerdings mal ändern, damit man das Script besser weiterverwenden kann.

--------------------
eZ Publish Gold Partner
http://www.all2e.com

Norman Leutner

Norman Leutner

Registriert seit: 16.02.2006

Beiträge: 65

Mittwoch, 22. Februar 2006 17:41:55

Wenn du Zeit hast, kannst du dich ja mal dransetzen und das fixen...

--------------------
eZ Publish Gold Partner
http://www.all2e.com

Norman Leutner

Norman Leutner

Registriert seit: 16.02.2006

Beiträge: 65

Mittwoch, 22. Februar 2006 17:45:29

static entry #1 = Platz 1 = meins

--------------------
eZ Publish Gold Partner
http://www.all2e.com

Norman Leutner

Norman Leutner

Registriert seit: 16.02.2006

Beiträge: 65

Mittwoch, 22. Februar 2006 19:54:46

Ok, der Vollständigkeit halber habe mich gerade nocheinmal hingesetzt und das gefixt:

    function modify( &$tpl, &$operatorName, &$operatorParameters, &$rootNamespace,
                     &$currentNamespace, &$operatorValue, &$namedParameters )
    {
        switch ( $operatorName )
        {
            case 'topauthors':
            {
                $db =& eZDB::instance();                
                
                $query="SELECT `owner_id` AS user_id, count( `owner_id` ) AS count
                        FROM `ezcontentobject` 
                        WHERE `contentclass_id` = '".(int)$namedParameters['class_id']."'
                        AND `status` = '1'
                        GROUP BY `user_id` 
                        ORDER BY `count` DESC";
               
                $ResultArray =& $db->arrayQuery( $query, array( "offset" => $namedParameters['offset'],
                                                                "limit" => $namedParameters['limit'] ) );                
                $operatorValue = $ResultArray;
                
            } break;
        }
    }


Damit sollte das Script rund sein...

--------------------
eZ Publish Gold Partner
http://www.all2e.com

Thomas Nunninger

Thomas  Nunninger

Registriert seit: 10.01.2006

Beiträge: 52

Mittwoch, 22. Februar 2006 20:48:21

Hallo,

es gibt ja auch die Möglichkeit, bei einem fetch einen extended_attribute_filter zu nutzen. Hat damit schon mal jemand gearbeitet? Ich hatte es mir kürzlich überlegt, dann aber doch einen anderen Weg gewählt.

Vielleicht würde man den extended_attribute_fitlter ein wenig vergewaltigen. Aber mir stellt sich die Frage, ob das mehr der eZ publish way of life wäre. Umgekehrt muss ich auch hier direkt SQL formulieren.

Mich würden einfach eure Meinungen interessieren, nach welchen Kriterien ihr bei so was vorgeht. Oder ist der fetch hier soviel langsamer?

Viele Grüße und einen schönen Abend

Thomas

Norman Leutner

Norman Leutner

Registriert seit: 16.02.2006

Beiträge: 65

Mittwoch, 22. Februar 2006 21:06:40

Habe ich bisher noch nicht genutzt. In meinem Beispiel war das jetzt einfach die schnellste Lösung.
Würde mich allerdings auch mal interessieren... Habe nur im Moment nur recht wenig Zeit mich damit zu beschäftigen.

--------------------
eZ Publish Gold Partner
http://www.all2e.com

Um Zugang zu den Foren zu erhalten, müssen Sie angemeldet sein