This forum has moved to a new location and is in read-only mode. Please visit talk.octobercms.com to access the new location.
Hello, I'm extending plugin
I have some fields dropdown type
In the backend everything works correct
But in frontend, I get number
My code:
public function boot()
{
...
RealtiesControllers::extendFormFields(function ($form, $model, $context) {
if (!$model instanceof RealtyModel) {
return;
}
$form->addTabFields([
'bathroom' => [
'label' => 'Bathroom',
'tab' => 'Standart Property',
'type' => 'dropdown',
'span' => 'storm',
'cssClass' => 'col-xs-4',
'options' => array('shared', 'separate'),
],
...
I found some solution:
public function getSampleAttribute()
{
$value = array_get($this->attributes, 'sample');
return array_get($this->getSampleOptions(), $value);
}
but how it can be applied to extending plugin ??? Thank you in advance.
Hi mjauvin,
I have dropdown fields 'bathroom'
It has options: 'shared' and 'separate'
In the backend I get correct dropdown with two strings: 'shared' and 'separate'
But in the frontend with {{item.status}}
I get Number: 0 or 1 or 2 not String
I have original model Realty and my extended AddProperties
In my AddProperties I add some fields in function boot()
One of them is Dropdown type
public function boot()
{
...
RealtiesControllers::extendFormFields(function ($form, $model, $context) {
if (!$model instanceof RealtyModel) {
return;
}
$form->addTabFields([
'bathroom' => [
'label' => 'Bathroom',
'tab' => 'Standart Property',
'type' => 'dropdown',
'span' => 'storm',
'cssClass' => 'col-xs-4',
'options' => array('shared', 'separate'),
],
...
That's all what I have now
I find a solution, but it breaks extending way
I delete options from Controllers
public function boot()
{
...
RealtiesControllers::extendFormFields(function ($form, $model, $context) {
if (!$model instanceof RealtyModel) {
return;
}
$form->addTabFields([
'bathroom' => [
'label' => 'Bathroom',
'tab' => 'Standart Property',
'type' => 'dropdown',
'span' => 'storm',
'cssClass' => 'col-xs-4',
],
...
Add function directly to Realty model
for declaring options
public function getBathroomOptions() {
return [
'shared', 'separate'];
}
and add function for receiving attributes
public function getBathroomAttribute() {
$value = array_get($this->attributes, 'bathroom');
return array_get($this->getBathroomOptions(), $value);
}
That's works but I broke general extending principales How I can solve this in extending model ??
use addDynamicMethod()
when extending the controller.
See "Dynamically creating methods" under here:
https://octobercms.com/docs/services/behaviors#constructor-extension
Unfortunately I have a failure
First function 'getBuildingOprions' woks fine and I receive dropdown in backend
But second 'getBuildingAttribute' raise an error
"Undefined property: Eduard\AddProperties\Plugin::$attributes" on line 110 of /Applications/MAMP/htdocs/realtor_october/plugins/eduard/addproperties/Plugin.php
This code works perfect directly in parent model
public function boot()
{
RealtyModel::extend(function($model){
$model->addDynamicMethod('getBuildingOptions', function() use ($model){
return ['кирпичный', 'монолит', 'панельный', 'кирпич - монолит'];
});
$model->addDynamicMethod('getBuildingAttribute', function() use ($model){
$value = array_get($this->attributes, 'building');
return array_get($this->getBuildingOptions(), $value);
});
});
You could try creating a global
$BuildingOptions = ['shared', 'separate'];
Then set
$form->addTabFields([
'bathroom' => [
'label' => 'Bathroom',
'tab' => 'Standart Property',
'type' => 'dropdown',
'span' => 'storm',
'cssClass' => 'col-xs-4',
'options' => $BuildingOptions,
],
And finally, create a function akin to
public function getBathroomAttribute($id) {
return $BuildingOptions[$id];
}
1-9 of 9