Forums / Discussions / Finding double-published items
Wednesday 29 June 2011 2:48:00 pm - 7 replies
I had to find objects that had multiple locations for a client. This is what I came up with:
» Read full blog post
Marko Žmak
Thursday 30 June 2011 3:53:08 am
Just out of curiosity, did you have to find the objects which got multiple locations by error, or was it for some other reason?
-- Nothing is impossible. Not if you can imagine it! Hubert Farnsworth
Steven E. Bailey
Thursday 30 June 2011 4:11:06 pm
I was trying to track down wether smart view caching was only clearing the parent node/siblings of the main node.
Unintended double-publishing, haven't heard anything about that?
Certified eZPublish developer http://ez.no/certification/verify/396111 Available for ezpublish troubleshooting, hosting and custom extension development: http://www.leidentech.com
Thursday 30 June 2011 4:35:04 pm
I ment like half published objects because of DB error etc. Or double published objects because of some buggy script.
Some other toughts...
- why did yu use getParentNodeIdListByContentObjectID() instead of assigned_nodes?
- for sites with a lot of content, limit and offset should be used with subTreeByNodeID() so that you can check smaller amounts of node at a time and avoid breaking of the script.
- note that by using 2 as top node id, you will miss the nodes in other parts of the node tree (images, files, users)
Friday 01 July 2011 3:09:28 pm
I think I tried assigned nodes but it didn't work for some reason... not sure why now. But it wasn't more than a quick decision on the fly.
Yeah, limit and offset - I tend not to think of those until the script breaks. This one hasn't broken for me yet.
Node 2 - I tend to use node 2 by default because I tend to want that content without users, media, etc. but that's why the topNodeID is a parameter. I could see this being an easy way to see what groups users are in without having to access the user class.
Friday 01 July 2011 3:39:32 pm
I think this adresses all your points - only takes twice as long but at least it shouldn't fatal:
<?php require 'autoload.php'; $limit=200; $cli = eZCLI::instance(); $script = eZScript::instance( array( 'description' => ( "finds double-published objects" ), 'use-session' => false, 'use-modules' => false, 'use-extensions' => false ) ); $script->startup(); $options = $script->getOptions( "", "[topNodeID]", array() ); $script->initialize(); $topNodeID = ctype_digit($options["arguments"][0]) ? $options["arguments"][0] : 1; $params['MainNodeOnly'] = true; $params['IgnoreVisibility'] = true; $nodecount = eZContentObjectTreeNode::subTreeCountByNodeID( $params, $topNodeID ); for($offset=0;$offset<=$nodecount;$offset=$offset+$limit) { $params['Offset']=$offset; $params['Limit'] = $limit; $nodes = eZContentObjectTreeNode::subTreeByNodeID( $params, $topNodeID ); foreach($nodes as $node) { if (count($node->object()->attribute( 'assigned_nodes' )) != 1 ) { echo $node->attribute( 'path_identification_string')."\n"; } } } $script->shutdown(); ?>
Edit: don't need the session/module/extension in the script call either.
Edit: changed Object to object.
Saturday 02 July 2011 5:38:32 am
Correction, "Object" should be all small caps. So like this:
if (count($node->object()->attribute( 'assigned_nodes' )) != 1 ) {
Saturday 02 July 2011 2:05:58 pm
In php user defined classes and functions are case-insensitive . Both will work. But whatever.
You must be logged in to post messages in this topic!
Script start
Module start 'content'
Module end 'content'
Script end
Time used to render debug report: 0.0002 secs