Sunday, August 4, 2013

How to copy & delete Zoo Items programmatically?

Usually we have to allow Joomla front-end users to delete or copy Zoo Items. However Zoo lacks this functionality.

How to delete zoo records programmatically.

Y'day wanted to build this functionality in one of the Zoo based project. I could delete Zoo Items in few minutes by executing some delete queries on zoo related tables but decided to dig Zoo API. Why to take initiatives if Zoo API handles very effectively. Instead of writing 20-30 lines code, you can finish it in 3-4 lines using Zoo API & its very easy.
$Zoo_Item_Id = 29029; // Zoo Item id which you want to remove.
$app = App::getInstance('zoo'); // Define Zoo app instance.
$item = $app->table->item->get($Zoo_Item_Id); // Get the info of $Zoo_Item_Id
$app->table->item->delete($item); // Removes the $Zoo_Item_Id record from all respective zoo tables.

How to copy Zoo Items Programmatically.

Now lets see how to copy zoo items programmatically. Copying zoo item is not as easy as deleting records. You should have all the details including zoo category of the zoo item which you wanna copy. First you should have all data of a zoo record. We have get item API which gives zoo item's data & getRelatedCategoryIds which tells the relation of a zoo item to the categories.
Lets get the zoo records data first.

$user  = JFactory::getUser(); // Get the current user info.
$app  = App::getInstance('zoo'); // Define Zoo Instance. 
$now   = $app->date->create()->toMySQL(); // Get Current date
$item  = $app->table->item->get($zoo_id); // Get Zoo Item info
$categories = $item->getRelatedCategoryIds(); // Get the Zoo category info
Now We have all the information of Zoo Item that we wanna copy.

$item->id = 0; // set id to 0, to force new item
$item->state = 0; // Set the state of Zoo Item. 1 - publish 0 - Unpublish 
$item->alias = $app->alias->item->getUniqueAlias($zoo_id, 'copy-'.$item->alias); 
// Alias should be unique for each Zoo Item.
$item->name  .= ' ('.JText::_('Copy').')'; // set copied name
$item->created   = $item->modified = $now; // Created & Modified date
$item->created_by  = $item->modified_by = $user->id;
$item->hits   = 0;
$item->setTags($app->table->tag->getItemTags($zoo_id)); // copy tags

$app->table->item->save($item); // Save $item in zoo_item table

$app->category->saveCategoryItemRelations($item->id, $categories);
// Save the category relation in zoo_category table.


1 comment: