Search code examples
drupaldrupal-7teaser

How to list all child pages of current parent page in drupal 7?


Suppose I have parent pages A1 and B1. A1 has child pages A1.1, A1.2,A1.3 and B1 has child pages B1.1, B1.2. I want to list all the respective child pages on A1 and B1. In every child page I have an image and a title. These 2 information needs to be listed in the form of a teaser on the parent page. I need help in doing this whether by coding or by using views, I don't mind as far as I get the proper results. Thank you


Solution

  • You can do this is views by creating a view displaying the fields you require or a teaser. Then add a "Content Nid" contextual filter, in the configeration for this filter under "WHEN THE FILTER VALUE IS NOT AVAILABLE" select "Provide default value" and then "PHP Code" then the code I use is as follows

    $children = array();
    $current = db_query("select menu_name, mlid from {menu_links} where link_path = :node", array(':node' => $_GET['q']));
    $current_info = array();
    foreach ($current as $value) {
    $current_info[] = $value;
    }
    if($current_info) {
    $result = db_query("select mlid, plid, link_path, link_title from {menu_links}    where menu_name=:menu and plid=:mlid and hidden=0 order by weight, link_title", array(':menu' => $current_info[0]->menu_name, ':mlid' => $current_info[0]->mlid));
    foreach ($result as $row) {
      $children[] = $row;
    }
    }
    $nids = array();
    foreach ($children as $value){
    if( substr( $value->link_path, 0, 5 ) == 'node/' ){
      $nids[] = substr( $value->link_path, 5 );
    }
    }
    return implode('+',$nids);
    

    The last thing to do, under "more" at the bottom of the page sellect "Allow multiple values"