Seditio Source
Root |
./othercms/elxis_5.3_atlas_rev2452/includes/libraries/elxis/helpers/accordion.helper.php
<?php
/**
* @version        $Id: accordion.helper.php 986 2012-03-25 17:05:56Z datahell $
* @package        Elxis
* @subpackage    Helpers / Accordion
* @copyright    Copyright (c) 2006-2012 Elxis CMS (http://www.elxis.org). All rights reserved.
* @license        Elxis Public License ( http://www.elxis.org/elxis-public-license.html )
* @author        Elxis Team ( http://www.elxis.org )
* @description     Elxis CMS is free software. Read the license for copyright notices and details
*/

defined('_ELXIS_') or die ('Direct access to this location is not allowed');


class
elxisAccordionHelper {

    private
$collapsible = true;
    private
$boxes = array();
    private
$boxid = 0;


   
/*********************/
    /* MAGIC CONSTRUCTOR */
    /*********************/
   
public function __construct() {
       
$this->boxid = rand(0, 100);
    }


   
/******************************************/
    /* MAKE ACCORDION FULL COLLAPSIBLE OR NOT */
    /******************************************/
   
public function setCollapsible($collapsible=true) {
       
$this->collapsible = (bool)$collapsible;
    }


   
/************/
    /* ADD ITEM */
    /************/
   
public function addItem($title, $contents='', $collapsed=true) {
       
$box = new stdClass;
       
$box->title = $title;
       
$box->contents = $contents;
       
$box->collapsed = (bool)$collapsed;

       
$this->boxid++;
       
$this->boxes[ $this->boxid ] = $box;        
    }


   
/*************************/
    /* RENDER ACCORDION HTML */
    /*************************/
   
public function render($gethtml=false, $importjs=true) {
        if (
$importjs === true) { $this->importJS(); }
       
$extra = ($this->collapsible) ? ' elx_accollapsible' : '';
       
$buffer = '<ul class="elx_accordion'.$extra.'">'."\n";
        if (
$this->boxes) {
            foreach (
$this->boxes as $boxid => $box) {
               
$css = ($box->collapsed) ? 'elx_accollapse' : 'elx_acexpand';
               
$buffer .= "\t".'<li class="'.$css.'">'."\n";
               
$buffer .= "\t\t".'<a href="#'.$boxid.'" class="elx_actitle">'.$box->title."</a>\n";
               
$buffer .= "\t\t".'<ul class="elx_acitem">'."\n";
               
$buffer .= "\t\t\t<li>\n";
               
$buffer .= "\t\t\t\t".$box->contents;
               
$buffer .= "\t\t\t</li>\n";
               
$buffer .= "\t\t</ul>\n";
               
$buffer .= "\t</li>\n";
            }
        }
       
$buffer .= "\t</ul>\n";

       
//reset boxes to free memory in case the object is not destroyed
        //and also to avoid append current boxes on next accordions
       
$this->boxes = array();

        if (
$gethtml === true) {
            return
$buffer;
        } else {
            echo
$buffer;
        }
    }


//------ 2nd method with direct echo ---------------------------------------


    /***********************/
    /* OPEN ACCORDION HTML */
    /***********************/
   
public function open($importjs=true) {
        if (
$importjs === true) { $this->importJS(); }
       
$extra = ($this->collapsible) ? ' elx_accollapsible' : '';
        echo
'<ul class="elx_accordion'.$extra.'">'."\n";
    }


   
/************************/
    /* CLOSE ACCORDION HTML */
    /************************/
   
public function close() {
        echo
"\t</ul>\n";
    }


   
/*************/
    /* OPEN ITEM */
    /*************/
   
public function openItem($title, $collapsed=true) {
       
$this->boxid++;
       
$css = ($collapsed) ? 'elx_accollapse' : 'elx_acexpand';
        echo
"\t".'<li class="'.$css.'">'."\n";
        echo
"\t\t".'<a href="#'.$this->boxid.'" class="elx_actitle">'.$title."</a>\n";
        echo
"\t\t".'<ul class="elx_acitem">'."\n";
        echo
"\t\t\t<li>\n";
    }


   
/**************/
    /* CLOSE ITEM */
    /**************/
   
public function closeItem() {
        echo
"\t\t\t</li>\n";
        echo
"\t\t</ul>\n";
        echo
"\t</li>\n";
    }


   
/***************************************/
    /* ADD REQUIRED JAVASCRIPT TO DOCUMENT */
    /***************************************/
   
private function importJS() {
       
$eDoc = eFactory::getDocument();

       
$jsdir = eFactory::getElxis()->secureBase().'/includes/js/jquery';
       
$eDoc->addJQuery();
       
$eDoc->addScriptLink($jsdir.'/accordion.js');
    }

}

?>