Skip to content
Snippets Groups Projects
Select Git revision
  • fcdae77b6b085d614fa4a42b0cb2fa0d47f0e0e9
  • master default protected
  • Legacy_Php7
3 results

htmlelements.class.php

Blame
  • htmlelements.class.php 4.42 KiB
    <?php
    
    /**
     * Generator for HTML Tags
     * 
     * see getTag() ... 
     *    it generates html code for tags 
     *    - with and without label
     *    - with and without closing tag
     * 
     * see _setAttributes($aAttributes) ... 
     *    attribute will be inserted with given key-value array
     *    BUT with special attribute keys:
     *    - label - will be used as label
     *    - icon  - will be added as <i class="[icon value]"></i> to the label
     * 
     * @author Axel
     * 
     * 2024-07-04  <axel.hahn@unibe.ch>  added type declarations; update php docs
     * 2024-08-26  <axel.hahn@unibe.ch>  remove unneeded methods; simplify icon methods; update phpdocs
     */
    class htmlelements
    {
    
        /**
         * Extracted label from array with attributes
         * @var string
         */
        var $_sLabel = '';
    
        /**
         * Array of attributes for a html tag
         * @var array
         */
        var $_aAttributes = [];
    
    
        // ----------------------------------------------------------------------
        // CONSTRUCTOR
        // ----------------------------------------------------------------------
    
        public function __construct()
        {
            // nothiung here
        }
    
        // ----------------------------------------------------------------------
        // 
        // PRIVATE FUNCTIONS 
        // 
        // ----------------------------------------------------------------------
    
    
        /**
         * generate html attibutes with all internal attributes key -> values
         * to be added in opening tag
         * @return string
         */
        protected function _addAttributes(): string
        {
            $sReturn = '';
            foreach ($this->_aAttributes as $sAttr => $sValue) {
                if (is_array($sValue)) {
                    echo "ERROR: an html tag was defined with array in attribute [$sAttr]:<br><pre>" . print_r($this->_aAttributes, 1) . "</pre>";
                }
                $sReturn .= " $sAttr=\"$sValue\"";
            }
            return $sReturn;
        }
    
    
        /**
         * Internal helper: fetch all attributes from key-value hash; 
         * Specialties here:
         * - label will be extracted from key 'label' 
         * - and optional existing key 'icon' will be added at beginning of a label
         * 
         * @param array $aAttributes
         * @return boolean
         */
        protected function _setAttributes(array $aAttributes): bool
        {
            $this->_sLabel = '';
            if (isset($aAttributes['icon']) && $aAttributes['icon']) {
                $this->_sLabel .= $this->getIcon($aAttributes['icon']);
                unset($aAttributes['icon']);
            }
            if (isset($aAttributes['label']) && $aAttributes['label']) {
                $this->_sLabel .= $aAttributes['label'];
                unset($aAttributes['label']);
            }
            $this->_aAttributes = $aAttributes;
            return true;
        }
    
        // ----------------------------------------------------------------------
        // 
        // PUBLIC FUNCTIONS
        // HTML GENERIC
        // 
        // ----------------------------------------------------------------------
    
        /**
         * Generic function to get html code for a single tag 
         * 
         * @param string   $sTag          tag name
         * @param array    $aAttributes   array with attributes (optional including 'icon' and 'label')
         * @param boolean  $bCloseTag     optional: set false if tag has no closing tag (= ending with "/>")
         * @return string html code
         */
        public function getTag(string $sTag, array $aAttributes, bool $bCloseTag = true): string
        {
            $sTpl = $bCloseTag ? "<$sTag%s>%s</$sTag>" : "<$sTag %s/>%s";
            $this->_setAttributes($aAttributes);
            return sprintf($sTpl, $this->_addAttributes(), $this->_sLabel);
        }
    
        // ----------------------------------------------------------------------
        // 
        // PUBLIC FUNCTIONS
        // SIMPLE HTML ELEMENTS
        // 
        // ----------------------------------------------------------------------
    
        /**
         * Helper detect prefix of a string add prefix of a framework
         * i.e. value "fa-close" detects font awesome and adds "fa " as prefix
         * 
         * @param string $sIconclass
         * @return string HTML code
         */
        public function getIcon(string $sIconclass = ''): string
        {
            if (!$sIconclass) {
                return '';
            }
    
            // do not use this .. it overrides internal attribute vars
            // return $this->getTag('i', ['class'=>$sIconclass]);
    
            return "<i class=\"$sIconclass\"></i>&nbsp;&nbsp;";
        }
    
    }