Przejdź do głównej treści

Ready_™ Developer TeamMniej niż 1 minuta

ICustomView

ICustomView - podstawowy interfejs, po którego zaimplementowaniu możemy bezpośrednio z definicji tab-a na sprawie czy zakładki na custom_modules wywołać renderowanie naszego widoku.

Kod interfejsu:
<?php

/**
 * Interface ICustomView
 */
interface ICustomView {

    /**
     * ICustomView constructor.
     *
     * @param string $name
     * @param \Panel $parent
     */
    public function __construct(string $name, ?Panel $parent = NULL);

    /**
     * @param array $params
     */
    public function setParams(array $params): void;

    /**
     * @return string
     */
    public function toHtml(): string;
}

Kroki, by prawidłowo zaimplementować interfejs:

  • Utwórz klasę implementująca interfejs ICustomView
  • Zwróć z metody toHtml() string będący kodem HTML widoku, który chcesz zaprezentować w przeglądarce.
  • W metodzie setParams(array $params): void; otrzymujesz jako parametr wszystkie dostępne parametry z miejsca, z którego wywołujesz klasę.
  • W konstruktorze klasy dostępny jest parametr $name który służy nam do zbudowania wywołania przygotowanej wcześniej metody do asynchronicznego odświeżania widoku. Wywołanie funkcji przypisane jest do atrybutu przykładowej klasy zaimplementowanej i umieszczonej poniżej jako przykład.
<?php

namespace ReadyApp\ExampleApp\View;

use Panel;
use Translator;
use ICustomView;

class ExampleView implements ICustomView {

    private string $name;

    private string $refreshToken = 'return false;';

    public function __construct(string $name, ?Panel $parent = NULL) {
        $this->name = $name;
        $this->refreshToken = 'App.'.$this->name.'asyncRefresh();';
    }

    public function toHtml(): string {
        $html = '<div class="custom-projects gbs sbg b-s-b" style="overflow-y: scroll; height: 100%">  
                    <div class="ready-bootstrap">
                        <div class="row" style="margin-left: 5px; margin-right: 0;">
                                <button class="rbos-btn rbos-btn-secondary no-print" title="'.Translator::translate('Odśwież').'"
                                onclick="'.$this->refreshToken.' return false;">
                            <i style="vertical-align: middle; font-size: 14px; line-height: 30px; margin-right: 3px;"
                               class="eic eic-refresh"></i>'.Translator::translate('Odśwież').'
                        </button>      
                        </div>
                    </div>
                 </div>';
        return $html;
    }

    public function setParams(array $params): void {

    }
}

W przykładzie prezentowany jest widok z przyciskiem, który potrafi odświeżyć sam siebie poprzez wywołanie funkcji asynchronicznej z atrybutu onClick przycisku "odśwież"

Jak umieścić widok na zakładce custom modułu

<?xml version = "1.0"?>
<tabs>
    <tab id="exampleApp" label="Example App" compact_mode="0" >
        <tabs compact_mode="0">
            <tab label="Przykład widoku ICustomView" phpRender="ReadyApp\ExampleApp\View\ExampleView">
            </tab>
        </tabs>
    </tab>
</tabs>

Analogicznie została dodana obsługa na zakładkach spraw poprzez dodanie atrybutu phpRender="{klasa widoku z namespace}" do elementu tab.