Forums / Developer / $node.data_map.(...) versus $node.object.data_map.(...) ?
Craig Hirsch
Thursday 07 April 2005 9:44:07 am
Can someone clarify for me:
1) The conceptual difference between accessing a particular content item's data map via $node.data_map.(...) and accessing it via $node.object.data_map.(...) ?
2) The practical effects of doing things one way or the other...?
Thanks in advance.
-- chirsch{AT}gmail{d.t}com
Paul Forsyth
Thursday 07 April 2005 10:31:33 am
They both call the same php function so both return the same result.
In some circumstances you may not have access to the node and use $object.data_map instead.
paul
Kristian Hole
Friday 08 April 2005 12:11:16 am
1)The conceptual difference is that the node does not have a data_map. The node "contains" the object, so $node.object.data_map is the correct way. $node.data_map is a shortcut.
2)Should be no practical difference.
Kristian http://ez.no/ez_publish/documenta...tricks/show_which_templates_are_used http://ez.no/doc/ez_publish/techn...te_operators/miscellaneous/attribute
Hans Melis
Friday 08 April 2005 12:43:50 am
2) There is a practical difference depending on some conditions.
- You must be using Exponential 3.5 - TemplateOptimization must be enabled- The variable $node must not be set by a module, but fetched in a template (in other words, a template loaded by a custom module).
In those conditions, $node.object.data_map doesn't work, but $node.data_map does.
http://ez.no/community/bugs/templateoptimization_causes_problems
Hans http://blog.hansmelis.be
Friday 08 April 2005 12:54:18 am
I was ofcourse just thinking of using $node in the view templates in my little head. Must still early in the morning ;)
Thanks for your comment Hans!
Xavier Dutoit
Friday 08 April 2005 12:58:09 am
Good question, rising an interresting point: too many ways of doing the same thing doesn't add any value but obfuscate.
What's the added value of $node.data_map instead of $node.object.data_map ? to save 7 bytes ?
Please choose an officially recommanded way, document it properly and declare obsolete the others.
Orthogonality is the best documentation ;)
http://www.sydesy.com
Friday 08 April 2005 9:31:52 am
I will also add this to the discussion - right now, using $node.object is very dangerous when referencing images, because of the PHP bug noted here (whose cause I still don't really comprehend):
http://www.ez.no/community/bugs/call_to_undefined_function_storedata
Working around this bug prompted my question originally -- after two solid long days of working I have finally eliminated all reference to $node.object.data_map.(image datatype attribute)[original] in my code, replacing it with $node.data_map.(...).
So.. it would seem that for all template development the safest bet by far is to use $node.data_map rather than $node.object.data_map, given the bug and Hans' TemplateOptimization comments.
Does everyone agree?
Friday 08 April 2005 9:48:14 am
I don't know what works best in every specific case, but on a conceptual level, I think that datamap belongs to the object, not to the node.
node.data_map just fuels the confusion between object and node IMO.
Xavier
Monday 11 April 2005 4:16:28 am
I agree with you Xavier that using $node.object.data_map is conceptually better and clearer (and less confusing).
I think the reason that this was implemented was to reduce the overhead for getting the data_map. (Less calls to functional attributes.)