2011-05-16 2 views
1

symfonyのnestedSetの動作をdoctrineを使って調べて、CMSの管理モジュールにnestedSet hierachyを表示しています。doctrineのアイテムを注文する

私は見つけました:http://redotheoffice.com/?tag=doctrine-drag-drop-admin-generator-symfony-nestedset一見したところで素晴らしいと私は今これを実装しました。

私の問題はrootノードを整理しようとしているときに起こります。ルートノードはroot_idで整理されているため、この実装ではできません。

私は以下を見つけました:http://blog.rajatpandit.com/2010/03/27/ordering-list-of-items-doctrine-symfony-1-4/しかし、ドラッグアンドドロップのネストセットをレンダリングするためのカスタムテンプレートがすでに作成されていますので、これを使用しようとしています。

//generator.yml 
     object_actions: 
     new: 
     _edit: ~ 
     _delete: ~ 
     moveUp: 
     moveDown: 

私はactions.class.phpにコードをコピーして、私のモデルクラスは上記のリンクを形成しています。

upまたはdownが、それは上のエラーをスローノードに移動しようとしている:executeUp()とexecuteDown()で$this->current_report->getId(),

Fatal error: Call to a member function getId() on a non-object

私はその後、$this->current_report = new Tree()を使用してcurrent_reportオブジェクトを作成しようとすると、Iその後、別のエラーを取得:

Fatal error: Call to a member function setPosition() on a non-objectこれは私の​​ファイル内にあり、この方法は、swapWith()

です

位置は、私がroot_idではなく並べ替えに使用しているフィールドです。

誰かが私にこれを手伝うことができたら、私は大いに感謝します。

おかげ

答えて

1

あなたは教義ネストされたセットを使用して、ルート・ノードの順序を変更することはできません。

これを行う必要がある場合は、同じことをやり直して、偽のルートノードレベルを作成することができます。考え方は、レベル0があなたの「偽のルート」ノードレベルであり、あなたの「本当のルート」ノードがレベル1から始まるということです。

このように、偽のルートノードを並べ替えることができます。正しく行われていればユーザーは目立たない。この技術の

私の実装は、ここで示されている:githubのに利用できるhttp://cart.samedraw.com/cartadmin/categoryIndex

ソースコード:https://github.com/jongallant/sfCartPlugin

+0

を私は単に私は現在、3つのルートノードを持っているので、位置によってそれらを注文したいとして配置されていますフロントエンドの 'id'でネストされたセットです。だから私は、ノードを削除して別の順序でそれらを再追加するのではなく、別の順序でそれらを表示できるようにしたいと思います。それが意味をなさない? – terrid25

+0

私がこれを行うと考えることができる唯一の方法は、ルートノードの順序を追跡するための独自のメカニズムを持つことです。 Doctrine Nested Setsのみに依存している場合は、ルートノードを削除/再作成して再順序付けすることができます。このため、偽のルートレベルを作成してルートノードを第1レベルに格納する必要があると説明しています。 – jgallant

+0

あなたのプラグインを見てきました。私が探していることをするように見えます。フロントエンドにあるように、「偽のノード」がナビゲーションメニューを壊しているように、ちょっとハックする必要があるかもしれません。 – terrid25