The csDoctrineActAsSortablePlugin
is a symfony plugin that allows use of the doctrine behavior actAsSortable.
This behavior provides methods on your model for setting display order/position.
This plugin also contains images to implement for ordering.
git submodule add git://github.com/bshaffer/csDoctrineActAsSortablePlugin.git plugins/csDoctrineActAsSortablePlugin
git submodule init
git submodule update
svn propedit svn:externals plugins
In the editor that's displayed, add the following entry and then save
csDoctrineActAsSortablePlugin https://svn.github.com/bshaffer/csDoctrineActAsSortablePlugin.git
Finally, update:
svn up
In your config/ProjectConfiguration.class.php
file, make sure you have
the plugin enabled.
$this->enablePlugins('csDoctrineActAsSortablePlugin');
Apply the behavior to your model in your schema file config/doctrine/schema.yml
MyModel:
actAs: [Sortable]
Optionally accepts a UniqueBy attribute which will be used on a model with a one-to-many relationship
MyModel:
actAs:
Sortable:
uniqueBy: [parent_id]
Rebuild your models and database
./symfony doctrine:build --all --and-load
Publish your assets
./symfony plugin:publish-assets
Clear your cache
./symfony cc
#Available Record Methods
-
promote
$record->promote();
-
demote
$record->demote();
-
moveToFirst
$record->moveToFirst();
-
moveToLast
$record->moveToLast();
-
moveToPosition
$record->moveToPosition($newPosition);
#Available Table Methods
-
sort - accepts the array created by the symfony/prototype sortableElement tag
Doctrine::getTable('MyModel')->sort($order);
-
findAllSorted - Accepts sort order (asc, desc)
Doctrine::getTable('Model')->findAllSorted('asc');
-
findAllSortedWithParent - accepts the parent column name, the value, and sort order (asc, desc)
Doctrine::getTable('MyModel')->findAllSortedWithParent($fk_value, $fk_name, 'asc');
#Example Usage With Admin Generator
In your module, edit config/generator.yml
, and under list, object actions, add:
object_actions:
promote:
action: promote
demote:
action: demote
_edit: -
_delete: -
In your module, edit actions/actions.class.php
, Add the following actions:
public function executePromote()
{
$object=Doctrine::getTable('MyModel')->findOneById($this->getRequestParameter('id'));
$object->promote();
$this->redirect("@moduleIndexRoute");
}
public function executeDemote()
{
$object=Doctrine::getTable('MyModel')->findOneById($this->getRequestParameter('id'));
$object->demote();
$this->redirect("@moduleIndexRoute");
}