I have a dropdownlist with a list of products.
<?= $form->field($product, 'dot_prod_id')->dropDownList($items = Functions::getProducts($company->dot_com_id),['prompt' => 'Select'])?>
The function getProducts():
public static function getProducts($company){
$i=0;
$products = Product::find()->where(['dot_prod_com' => $company])->asArray()->all();
$out=[];
//$out= array_values($products);
for($i=0; $i<sizeof($products); $i++){
$out[$i] = ['id'=>$products[$i]['dot_prod_id'], 'name'=>$products[$i]['dot_name'] ." ". $products[$i]['dot_prod_dots'] . " Dots needed"];
}
return $out;
}
Its returning this html:
<option value="">Select</option>
<optgroup label="0">
<option value="id">1</option>
<option value="name">Sumo de Limão 10 Dots needed</option>
</optgroup>
<optgroup label="1">
<option value="id">2</option>
<option value="name">Sumo de Laranja 10 Dots needed</option>
</optgroup>
<optgroup label="2">
<option value="id">3</option>
<option value="name">Pilhas AA 5 Dots needed</option>
</optgroup>
<optgroup label="3">
<option value="id">4</option>
<option value="name">Pilhas AAA 5 Dots needed</option>
</optgroup>
</select>
And i just want a simple select like this:
<select id="product-dot_prod_id" class="form-control" name="Product[dot_prod_id]" onChange="javascript:getProdID()">
<option value="">Select</option>
<option value="1">Sumo de Limão</option>
<option value="2">Sumo de Laranja</option>
<option value="3">Pilhas AA</option>
<option value="4">Pilhas AAA</option>
</select>
I know the problem is in the getProducts() but i dont know how to put the array in the way. I already tried to use ArrayHelper() but i want to concatenate 2 fields in one just like ['id'=>'dot_prod_id','name'=>'dot_name'." ". 'dot_prod_dots'."....."]
items in dropdown should be Flat array ('id'=>'label').. so:
$out[$products[$i]['dot_prod_id']] = $products[$i]['dot_name'] ." ". $products[$i]['dot_prod_dots'] . " Dots needed"];
in your case you got smth like: [0=>['id'=>123, 'name'=>'asd']]
and more elegant way with ArrayHelper::map and anonymous function as third parameter:
public static function getProducts($company){
return ArrayHelper::map(
Product::find()->where(['dot_prod_com' => $company])->asArray()->all(),
'dot_prod_id',
function($element){
return $element['dot_name'] ." ". $element['dot_prod_dots'] . " Dots needed";
});
}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With