How to create a widget system in Codeigniter

后端 未结 2 855
谎友^
谎友^ 2021-02-02 17:00

I am creating a custom CMS in Codeigniter and I\'d like to have a widget system similar to what is used in Wordpress.

For example, I\'d like to have a widget that shows

2条回答
  •  孤街浪徒
    2021-02-02 18:01

    Here's Widget library from Wiredesignz

    Read more information

    /**
     * Widget Plugin 
     * 
     * Install this file as application/plugins/widget_pi.php
     * 
     * @version:     0.21
     * $copyright     Copyright (c) Wiredesignz 2009-09-07
     * 
     * Permission is hereby granted, free of charge, to any person obtaining a copy
     * of this software and associated documentation files (the "Software"), to deal
     * in the Software without restriction, including without limitation the rights
     * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
     * copies of the Software, and to permit persons to whom the Software is
     * furnished to do so, subject to the following conditions:
     * 
     * The above copyright notice and this permission notice shall be included in
     * all copies or substantial portions of the Software.
     * 
     * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
     * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
     * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
     * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
     * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
     * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
     * THE SOFTWARE.
     */
    class Widget
    {
        public $module_path;
    
        function run($file) {        
            $args = func_get_args();
    
            $module = '';
    
            /* is module in filename? */
            if (($pos = strrpos($file, '/')) !== FALSE) {
                $module = substr($file, 0, $pos);
                $file = substr($file, $pos + 1);
            }
    
            list($path, $file) = Modules::find($file, $module, 'widgets/');
    
            if ($path === FALSE) {
                $path = APPPATH.'widgets/';
            }
    
            Modules::load_file($file, $path);
    
            $file = ucfirst($file);
            $widget = new $file();
    
            $widget->module_path = $path;
    
            return call_user_func_array(array($widget, 'run'), array_slice($args, 1));    
        }
    
        function render($view, $data = array()) {
            extract($data);
            include $this->module_path.'views/'.$view.EXT;
        }
    
        function load($object) {
            $this->$object = load_class(ucfirst($object));
        }
    
        function __get($var) {
            global $CI;
            return $CI->$var;
        }
    } 
    

    Example

    // application/widgets/Hello_world.php
    class Hello_world extends Widget
    {
        function run() {
            $this->render('hello_world');
        }
    } 
    

    In your view call the static “run” method on the widget class:

    widget::run('hello_world');
    

提交回复
热议问题