Widget-urile configurabile sunt acele widget-uri care se pot “intoarce pe spate” , unde apare panou de setari per widget+portlet.
Cum se adauga un panel de optiuni pe un widget:
- se adauga o noua proprietate in clasa widget-ului :
public $hasBackside = true;
- se intoarce $hasBackside in getReportID()
return array('id' => $id, 'hasBackside'=>$this->hasBackside,'full_class_name' => get_class() (...) - se intoarce $hasBackside in getContentData(), in $jret:
$jret['hasBackside'] = $this->hasBackside ? 1 : 0;
- se creeaza functia getSettingspanelImage() in clasa widget-ului care randeaza HTML-ul backpanel-ului, si contine si codul de salvare a formei din backpanel; de exemplu:
public function getSettingspanelImage($uid, $widgetId) { $reportId = $this->getReportID(); $model = BriefReportsManager::dspGetModel($reportId,$uid); // [modifiable] adding widget-specific form fields $model->defineAttribute("option_cacId"); $model->addRule(['option_cacId'], 'integer', ['max' => 100000]); $model->setAttributes(BriefReportsManager::getWidgetOptions($widgetId, $uid)); // [/modifiable] BriefReportsManager::dspHandleSave($widgetId,$uid,$model); BriefReportsManager::dspBeginForm($model,$reportId,$uid); // [modifiable] adding widget-specific form elements print Html::label(Yii::t("app", "Please select an ccount to display in this chart")); print "<div class='row border-top-dashed padding-top-20 padding-bottom-20'>"; $comboboxData = CfoAccountUtils::getAccountsForComboboxes(CfoBi::getAccountsScheme()); print Select2::widget([ 'model' => $model, 'theme' => 'material', 'attribute' => 'option_cacId', 'data' => $comboboxData['accounts'], 'options' => ['placeholder' => Yii::t("app", 'Select the account'), 'options' => $comboboxData['accountsDisabled']], 'pluginOptions' => [ 'allowClear' => TRUE , 'escapeMarkup' => new JsExpression("function(m) { return m; }") ] ]); print "</div>"; // [/modifiable] BriefReportsManager::dspEndForm($reportId,$uid); return TRUE; } - In getContentData, se tine seama (si) de intervalul de dates fix, daca acesta a fost selectat; de exemplu:
if(@$parameters['option_useCustomTimeframe']>0){
$dateRange = [$parameters['option_dateStart'],$parameters['option_dateEnd']];
$title = Yii::$app->formatter->asDate(substr($dateRange[0], 0,10)) . " - " . Yii::$app->formatter->asDate(substr($dateRange[1], 0,10));
}else{
$dateRange = UserOption::decodeDateRange(Yii::$app->user->identity->getUserOption($companyId, UserOption::ID_DASHBOARD_DATE_RANGE, TRUE));
$title = "";
}
si mai jos, se afisaza si titlul:
<div style="position:absolute;left:10px;top:10px;z-index:1000;text-align:center;margin-left:auto;margin-right:auto;width:100%;font-style: italic;">' . $title . '</div>
Pentru ca setarile sa fie accesibile si din sectiunea Rapoarte -> Rapoarte management:
- creeam proprietatea
public $customFormElements = [];
2. o folosim in getSettingspanelImage(), ca in widget-ul dat de exemplu
Note:
- In widget-ul tau este suficient sa modifici/adaugi cod doar intre [modifiable] … [/modifiable]. In rest poti copia integral codul.
2. ia ca model widget-ul SinteticAccountEvolution
Categories: CORES (php core codebase), HINTS (tehnice), Tutoriale / Reguli / Best practices, UI/UX |
Leave a Reply
[TOP]