Mostrando entradas con la etiqueta Formularios. Mostrar todas las entradas
Mostrando entradas con la etiqueta Formularios. Mostrar todas las entradas

CkEditor (texto enriquecido) en una view

Añadir texto enriquecido en una view:
@section('js')
...
<script src="https://cdn.ckeditor.com/ckeditor5/25.0.0/classic/ckeditor.js">

<script>
ClassicEditor
.create( document.querySelector('#description'))
.catch( error => {
console.error( error );
} );
@section('js')

LaravelCollective: Forms ejemplos

CREATE:
{!! Form::open(array('route' => 'productos.store')) !!}
{{ csrf_field() }}
<p>
{!! Form::label('nombre_producto', 'Nombre producto:') !!}
{!! Form::text('nombre_producto', null, array('placeholder' => 'Nombre del producto','class' => 'form-control')) !!}
</p>
<p>
{{ Form::submit('Modificar producto', array('type' => 'submit', 'class' => 'btn btn-default btn-sm', 'onclick' => 'return checkFormProd()')) }}
</p>
{!! Form::close() !!}

EDIT:
{!! Form::model($producto, ['method' => 'PATCH','route' => ['productos.update', encrypt($producto->id)], 'files' => true]) !!}
{{ csrf_field() }}
<p>
{!! Form::label('nombre_producto', 'Nombre producto:') !!}
{!! Form::text('nombre_producto', null, array('placeholder' => 'Nombre producto','class' => 'form-control')) !!}
</p>
<p>
{{ Form::submit('Modificar producto', array('type' => 'submit', 'class' => 'btn btn-default btn-sm', 'onclick' => 'return checkFormProd()')) }}
</p>
{!! Form::close() !!}

DELETE
{!! Form::open(['method' => 'DELETE','route' => ['productos.destroy', encrypt($producto->id)]]) !!}
    {{ csrf_field() }}
    <p>{{ Form::submit('Borrar producto', array('type' => 'submit', 'class' => 'btn btn-default btn-sm')) }}</p>
{!! Form::close() !!}

PD: Aunque la forma más correcta de hacer el delete es mejor mandarlo con un onclick a un JS para así poder hacer un confirm.
COMBO:
En el controller tenemos por ejemplo: $colors = [
'red' => 'Rojo',
'yellow' => 'Amarillo',
'green' => 'Verde'
];
Y se lo pasamos a la view donde el combo se genera:
{!! Form::label('color', 'Color:') !!}
{!! Form::select('color', $colors, null, ['class' => 'form-control']) !!}

Una de las mejores cosas de LaravelCollective es que no hay que indicarle qué elemento está selected en el combo pues a partir del valor que tenga en la BD ya lo deja seleccionado por tanto se usa exactamente lo mismo para la view de create que la de edit.

Por tanto en ambas views se puede hacer un include como por ejemplo:
@include('admin.categories.partials.form')
Para rellenar un combo con el valor de otra tabla en el controller no se puede usar el método all() sino pluck:
$categories = Category::pluck('name', 'id');

Y luego en la view:
{!! Form::label('category_id', 'Categoría:') !!}
{!! Form::select('category_id', $categories, null, ['class' => 'form-control']) !!}

CHECKBOX: @foreach ($tags as $tag)
<label class="mr-2">
{!! Form::checkbox('tags[]', $tag->id, null) !!}
{{ $tag->name }}
</label>
@endforeach

RADIOS:
<label>
{!! Form::radio('status', 1, true) !!}
Borrador
</label>
<label>
{!! Form::radio('status', 2) !!}
Publicado
</label>

TEXTAREA: {!! Form::label('extract', 'Extracto:') !!}
{!! Form::textarea('extract', null, ['class' => 'form-control']) !!}

CAMPO OCULTO: {!! Form::hidden('user_id', auth()->user()->id) !!}
FILE:
{!! Form::file('file', ['class' => 'form-control-file', 'accept' => 'image/*']) !!}

Form: Diferentes componentes

Ejemplos elementos formularios:
{!! Form::model($pelYoutube, ['method' => 'PATCH','route' => ['youtube.update', $pelYoutube->id], 'files' => true]) !!}

{!! Form::text('nom_pel_youtube', null, array('placeholder' => 'Nombre','class' => 'form-control')) !!}

{{ Form::button('Modificar Película YouTube', array('type' => 'submit', 'class' => 'btn btn-default btn-sm', 'onclick' => 'return checkFormCineasta()')) }}

{{ Form::file('nomFoto', $attributes = array('enctype' => 'multipart/form-data')) }}

Para crearte el combo a partir de la tabla que mandas desde el controller:
public function create() {
        $peliculas = Youtube::orderBy('nom_pel_youtube', 'asc')->get()->toArray();
        $cineastas = artYoutube::orderBy('nom_art_youtube', 'asc')->get()->toArray();
        return view('garci/create', compact('peliculas', 'cineastas'));
}

Y luego en la vista:
$arrPeliculas = array();
foreach ($peliculas as $item) {
    $arrPeliculas[$item["id"]] = $item["nom_pel_youtube"];
}
$arrPeliculas[0] = ""; // por si no selecciona ninguno

{{ Form::select('id_pel_youtube', $arrPeliculas, $arrHistPelYoutube[0]->id_pel_youtube) }}

Formularios: Combos

En el controller:
$peliculas = Youtube::orderBy('nom_pel_youtube', 'asc')->get()->toArray();
$cineastas = artYoutube::orderBy('nom_art_youtube', 'asc')->get()->toArray();
return view('garci/create', compact('peliculas', 'cineastas'));

En la vista:
<?php
$arrPeliculas = array();
foreach ($peliculas as $item) {
    $arrPeliculas[$item["id"]] = $item["nom_pel_youtube"];
}
$arrPeliculas[0] = ""; // por si no selecciona ninguno

$arrCineastas = array();
foreach ($cineastas as $item) {
    $arrCineastas[$item["id"]] = $item["nom_art_youtube"];
}
$arrCineastas[0] = ""; // por si no selecciona ninguno
?>
<div class="form-group">
   <strong>Película:</strong>
   {{ Form::select('id_pelicula', $arrPeliculas, "") }}
</div>
<div class="form-group">
   <strong>Director:</strong>
   {{ Form::select('id_director', $arrCineastas, "") }}
</div>

Si en una modificación para que quede seleccionado el item del combo:
{{ Form::select('id_director', $arrCineasta, $pelicula->id_director) }}

Formularios: POST CSRF

{!! Form::open(array('route' => 'peliculas.store', 'files'=>true)) !!}
        {{ csrf_field() }}
...
{!! Form::close() !!}

Formularios

Formularios:
composer require "laravelcollective/html":"^5.3.0"

En config/app:
  En provider añadir:
Collective\Html\HtmlServiceProvider::class,

  En Alias:
'Form' => Collective\Html\FormFacade::class,
'Html' => Collective\Html\HtmlFacade::class