Mniej 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;
}
Plik do pobrania
Interfejs ICustomView
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.