Tuesday, June 1, 2010

Re: tricky list re-ordering problem

You mention tree behaviour but I don't see any parent, left or right fields. Just want to clarify a few things...are these accurate statements?

- A section has many documents
- The order is (i) section then (ii) documents within the section
- The document order is not based on the name of the document

If so, wouldn't a 'sort_order' column in the documents table fix this? If so, the order becomes (i) section.name (ii) document.sort_order.

Have I missed the point?

Jeremy Burns
jeremyburns@me.com


On 2 Jun 2010, at 01:23, cricket wrote:

> Cake 1.2.7
>
> I've got a Document model that's used for uploading various files by
> an admin that can then be downloaded by users. The client wanted to be
> able to specify a section/category for these files and so I've
> included a DocumentSection model. The index page lists all Sections,
> with each Document below. So far, so good.
>
> Now, the client has expressed a desire to be able to re-order the
> documents within each section and this has me stumped. I've done re-
> ordering in Cake in the past, using MPTT (tree) model [1] and some
> nifty jQuery drag & drop. However, because these documents are not all
> in a single "list" (ie. they have different sections) I'm having some
> difficulty figuring out how to proceed. Perhaps I've just missed
> something so I'd like to throw it out there in case anyone has an
> idea.
>
> Just to clarify, I need to be able to re-order the list of Documents
> within a given Section. Normally, I'd simply rely on the moveUp() &
> moveDown() methods that TreeBehavior provides. But that presupposes
> that we're dealing with a single list, not several, one for each
> section.
>
> Right now, I'm using the following simple method in the Document
> model:
>
> public function fetchAll()
> {
> return $this->DocumentSection->find(
> 'all',
> array(
> 'contain' => array(
> 'Document'
> )
> )
> );
> }
>
>
> ... which gives me a list of Sections, each with their own list of
> Documents.
>
> Here's the current schema, without re-ordering:
>
> CREATE TABLE document_sections
> (
> id INT(10) UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
> title VARCHAR(64) NOT NULL,
> description text DEFAULT NULL
> ) ENGINE=MyISAM DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci;
>
> CREATE TABLE documents
> (
> id INT(10) UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
> created DATETIME DEFAULT NULL,
> modified DATETIME DEFAULT NULL,
> section_id INT(10) NOT NULL,
> title VARCHAR(64) NOT NULL,
> description text DEFAULT NULL,
> directory VARCHAR(255) NOT NULL,
> basename VARCHAR(64) NOT NULL,
> extension VARCHAR(4) NOT NULL,
> type VARCHAR(64) NOT NULL,
> size INT(11) UNSIGNED NOT NULL,
>
> FOREIGN KEY (section_id) REFERENCES document_sections (id)
> ) ENGINE=MyISAM DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci;
>
> Ideas?
>
> [1] Modified Preorder Tree Traversal
> http://articles.sitepoint.com/article/hierarchical-data-database
> http://dev.mysql.com/tech-resources/articles/hierarchical-data.html
>
> Check out the new CakePHP Questions site http://cakeqs.org and help others with their CakePHP related questions.
>
> You received this message because you are subscribed to the Google Groups "CakePHP" group.
> To post to this group, send email to cake-php@googlegroups.com
> To unsubscribe from this group, send email to
> cake-php+unsubscribe@googlegroups.com For more options, visit this group at http://groups.google.com/group/cake-php?hl=en

Check out the new CakePHP Questions site http://cakeqs.org and help others with their CakePHP related questions.

You received this message because you are subscribed to the Google Groups "CakePHP" group.
To post to this group, send email to cake-php@googlegroups.com
To unsubscribe from this group, send email to
cake-php+unsubscribe@googlegroups.com For more options, visit this group at http://groups.google.com/group/cake-php?hl=en

No comments: