b2evolution PHP Cross Reference Blogging Systems

Source: /skins/manual/_skin.class.php - 697 lines - 20001 bytes - Summary - Text - Print

Description: This file implements a class derived of the generic Skin class in order to provide custom code for the skin in this folder. This file is part of the b2evolution project - {@link http://b2evolution.net/}

   1  <?php
   2  /**

   3   * This file implements a class derived of the generic Skin class in order to provide custom code for

   4   * the skin in this folder.

   5   *

   6   * This file is part of the b2evolution project - {@link http://b2evolution.net/}

   7   *

   8   * @package skins

   9   * @subpackage manual

  10   *

  11   * @version $Id: _skin.class.php 992 2012-03-06 07:25:35Z yura $

  12   */
  13  if( !defined('EVO_MAIN_INIT') ) die( 'Please, do not access this page directly.' );
  14  
  15  /**

  16   * Specific code for this skin.

  17   *

  18   * ATTENTION: if you make a new skin you have to change the class name below accordingly

  19   */
  20  class manual_Skin extends Skin
  21  {
  22    /**

  23       * Get default name for the skin.

  24       * Note: the admin can customize it.

  25       */
  26  	function get_default_name()
  27      {
  28          return 'Manual';
  29      }
  30  
  31  
  32    /**

  33       * Get default type for the skin.

  34       */
  35  	function get_default_type()
  36      {
  37          return 'normal';
  38      }
  39  
  40  
  41      /**

  42       * Get definitions for editable params

  43       *

  44       * @see Plugin::GetDefaultSettings()

  45       * @param local params like 'for_editing' => true

  46       */
  47  	function get_param_definitions( $params )
  48      {
  49          $r = array_merge( array(
  50                  'head_bg_color' => array(
  51                      'label' => T_('Header Background Color'),
  52                      'note' => T_('E-g: #ff0000 for red'),
  53                      'defaultvalue' => '#03699C',
  54                      'type' => 'color',
  55                  ),
  56                  'head_text_color' => array(
  57                      'label' => T_('Header Text Color'),
  58                      'note' => T_('E-g: #00ff00 for green'),
  59                      'defaultvalue' => '#FFFFFF',
  60                      'type' => 'color',
  61                  ),
  62                  'menu_bg_color' => array(
  63                      'label' => T_('Menu Background Color'),
  64                      'note' => T_('E-g: #ff0000 for red'),
  65                      'defaultvalue' => '#74b4d4',
  66                      'type' => 'color',
  67                  ),
  68                  'menu_text_color' => array(
  69                      'label' => T_('Menu Text Color'),
  70                      'note' => T_('E-g: #00ff00 for green'),
  71                      'defaultvalue' => '#000000',
  72                      'type' => 'color',
  73                  ),
  74                  'footer_bg_color' => array(
  75                      'label' => T_('Footer Background Color'),
  76                      'note' => T_('E-g: #0000ff for blue'),
  77                      'defaultvalue' => '#DEE3E7',
  78                      'type' => 'color',
  79                  ),
  80                  'colorbox' => array(
  81                      'label' => T_('Colorbox Image Zoom'),
  82                      'note' => T_('Check to enable javascript zooming on images (using the colorbox script)'),
  83                      'defaultvalue' => 1,
  84                      'type'    =>    'checkbox',
  85                  ),
  86                  'gender_colored' => array(
  87                      'label' => T_('Display gender'),
  88                      'note' => T_('Use colored usernames to differentiate men & women.'),
  89                      'defaultvalue' => 0,
  90                      'type' => 'checkbox',
  91                  ),
  92                  'bubbletip' => array(
  93                      'label' => T_('Username bubble tips'),
  94                      'note' => T_('Check to enable bubble tips on usernames'),
  95                      'defaultvalue' => 0,
  96                      'type' => 'checkbox',
  97                  ),
  98              ), parent::get_param_definitions( $params )    );
  99  
 100          return $r;
 101      }
 102  
 103  
 104      /**

 105       * Get current skin post navigation setting. Always use this navigation setting where this skin is applied.

 106       */
 107  	function get_post_navigation()
 108      {
 109          return 'same_category';
 110      }
 111  
 112  
 113      /**

 114       * Get ready for displaying the skin.

 115       *

 116       * This may register some CSS or JS...

 117       */
 118  	function display_init()
 119      {
 120          // call parent:

 121          parent::display_init();
 122  
 123          // Add CSS:

 124          require_css( 'basic_styles.css', 'blog' ); // the REAL basic styles

 125          require_css( 'basic.css', 'blog' ); // Basic styles

 126          require_css( 'blog_base.css', 'blog' ); // Default styles for the blog navigation

 127          require_css( 'item_base.css', 'blog' ); // Default styles for the post CONTENT

 128  
 129          // Make sure standard CSS is called ahead of custom CSS generated below:

 130          require_css( 'style.css', true );
 131  
 132          // Add custom CSS:

 133          $custom_css = '';
 134  
 135          if( $color = $this->get_setting( 'head_bg_color' ) )
 136          { // Custom Header background color:
 137              $custom_css .= '    div.pageHeader { background-color: '.$color." }\n";
 138          }
 139          if( $color = $this->get_setting( 'head_text_color' ) )
 140          { // Custom Header text color:
 141              $custom_css .= '    div.pageHeader, div.pageHeader a { color: '.$color." }\n";
 142          }
 143  
 144          if( $color = $this->get_setting( 'menu_bg_color' ) )
 145          { // Custom Menu background color:
 146              $custom_css .= '    div.top_menu_bg { background-color: '.$color." }\n";
 147          }
 148          if( $color = $this->get_setting( 'menu_text_color' ) )
 149          { // Custom Menu text color:
 150              $custom_css .= '    div.top_menu a { color: '.$color." }\n";
 151          }
 152  
 153          if( $color = $this->get_setting( 'footer_bg_color' ) )
 154          { // Custom Footer background color:
 155              $custom_css .= '    div#pageFooter { background-color: '.$color." }\n";
 156          }
 157  
 158          if( !empty( $custom_css ) )
 159          {
 160              $custom_css = '<style type="text/css">
 161      <!--
 162  '.$custom_css.'    -->
 163      </style>';
 164              add_headline( $custom_css );
 165          }
 166  
 167          // Colorbox (a lightweight Lightbox alternative) allows to zoom on images and do slideshows with groups of images:

 168          if($this->get_setting("colorbox"))
 169          {
 170              require_js_helper( 'colorbox', 'blog' );
 171          }
 172  
 173          // Functions to switch between the width sizes

 174          require_js( '#jquery#', 'blog' );
 175          require_js( 'widthswitcher.js', 'blog' );
 176      }
 177  
 178  
 179      /**

 180       * Display breadcrumbs

 181       *

 182       * @param integer Chapter ID

 183       * @param array Params

 184       * @return string Breadcrumbs path if $params['display'] == false

 185       */
 186  	function display_breadcrumbs( $chapter_ID, $params = array() )
 187      {
 188          if( $chapter_ID <= 0 )
 189          { // No selected chapter, or an exlcude chapter filter is set
 190              return '';
 191          }
 192  
 193          $params = array_merge( array(
 194                  'before'    => '<div class="breadcrumbs">',
 195                  'after'     => '</div>',
 196                  'separator' => ' &gt; ',
 197                  'display'   => true, // true - to display, false - to return as string
 198                  'format'    => 'link', // 'link' - get breadcrumbs with links | 'text' - only text
 199                  'blogname'  => true, // true - to include blog name in breadcrumbs
 200              ), $params );
 201  
 202          global $Blog;
 203  
 204          $ChapterCache = & get_ChapterCache();
 205  
 206          $breadcrumbs = array();
 207          do
 208          {    // Get all parent chapters
 209              if( $Chapter = & $ChapterCache->get_by_ID( $chapter_ID, false ) )
 210              {
 211                  if( $params['format'] == 'link' )
 212                  {    // Make a link to the Chapter
 213                      $breadcrumbs[] = '<a href="'.$Chapter->get_permanent_url().'">'.$Chapter->dget( 'name' ).'</a>';
 214                  }
 215                  else
 216                  {    // Get only name of the Chapter
 217                      $breadcrumbs[] = $Chapter->dget( 'name' );
 218                  }
 219                  $chapter_ID = $Chapter->get( 'parent_ID' );
 220              }
 221              else
 222              {
 223                  $chapter_ID = 0;
 224              }
 225          }
 226          while( !empty( $chapter_ID ) );
 227  
 228          if( $params['blogname'] )
 229          {    // Include Blog name
 230              if( $params['format'] == 'link' )
 231              {    // Make a link to the Blog
 232                  $breadcrumbs[] = '<a href="'.$Blog->get( 'blogurl' ).'">'.$Blog->get( 'name' ).'</a>';
 233              }
 234              else
 235              {    // Get only name of the Blog
 236                  $breadcrumbs[] = $Blog->get( 'name' );
 237              }
 238          }
 239  
 240          $breadcrumbs = array_reverse( $breadcrumbs );
 241  
 242          $r = $params['before']
 243              .implode( $params['separator'], $breadcrumbs )
 244              .$params['after'];
 245  
 246          if( $params['display'] )
 247          {    // Display
 248              echo $r;
 249          }
 250          else
 251          {    // Return
 252              return $r;
 253          }
 254      }
 255  
 256      /**

 257       * Get chapters

 258       *

 259       * @param integer Chapter parent ID

 260       */
 261  	function get_chapters( $parent_ID = 0 )
 262      {
 263          global $Blog, $skin_chapters_cache;
 264  
 265          if( !isset( $skin_chapters_cache ) )
 266          {    // Get the all chapters for current blog
 267              $ChapterCache = & get_ChapterCache();
 268              $ChapterCache->load_subset( $Blog->ID );
 269  
 270              if( isset( $ChapterCache->subset_cache[ $Blog->ID ] ) )
 271              {
 272                  $chapters = $ChapterCache->subset_cache[ $Blog->ID ];
 273  
 274                  $skin_chapters_cache = array();
 275                  foreach( $chapters as $chapter_ID => $Chapter )
 276                  {    // Init children
 277                      //pre_dump( $Chapter->ID.' - '.$Chapter->get_name().' : '.$Chapter->get( 'parent_ID' ) );

 278                      if( $Chapter->get( 'parent_ID' ) == 0 )
 279                      {
 280                          $Chapter->children = $this->get_chapter_children( $Chapter->ID );
 281                          $skin_chapters_cache[ $Chapter->ID ] = $Chapter;
 282                      }
 283                  }
 284              }
 285          }
 286  
 287          if( $parent_ID > 0 )
 288          {    // Get the chapters by parent
 289              $ChapterCache = & get_ChapterCache();
 290              if( $Chapter = & $ChapterCache->get_by_ID( $parent_ID, false ) )
 291              {
 292                  return $Chapter->children;
 293              }
 294              else
 295              {    // Invalid ID of parent category
 296                  return array();
 297              }
 298          }
 299  
 300          return $skin_chapters_cache;
 301      }
 302  
 303  
 304      /**

 305       * Get the children of current chapter recursively

 306       *

 307       * @param integer Parent ID

 308       * @return array Chapter children

 309       */
 310  	function get_chapter_children( $parent_ID = 0 )
 311      {
 312          global $blog;
 313  
 314          $ChapterCache = & get_ChapterCache();
 315  
 316          $chapter_children = array();
 317          if( isset( $ChapterCache->subset_cache[ $blog ] ) )
 318          {
 319              $chapters = $ChapterCache->subset_cache[ $blog ];
 320              foreach( $chapters as $Chapter )
 321              {
 322                  if( $parent_ID == $Chapter->get( 'parent_ID' ) )
 323                  {
 324                      $Chapter->children = $this->get_chapter_children( $Chapter->ID );
 325                      $chapter_children[ $Chapter->ID ] = $Chapter;
 326                  }
 327              }
 328          }
 329  
 330          return $chapter_children;
 331      }
 332  
 333  
 334      /**

 335       * Get an array with chapters ID that located in current path

 336       *

 337       * @param integer Chapter ID

 338       * @return array Chapters ID

 339       */
 340  	function get_chapter_path( $chapter_ID )
 341      {
 342          global $blog;
 343          $ChapterCache = & get_ChapterCache();
 344          $ChapterCache->load_subset( $blog );
 345  
 346          $chapter_path = array( $chapter_ID );
 347          if( isset( $ChapterCache->subset_cache[ $blog ] ) )
 348          {
 349              $chapters = $ChapterCache->subset_cache[ $blog ];
 350              if( isset( $chapters[ $chapter_ID ] ) )
 351              {
 352                  $Chapter = $chapters[ $chapter_ID ];
 353                  while( $Chapter->get( 'parent_ID' ) > 0 )
 354                  {
 355                      $chapter_path[] = $Chapter->get( 'parent_ID' );
 356                      // Select a parent chapter

 357                      $Chapter = $chapters[ $Chapter->get( 'parent_ID' ) ];
 358                  }
 359              }
 360          }
 361  
 362          return $chapter_path;
 363      }
 364  
 365  
 366      /**

 367       * Display chapters list

 368       *

 369       * @param array Params

 370       */
 371  	function display_chapters( $params = array() )
 372      {
 373          $params = array_merge( array(
 374                  'parent_cat_ID'      => 0,
 375                  'block_start'        => '<ul class="chapters_list">',
 376                  'block_end'          => '</ul>',
 377                  'block_subs_start'   => '<ul>',
 378                  'block_subs_end'     => '</ul>',
 379                  'item_start'         => '<li>',
 380                  'item_end'           => '</li>',
 381                  'class_opened'       => 'opened',
 382                  'class_closed'       => 'closed',
 383                  'class_selected'     => 'selected',
 384                  'class_post'         => 'post',
 385                  'display_blog_title' => true,
 386                  'display_children'   => false,
 387                  'display_posts'      => true,
 388              ), $params );
 389  
 390          global $Blog, $blog, $cat, $Item;
 391  
 392          $chapters = $this->get_chapters( (int)$params['parent_cat_ID'] );
 393  
 394          if( empty( $chapters ) )
 395          {    // No categories, Exit here
 396              return;
 397          }
 398  
 399          if( empty( $Blog ) && !empty( $blog ) )
 400          {    // Set Blog if it still doesn't exist
 401              $BlogCache = & get_BlogCache();
 402              $Blog = & $BlogCache->get_by_ID( $blog, false );
 403          }
 404  
 405          if( empty( $Blog ) )
 406          {    // No Blog, Exit here
 407              return;
 408          }
 409  
 410          $chapter_path = array();
 411          if( !empty( $cat ) )
 412          {    // A category is opened
 413              $chapter_path = $this->get_chapter_path( $cat );
 414          }
 415          elseif( !empty( $Item ) )
 416          {    // A post is opened
 417              $chapter_path = $this->get_chapter_path( $Item->main_cat_ID );
 418          }
 419  
 420          echo $params['block_start'];
 421  
 422          if( $params['display_blog_title'] )
 423          {    // Display blog title
 424              echo str_replace( '>', ' class="title">', $params['item_start'] );
 425              echo '<a href="'.$Blog->get( 'url' ).'" class="link">'.$Blog->get( 'name' ).'</a>';
 426              echo $params['item_end'];
 427          }
 428  
 429          foreach( $chapters as $Chapter )
 430          {    // Display all given chapters
 431              $this->display_chapter_item( array_merge( $params, array(
 432                      'Chapter'      => $Chapter,
 433                      'chapter_path' => $chapter_path,
 434                  ) ) );
 435          }
 436  
 437          echo $params['block_end'];
 438      }
 439  
 440  
 441      /**

 442       *

 443       *

 444       * @param array Params

 445       */
 446  	function display_chapter_item( $params = array() )
 447      {
 448          $params = array_merge( array(
 449                  'Chapter'      => NULL,
 450                  'chapter_path' => array(),
 451              ), $params );
 452  
 453          global $Blog;
 454  
 455          if( empty( $params['Chapter'] ) )
 456          {    // No Chapter, Exit here
 457              return;
 458          }
 459  
 460          $Chapter = & $params['Chapter'];
 461  
 462          $is_selected = false;
 463  
 464          $classes = array();
 465          if( !$params['display_children'] && !empty( $params['chapter_path'] ) && in_array( $Chapter->ID, $params['chapter_path'] ) )
 466          {    // A category is selected
 467              $is_selected = true;
 468              $classes[] = $params['class_selected'];
 469          }
 470          if( !empty( $Chapter->children ) && ( $params['display_children'] || $is_selected ) )
 471          {    // A category is opened
 472              $classes[] = $params['class_opened'];
 473          }
 474          else if( $Chapter->has_posts() && ( $params['display_children'] || $is_selected ) )
 475          {    // A category is selected and it has the posts
 476              $classes[] = $params['class_opened'];
 477          }
 478  
 479          // Display a category

 480          if( empty( $classes ) )
 481          {
 482              echo $params['item_start'];
 483          }
 484          else
 485          {    // Add attr "class" for item start tag
 486              echo str_replace( '>', ' class="'.implode( ' ', $classes ).'">', $params['item_start'] );
 487          }
 488  
 489          //echo '<a href="'.$Chapter->get_permanent_url().'" class="link">'.$Chapter->get_name().'</a>'.' <span class="red">'.( $Chapter->get( 'order' )> 0? $Chapter->get( 'order' ) : 'NULL').'</span>';

 490          echo '<a href="'.$Chapter->get_permanent_url().'" class="link">'.$Chapter->get_name().'</a>';
 491  
 492          if( $params['display_children'] || $is_selected )
 493          {
 494              global $Settings;
 495  
 496              if( $Settings->get( 'chapter_ordering' ) == 'manual' &&
 497                    $Blog->get_setting( 'orderby' ) == 'order' &&
 498                    $Blog->get_setting( 'orderdir' ) == 'ASC' )
 499              {    // Items & categories are ordered by manual field 'order'
 500                  // In this mode we should show them in one merged list ordered by field 'order'

 501                  $chapters_items_mode = 'order';
 502              }
 503              else
 504              {    // Standard mode for all other cases
 505                  $chapters_items_mode = 'std';
 506              }
 507  
 508              if( $chapters_items_mode != 'order' )
 509              {    // Display all subchapters
 510                  $this->display_chapters( array_merge( $params, array(
 511                          'parent_cat_ID'      => $Chapter->ID,
 512                          'block_start'        => $params['block_subs_start'],
 513                          'block_end'          => $params['block_subs_end'],
 514                          'display_blog_title' => false,
 515                      ) ) );
 516              }
 517  
 518              if( $params['display_posts'] && $Chapter->has_posts() )
 519              {    // Display the posts of this chapter
 520                  echo $params['block_subs_start'];
 521                  $this->display_chapter_posts( array_merge( $params, array(
 522                      'chapter_ID'          => $Chapter->ID,
 523                      'chapters_items_mode' => $chapters_items_mode,
 524                  ) ) );
 525                  echo $params['block_subs_end'];
 526              }
 527          }
 528  
 529          echo $params['item_end'];
 530      }
 531  
 532  
 533      /**

 534       * Display a list of the posts for current chapter

 535       *

 536       * @param array params

 537       * @return string List with posts

 538       */
 539  	function display_chapter_posts( $params = array() )
 540      {
 541          $params = array_merge( array(
 542                  'chapter_ID'          => 0,
 543                  'item_start'          => '<li>',
 544                  'item_end'            => '</li>',
 545                  'class_selected'      => 'selected',
 546                  'class_post'          => 'post',
 547                  'chapters_items_mode' => 'std',
 548                  'display_children'    => false,
 549                  'display_posts'       => false,
 550              ), $params );
 551  
 552          global $DB, $Item, $Blog, $blog;
 553  
 554          if( empty( $Blog ) && !empty( $blog ) )
 555          {    // Set Blog if it still doesn't exist
 556              $BlogCache = & get_BlogCache();
 557              $Blog = & $BlogCache->get_by_ID( $blog, false );
 558          }
 559  
 560          if( empty( $params['chapter_ID'] ) || empty( $Blog ) )
 561          {    // No chapter ID, Exit here
 562              return;
 563          }
 564  
 565          if( $params['chapters_items_mode'] == 'order' )
 566          {    // Get all subchapters in this mode to following insertion into posts list below
 567              $sub_chapters = $this->get_chapters( $params['chapter_ID'] );
 568          }
 569  
 570          // Get the posts of current category

 571          $ItemList = new ItemList2( $Blog, $Blog->get_timestamp_min(), $Blog->get_timestamp_max(), $Blog->get_setting('posts_per_page') );
 572          $ItemList->load_from_Request();
 573          $ItemList->set_filters( array(
 574                  'cat_array' => array( $params['chapter_ID'] ), // Limit only by selected cat (exclude posts from child categories)
 575                  'unit'      => 'all', // Display all items of this category, Don't limit by page
 576              ) );
 577          $ItemList->query();
 578  
 579          $selected_item_ID = ( !empty( $Item ) && !empty( $Item->ID ) ) ? $Item->ID : 0;
 580  
 581          // Split items in two arrays to know what items are from main category and what items are from extra category

 582          $items_main = array();
 583          $items_extra = array();
 584          while( $cur_Item = $ItemList->get_item() )
 585          {
 586              if( $cur_Item->main_cat_ID == $params['chapter_ID'] )
 587              {    // Item is from main category
 588                  $items_main[] = $cur_Item;
 589              }
 590              else
 591              {    // Item is from extra catogry
 592                  $items_extra[] = $cur_Item;
 593              }
 594          }
 595  
 596  
 597          // ---- Display Items from MAIN category ---- //

 598          $prev_item_order = 0;
 599          foreach( $items_main as $cur_Item )
 600          {
 601              if( $params['chapters_items_mode'] == 'order' )
 602              {    // In this mode we display the chapters inside a posts list
 603                  foreach( $sub_chapters as $s => $sub_Chapter )
 604                  {    // Loop through categories to find for current order
 605                      if( ( $sub_Chapter->get( 'order' ) <= $cur_Item->get( 'order' ) && $sub_Chapter->get( 'order' ) > $prev_item_order ) ||
 606                                /* This condition is needed for NULL order: */

 607                                ( $cur_Item->get( 'order' ) == 0 && $sub_Chapter->get( 'order' ) >= $cur_Item->get( 'order' ) ) )
 608                      {    // Display chapter
 609                          $this->display_chapter_item( array_merge( $params, array(
 610                                  'Chapter'      => $sub_Chapter,
 611                              ) ) );
 612                          // Remove this chapter from array to avoid the duplicates

 613                          unset( $sub_chapters[ $s ] );
 614                      }
 615                  }
 616  
 617                  // Save current post order for next iteration

 618                  $prev_item_order = $cur_Item->get( 'order' );
 619              }
 620  
 621              $classes = array( 'post' );
 622              if( $selected_item_ID == $cur_Item->ID )
 623              {    // This post is selected
 624                  $classes[] = $params['class_selected'];
 625              }
 626  
 627              // Display a post

 628              if( empty( $classes ) )
 629              {
 630                  echo $params['item_start'];
 631              }
 632              else
 633              {    // Add attr "class" for item start tag
 634                  echo str_replace( '>', ' class="'.implode( ' ', $classes ).'">', $params['item_start'] );
 635              }
 636  
 637              // Display a permanent link to post

 638              $cur_Item->title( array(
 639                      'post_navigation' => 'same_category', // we are always navigating through category in this skin
 640                      'nav_target'      => $params['chapter_ID'], // set the category ID as nav target
 641                      'link_type'       => 'permalink',
 642                      'link_class'      => 'link',
 643                  ) );
 644  
 645              //echo ' <span class="red">'.( $cur_Item->get('order') > 0 ? $cur_Item->get('order') : 'NULL').'</span>'.$params['item_end'];

 646              echo $params['item_end'];
 647          }
 648  
 649          if( $params['chapters_items_mode'] == 'order' )
 650          {
 651              foreach( $sub_chapters as $s => $sub_Chapter )
 652              {    // Loop through rest categories that have order more than last item
 653                  $this->display_chapter_item( array_merge( $params, array(
 654                          'Chapter'      => $sub_Chapter,
 655                      ) ) );
 656                  // Remove this chapter from array to avoid the duplicates

 657                  unset( $sub_chapters[ $s ] );
 658              }
 659          }
 660  
 661  
 662          // ---- Display Items from EXTRA category ---- //

 663          foreach( $items_extra as $cur_Item )
 664          {
 665              $classes = array( 'post' );
 666              if( $selected_item_ID == $cur_Item->ID )
 667              {    // This post is selected
 668                  $classes[] = $params['class_selected'];
 669              }
 670  
 671              // Display a post

 672              if( empty( $classes ) )
 673              {
 674                  echo $params['item_start'];
 675              }
 676              else
 677              {    // Add attr "class" for item start tag
 678                  echo str_replace( '>', ' class="'.implode( ' ', $classes ).'">', $params['item_start'] );
 679              }
 680  
 681              // Display a permanent link to post

 682              $cur_Item->title( array(
 683                      'post_navigation' => 'same_category', // we are always navigating through category in this skin
 684                      'nav_target'      => $params['chapter_ID'], // set the category ID as nav target
 685                      'link_type'       => 'permalink',
 686                      'link_class'      => 'link',
 687                      'before'          => '<i>',
 688                      'after'           => '</i>',
 689                  ) );
 690  
 691              //echo ' <span class="red">'.( $cur_Item->get('order') > 0 ? $cur_Item->get('order') : 'NULL').'</span>'.$params['item_end'];

 692              echo $params['item_end'];
 693          }
 694      }
 695  }
 696  
 697  ?>

title

Description

title

Description

title

Description

title

title

Body