Current page node id [SOLVED]

Current page node id [SOLVED]

Monday 27 September 2010 9:56:43 am - 17 replies

Modified on Saturday 09 October 2010 7:48:53 am by Lo' F.

Author Message

Lo' F.

Monday 27 September 2010 11:44:22 am

Let's say I created 4 frontpages under the root node.

In the right column of these frontpage objects I embedded, on a line view, each of them as links to the others. The thing is I need to deactivate the link of the one is already the displayed page. In order to accomplish this, I need to compare each {$object.main_node.node_id} to the current one.

This {$object.main_parent_node_id} returns, of course, the root under which I created those nodes, and so far it's the only outcome I have been able to get.

I need to create the conditional statement and so utilize the current page node_id in the content/view/line.tpl which is the template through which those links come from.

... hope somebody can help..

loredanaebook.it

Håvard Bergersen

Monday 27 September 2010 12:48:31 pm

If you have one template for all the subpages, you could do something like this:

To create right column in subpage template:

{def $pages=fetch( 'content', 'list', hash( 'parent_node_id', 'something' ) )}

{foreach $pages as $p}
   {node_view_gui content_node=$p view=line current_node_id=$node.node_id}
{/foreach}

The lineview template

{if eq( $current_node_id, $node.node_id )}
{$node.name|wash()}
{else}
<a href={$node.url|ezurl}>{$node.name|wash()}</a>
{/if}

This should work, but there may be a cache issue.

Lo' F.

Monday 27 September 2010 1:36:16 pm

Thank Håvard for your reply.

I actually embedded those frontpage objects of the frontpage class from the admin back-end.

And making the adjustments from the contentview/line.tpl template..

{default node_name=$object.main_node.name node_url=$object.main_node.url_alias}
<h2>{if $node_url}<a href={$node_url|ezurl}>{/if}{$node_name|wash}{if $node_url}</a>{/if}</h2>
{/default}

Here the $current_node_id doesn't work..

So far... among with all the attempts aimed to get the current page url (..unable to get the node_id from here I was trying to get the current page url)...:

- {ezpagedata().path|ezurl} or {$module_result.path|ezurl} return a too short result ( "/index.php/ita" )

- {$child.url|ezurl()} too long ( "/index.php/ita/the-page-I-need/its-last-child/its-last-child's-last-child" )

loredanaebook.it

Håvard Bergersen

Monday 27 September 2010 1:44:14 pm

Ahhh... Okey....

Well,,could you use {$module_result.node_id} ? Or {$module_result.path_array}

{if $module_result.path_array|contains( $node.node_id )} ?

Or am I not understanding anything now hehe... :)

Lo' F.

Monday 27 September 2010 2:12:25 pm

.. you have almost sorted my problem out..!

At least I am starting getting something that is probably far from what I should do but kind of.. working after all...

See how it comes:

{if $child.url|ezurl|contains($object.main_node.url)}
{$node_name|wash}


{else}
<a href="{$node_url|ezurl}">{$node_name|wash}</a>
{/if}

..it could be a cover for the time being...

but if I could get a proper current page node_id either its url should be better..

loredanaebook.it

Håvard Bergersen

Monday 27 September 2010 2:19:36 pm

{if $node.path_array|contains( $object.main_node.node_id ) }

Maybe a little cleaner :)

You can't reach the current node id outside the pagelayout.tpl...

Lo' F.

Monday 27 September 2010 2:28:33 pm

{if $node.path_array|contains( $object.main_node.node_id ) }

Maybe a little cleaner :)

You can't reach the current node id outside the pagelayout.tpl...

{$node.path_array|ezurl} returns "/index.php/ita"

loredanaebook.it

Håvard Bergersen

Monday 27 September 2010 2:31:17 pm

{$node.path_array} returns an array of node id's.. So you can't use the |ezurl operator on it :)

Lo' F.

Monday 27 September 2010 2:39:06 pm

