sruupl / batflat

Lightweight, fast and easy CMS for free. Bootstrap ready. https://batflat.org
MIT License
135 stars 53 forks source link

New Dashboard Ideas #108

Open Dejmienwp opened 3 years ago

Dejmienwp commented 3 years ago

Witam. Mam w planach trochę rozszerzyć działalność naszego Dashboardu. Chciałbym zrobić jak to jest w niektórych cms dodawanie Widgetu. Powiedzmy ze jeśli moduł ma plik "MODULES. $name / widget.php" to wyświetli go w Dashboard automatycznie. Robiłem to ręcznie natomiast jak skasuje moduł to robi się mega awaria. I pomyślałem o czymś takim. Czy to będzie większe grzebanie w całym systemie czy tylko w dashboard/admin.php ? Jak się za to zabrać?

    private function _modulesList()
    {
        $modules = array_column($this->db('modules')->toArray(), 'dir');
        $result = [];

        if ($this->core->getUserInfo('access') != 'all') {
            $modules = array_intersect($modules, explode(',', $this->core->getUserInfo('access')));
        }

        foreach ($modules as $name) {
            $files = [
                'info'  => MODULES.'/'.$name.'/Info.php',
                'admin' => MODULES.'/'.$name.'/Admin.php',
                'widget'  => MODULES.'/'.$name.'/Widget.php',
            ];

            if (file_exists($files['info']) && file_exists($files['admin'])) {
                $details        = $this->core->getModuleInfo($name);
                $features       = $this->core->getModuleNav($name);

                if (empty($features)) {
                    continue;
                }

                if(file_exists($files['widget']) ){
                    $details['widget'] = $this->tpl->draw(MODULES.'/'.$name.'/Widget.html');

                }
                else {
                    continue;
                   }

                $details['url'] = url([ADMIN, $name, array_shift($features)]);

                $result[] = $details;
            }
        }
        return $result;
    }

}

Teraz jak zrobić zeby pobierało informacje z bazy danego modułu :D

Dejmienwp commented 3 years ago

Dobra, trochę się zatrzymałem. Fajnie dodaje pliczek html jeśli go znajdzie. Natomiast stoję na przeszkodzie. Pobierania danych z bazy danego widgetu i możliwości go zapętlania. Może ktoś ma jakiś pomysl.

Dejmienwp commented 3 years ago

Zrobiłem to po oomacku może ktoś będzie miał pomysł jak zrobić to lepiej. Dashboard - Admin.php

    private function _modulesList()
    {
        $modules = array_column($this->db('modules')->toArray(), 'dir');
        $result = [];

        if ($this->core->getUserInfo('access') != 'all') {
            $modules = array_intersect($modules, explode(',', $this->core->getUserInfo('access')));
        }

        foreach ($modules as $name) {
            $files = [
                'info'  => MODULES.'/'.$name.'/Info.php',
                'admin' => MODULES.'/'.$name.'/Admin.php',
                'widget'  => MODULES.'/'.$name.'/Widget.html',
            ];

            if (file_exists($files['info']) && file_exists($files['admin'])) {
                $details        = $this->core->getModuleInfo($name);
                $features       = $this->core->getModuleNav($name);

                if(file_exists($files['widget'])){
                    $Widget         = $this->core->getModuleDashWidget($name);
                }
                else{
                    continue;
                }
                if (empty($features)) {
                    continue;
                }

                $details['widget'] = $this->draw(MODULES.'/'.$name.'/Widget.html', $Widget);
                $details['url'] = url([ADMIN, $name, array_shift($features)]);

                $result[] = $details;
            }
        }
        return $result;
    }

}

Core - Admin.php

    public function getModuleDashWidget($dir)
    {
        if ($this->module->has($dir)) {
            return $this->module->{$dir}->Dashboard_Widget();
        }
        return false;
    }

Aby Widget się dodał musi posiadać plik Widget.html oraz w Admin.php trzeba dopisać.

    public function Dashboard_Widget(){

        $task = $this->core->db('works')->desc('id')->toArray();
        return [$this->draw('index.html', [
            'tasks' => $task
        ])];
    }

to daje nam wywałenie {loop: $task} oraz $task pobieranie tablicy z bazy.

edit Tak wygląda mój Dashboard.html


<article class="row">
    <div class="col-md-12">
        <div class="row">

            {loop: $modules}
            <div class="col-md-4">
                {$value.widget}
            </div>
            {/loop}

        </div>
    </div>

    <div class="col-md-4">

    </div>
</article>