Reputation: 75
I want to print the following code with Laravel/PHP as html code. but it always print value="cancelled">Cancelled
! How I print or store the following html code in php/laravel?
$row = Order::first();
$csrf_token = csrf_token();
echo '
<form action="'.$row->update_url.'" method="post" class="form-inline">
<input type="hidden" name="_method" value="PUT">
<input type="hidden" name="_token" value="'.$csrf_token.'">
<select name="status" id="status" onchange="this.form.submit()" class="form-control">
<option '.$row->status == "pending" ? "selected" : " ".' value="pending">Pending</option>
<option '.$row->status == "confirmed" ? "selected" : " ".' value="confirmed">Confirmed</option>
<option '.$row->status == "shipped" ? "selected" : " ".' value="shipped">Shipped</option>
<option '.$row->status == "delivered" ? "selected" : " ".' value="delivered">Delivered</option>
<option '.$row->status == "returned" ? "selected" : " ".' value="returned">Returned</option>
<option '.$row->status == "cancelled" ? "selected" : " ".' value="cancelled">Cancelled</option>
</select>
</form>';
die();
my main target is adding one column in datatables using yajrabox.
<select name="status" id="status" class="form-control" >
<option value="pending" {{$order->status == 'pending' ? 'selected' : ''}}>Pending</option>
<option value="confirmed" {{$order->status == 'confirmed' ? 'selected' : ''}}>Confirmed</option>
<option value="shipped" {{$order->status == 'shipped' ? 'selected' : ''}}>Shipped</option>
<option value="delivered" {{$order->status == 'delivered' ? 'selected' : ''}}>Delivered</option>
<option value="returned" {{$order->status == 'returned' ? 'selected' : ''}}>Returned</option>
<option value="cancelled" {{$order->status == 'cancelled' ? 'selected' : ''}}>Cancelled</option>
</select>
where my yajra code look like this
return \DataTables::of($data)
->addIndexColumn()
->addColumn('invoiceno', function($row){
return $field= <<<EOT
<a href="$row->full_url" class="badge badge-danger">$row->invoice_no</a>
EOT;
})
->addColumn('orderStatus',function($row){
$csrf_token = csrf_token();
return $field = '
<form action="'.$row->update_url.'" method="post" class="form-inline">
<input type="hidden" name="_method" value="PUT">
<input type="hidden" name="_token" value="'.$csrf_token.'">
<select name="status" id="status" onchange="this.form.submit()" class="form-control">
<option '.$row->status == "pending" ? "selected" : "".' value="pending">Pending</option>
<option '.$row->status == "confirmed" ? "selected" : "".' value="confirmed">Confirmed</option>
<option '.$row->status == "shipped" ? "selected" : "".' value="shipped">Shipped</option>
<option '.$row->status == "delivered" ? "selected" : "".' value="delivered">Delivered</option>
<option '.$row->status == "returned" ? "selected" : "".' value="returned">Returned</option>
<option '.$row->status == "cancelled" ? "selected" : "".' value="cancelled">Cancelled</option>
</select>
</form>';
})
->rawColumns(['invoiceno', 'orderStatus']) })
->make(true);
Upvotes: 0
Views: 335
Reputation: 5099
The .
concatenation operator is of higher precedence than the ternary operator, so your code is not doing what you think it is. Replace lines like this:
<option '.$row->status == "pending" ? "selected" : " ".' value="pending">Pending</option>
with lines like this:
<option ' . ($row->status == "pending" ? "selected" : " ") . ' value="pending">Pending</option>
Specifically, note the parentheses around ($row->status == "pending" ? "selected" : " ")
Upvotes: 1