Skip to content

Instantly share code, notes, and snippets.

@zuxbrt
Last active November 6, 2020 08:13
Show Gist options
  • Save zuxbrt/b378ee67de20671f47a47748229a9bea to your computer and use it in GitHub Desktop.
Save zuxbrt/b378ee67de20671f47a47748229a9bea to your computer and use it in GitHub Desktop.
Laravel blade partial for checkbox group with inputs.
@foreach ($items as $item)
<div class="form-group radio-margin">
<div class="radio col-md-12">
<input id="{{$item['id']}}"
name="{{$item['name']}}"
value="{{$item['value']}}"
@if(isset($item['checked']))
@if($item['checked'])
checked
@endif
@endif
type="checkbox"
required=""
@if( old(substr($item['name'], 0, -2))) @if(in_array($item['value'], old(substr($item['name'], 0, -2)))) checked @endif @endif
onchange='toggleTextArea("{{$item["id"]}}", "{{$item["name"]}}")'>
<label for="{{$item['id']}}">{{$item['label']}}</label>
@if($item['has_text'])
<input type="text"
name="{{$item['text_name']}}"
id="{{$item['text_name']}}"
@if(isset($item['text_value']))
@if($item['text_value'] !== null)
value="{{$item['text_value']}}"
@endif
@endif
@if(old($item['text_name']))
value="{{old($item['text_name'])}}"
@endif
class="form-control
@if(isset($item['checked']))
@if(!$item['checked'])
hidden
@endif
@else
@if(old($item['text_name']))
@else
hidden
@endif
@endif">
@endif
</div>
</div>
@endforeach
<script type="application/javascript">
function toggleTextArea(id, name){
if(id && name){
var namelist = document.getElementsByName(name);
namelist.forEach(element => {
if(element.checked){
let textinput = document.getElementById(element.id + 'text');
if(textinput){
textinput.classList.remove('hidden');
}
} else {
let textinput = document.getElementById(element.id + 'text');
if(textinput){
textinput.classList.add('hidden');
}
}
});
}
}
</script>
<!-- note:
service is actually a laravel eloquent model instance,
and methods isChecked & getTextInputValue are methods
defined in the model, which are used to retrieve data from database
@extends('layouts.app.services')
@section('content')
<form method="POST" action="{{ route("add-car")}}" id="form" novalidate="novalidate">
@csrf
<div class="col-md-6">
<div class="form-group m-b-40">
<label><b>Choose a car:</label>
</div>
@include('partials.radioinputgroup',
[
'items' => [
[
[
'id' => 'vehicle1',
'name' => 'vehicle',
'value' => 'Ferrari',
'label' => 'Ferrari',
'text_name' => '',
'has_text' => false,
'checked' => $service->isChecked('vehicle', 'Ferrari')
],
[
'id' => 'vehicle2',
'name' => 'vehicle',
'value' => 'Porsche',
'label' => 'Porsche',
'text_name' => '',
'has_text' => false,
'checked' => $service->isChecked('vehicle', 'Porsche')
],
[
'id' => 'vehicle3',
'name' => 'vehicle',
'value' => 'Bugatti',
'label' => 'Bugatti',
'text_name' => '',
'has_text' => false,
'checked' => $service->isChecked('vehicle', 'Bugatti')
],
[
'id' => 'vehicle4',
'name' => 'vehicle',
'value' => 'Opel',
'label' => 'Opel',
'text_name' => '',
'has_text' => false,
'checked' => $service->isChecked('vehicle', 'Opel')
],
[
'id' => 'vehicle5',
'name' => 'vehicle',
'value' => 'Other',
'label' => 'Other',
'text_name' => 'othervehicletext',
'has_text' => true,
'checked' => $service->isChecked('vehicle', 'Other'),
'text_value' => $service->getTextInputValue('vehicle', 'Other')
],
]
])
</div>
</form>
@endsection
@extends('layouts.app.services')
@section('content')
<form method="POST" action="{{ route("add-car")}}" id="form" novalidate="novalidate">
@csrf
<div class="col-md-6">
<div class="form-group m-b-40">
<label><b>Choose a car:</label>
</div>
@include('partials.radioinputgroup',
[
'items' =>
[
['id' => 'vehicle1', 'name' => 'vehicle', 'value' => 'Ferrari', 'label' => 'Ferrari', 'text_name' => '', 'has_text' => false],
['id' => 'vehicle2', 'name' => 'vehicle', 'value' => 'Porsche', 'label' => 'Porsche', 'text_name' => '', 'has_text' => false],
['id' => 'vehicle3', 'name' => 'vehicle', 'value' => 'Bugatti', 'label' => 'Bugatti', 'text_name' => '', 'has_text' => false],
['id' => 'vehicle4', 'name' => 'vehicle', 'value' => 'Opel', 'label' => 'Opel', 'text_name' => '', 'has_text' => false],
['id' => 'vehicle5', 'name' => 'vehicle', 'value' => 'Other', 'label' => 'Other', 'text_name' => 'othervehicletext', 'has_text' => true]
]
])
</div>
</form>
@endsection
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class Service extends Model
{
protected $table = 'vehicles';
protected $fillable = [
'id',
'vehicle',
'other_vehicle_text',
];
/**
* Check is field checked in partial for radioinputgroup.
* @param string $field_name
* @param string $field_value
*
* @return bool
*/
public function isChecked(string $field_name, string $field_value): bool
{
switch ($field_name) {
case 'vehicle':
if($field_value === $this->vehicle){
return true;
}
return false;
break;
}
/**
* Get input text value for checkboxinputgroup partial.
* @param string $text_field_name
* @param string $field_checked_value
*
*/
public function getTextInputValue(string $text_field_name, string $field_checked_value)
{
// if checked field value is same as the input value, get text from it
// else, return null
switch ($text_field_name) {
case 'vehicle':
if($field_checked_value == $this->other_vehicle_text){
return $this->other_vehicle_text;
}
return '';
break;
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment