4

smarty で配列をソートする必要があります。私はこのコードを使用しようとします:

私のforeach:

 {foreach $hooks->addblock as $addblock}
  <ul>
  {foreach $addblock|@sortby:"prio" as $value}
    {$value@key}: {$value}
  {/foreach}
  </ul>
 {/foreach}

の var_dump $hooks->addblock:

array(5) {
  ["filed_1"]=>
  array(5) {
    ["id"]=>
    string(7) "filed_1"
    ["title"]=>
    string(6) "filed1"
    ["field"]=>
    string(20) "This is test filed 1"
    ["size"]=>
    int(740)
    ["prio"]=>
    int(7)
  }
  ["filed_2"]=>
  array(5) {
    ["id"]=>
    string(7) "filed_2"
    ["title"]=>
    string(6) "filed2"
    ["field"]=>
    string(20) "This is test filed 2"
    ["size"]=>
    int(740)
    ["prio"]=>
    int(6)
  }

で、配列を値(num)の昇順でソートしたいのですprioが、うまくいきません!
結果は次のとおりです。
スマートに出力

「field_2」という行を最初にしたいと思います。しかし、解決策が見つかりません。

これは修飾子 (modifier.sortby.php) です: http://www.smarty.net/forums/viewtopic.php?p=23628#23628 また、エラーが繰り返し発生します:

[Sat Nov 24 20:04:52 2012] [error] [client 127.0.0.1] PHP Notice: 初期化されていない文字列オフセット: 0 in /var/www/libs/plugins/modifier.sortby.php(33) : runtime-created 1行目の関数

4

2 に答える 2

4

PHP 通知: 初期化されていない文字列オフセット: /var/www/libs/plugins/modifier.sortby.php(33) の 0: 1 行目のランタイム作成関数

これにより、sortby修飾子がどのように機能しているかの手がかりが得られます。

リンク先のドキュメントには次のように書かれています:

'-' を使用すると逆順で並べ替えることができ、# を使用すると、文字列ではなく数値で並べ替えることができます('-#age' を使用して数値を逆順に並べ替えることもできます)。

prioフィールドは整数であり、PHP では整数と文字列に対して透過的に多くの操作を実行できますが、この通知は、sortbyが各文字に個別にアクセスすることで文字列ソートを実装していることを示しています。これはおそらく整数では機能しません。

したがって、#修飾子を使用する必要があります。

{foreach $addblock|@sortby:"#prio" as $value}
                            ^
于 2012-11-24T22:23:33.433 に答える
0

やらないでください。並べ替えは、テンプレート エンジンが行うべきタスクではありません。これは明らかにビジネス ロジックであり、コントローラーに入る必要があります。

于 2012-11-24T19:34:47.230 に答える