{$node.path_array} returns an array of node id's.. So you can't use the |ezurl operator on it :)

..okey..

but yet it didn't return nothing when I tried it in the {if} condition...

loredanaebook.it

Håvard Bergersen

Monday 27 September 2010 2:43:28 pm

Hm.... Just tested it and it works here.. Tried dumping all the variables to inspect it?

{$node.path_array|attribute(show)}
{$object.main_node|attribute(show)}

Well,, good luck & good night :)

Lo' F.

Monday 27 September 2010 3:22:45 pm

..nope...

Only {$object.main.node|attribute{show}} works from here (..content/view/line.tpl) while {$node.path_array|attribute(show)} returns an empty Attribute Type Value.

... We'll see tomorrow. Good night!

loredanaebook.it

Nathan Kelly

Monday 27 September 2010 11:09:56 pm

If {$object.main_node|attribute(show)} is working you should be able to get the path_array with

{$object.main_node.path_array|attribute(show)}

(keep in mind however if your node is placed in more than one location this will only find the main_node path_arry which will be different to any of the co-located nodes.)

Pardon me while I burst into flames...

Bayron Guevara

Monday 27 September 2010 11:59:23 pm

I think you are trying to call a global variable inside a content view, from here you need to use the # character to indicate access to the global scope. So maybe the following code solve your problem:

{if eq($#module_result.node_id, $object.main_node_id)}
  {$node_name|wash}
{else}
  <a href="{$node_url|ezurl}">{$node_name|wash}</a>
{/if}

Web Developer & Modern Philosopher
Visit http://www.laprensa.hn, http://www.diez.hn, http://www.estilo.hn

Lo' F.

Tuesday 28 September 2010 4:02:49 am

I think you are trying to call a global variable inside a content view, from here you need to use the # character to indicate access to the global scope. So maybe the following code solve your problem:

{if eq($#module_result.node_id, $object.main_node_id)}
  {$node_name|wash}
{else}
  <a href="{$node_url|ezurl}">{$node_name|wash}</a>
{/if}

Thank you guys, but this doesn't work too..

I thought that could have worked because in theory that's what I am trying to do...

The only way I can get the current object page from the content view seems to be through its $child,

{if $child.path_array|contains($object.main_node.node_id)}ok{/if}

even though this is not the answer 'cause if there are not children in there it has no sense at all..

loredanaebook.it

Kévin S.

Thursday 30 September 2010 9:33:25 am

Hi Lo'F !

I had a similar problem recently. I solved it using ezhttp operator and a HTML GET parameter, which was the id of the node to display.

You can find more information in this topic.

Hope it'll help !

___

Kévin

Lo' F.

Saturday 09 October 2010 7:47:28 am

I had a similar problem recently. I solved it using ezhttp operator and a HTML GET parameter, which was the id of the node to display.

Hi Kévin! Thanks to your hint I finally got the perfect solution!

Your ezhttp took me here http://doc.ez.no/.../Template-operators/Data-and-information-extraction where I came across this module_params

Made it run this way ..

module_params()|attribute(show)

I got this outcome...

Attribute Type Value
module_name string 'content'
function_name string 'view'
parameters array Array(2)
>ViewMode string 'full'
>NodeID string 276

and...

{module_params()[parameters][NodeID]}

gave me the node id I was looking for, so I eventually made it work!

{if module_params()[parameters][NodeID]|eq($object.main_node.node_id)}...

Thank you again!

loredanaebook.it

Kévin S.

Tuesday 12 October 2010 5:20:23 am

Oh, nice ! Didn't find this one, very useful (I knew ezpublish could not let us without the current node ID !)

Thank you for telling how you solved this problem !

___

Kévin

You must be logged in to post messages in this topic!

Powered by eZ Publish™ CMS Open Source Web Content Management. Copyright © 1999-2014 eZ Systems AS (except where otherwise noted). All rights reserved.