Formulario para actualizar información básica de curso
Comprar curso

41. Formulario para actualizar información básica de curso


5 comentarios

Inicia sesión para comentar

Comentarios:

  • Jose Alan Romero

    Jose Alan Romero hace 4 semanas

    Hola victor no me reponde el x-slot

    • Victor Arana Flores hace 4 semanas

      Hola Jose, cuando hagas este tipo de preguntas, trata de dejar fragmentos de tu codigo. 

      Solo fragmentos, la parte que esta fallando, para asi poder ayudarte.

    • Jose Alan Romero hace 4 semanas

  • Jheyner David Ibagon

    Jheyner David Ibagon hace 7 meses

    Hola, para los que quieras seguir trabajando con alpine.js pueden realizar la funcion del slug, ckeditor y el cambio de imagen de la siguiente manera:

    Slug

    <div class="container py-8 grid grid-cols-5"
        x-data='course'>

    ….

    {!! Form::text('title', null, ['class' => 'form-input block w-full mt-1' . ($errors->has('title') ? ' border-red-600' : ''), 'placeholder' => 'Ingrese el nombre del curso', 'x-ref' => 'title', '@keyup' => 'slugChange']) !!}
     {!! Form::text('slug', null, ['readonly' => 'readonly', 'class' => 'form-input block w-full mt-1' . ($errors->has('slug') ? ' border-red-600' : ''), 'x-ref' => 'slug']) !!}

    JS:

    document.addEventListener('alpine:init', () => {
                    Alpine.data('course', () => ({
                            slugChange() {
                                this.$refs.slug.value = this.slugify(this.$refs.title.value);
                                //console.log(this.$refs.title.value)
                            },
                            slugify(str) {
                                var $slug = '';
                                var trimmed = str.trim(str);
                                $slug = trimmed.replace(/[^a-z0-9-]/gi, '-').
                                replace(/-+/g, '-').
                                replace(/^-|-$/g, '');
                                return $slug.toLowerCase();
                            }
                        })
                    );
                });

    2) CKEDITOR

    Instalar dependecias con node (si lo desean pueden dejarlo con el CDN desde la plantilla)

    npm install --save @ckeditor/ckeditor5-build-classic

    Despues de instalarlo de esta forma, copiar lo siguiente en el archivo resource/js/boostrap.js

    // Ckeditor
    import ClassicEditor from '@ckeditor/ckeditor5-build-classic';
    window.ClassicEditor = ClassicEditor;

    en la plantilla

    …..

    {!! Form::textarea('description', null, ['class' => 'form-input block w-full mt-1' . ($errors->has('description') ? ' border-red-600' : ''), 'placeholder' => 'Ingrese la descripcion del curso', 'x-ref' => 'description']) !!}

    JS

    document.addEventListener('alpine:init', () => {
    Alpine.data('course', () => ({
    // Ckeditor
    init() {
        ClassicEditor
        .create( this.$refs.description, {
            toolbar: {
                items: [
                    'heading',
                    '|',
                    'bold',
                    'italic',
                    'link',
                    'blockQuote',
                ]
            },
            language: 'es',
            heading: {
                options: [
                    { model: 'paragraph', title: 'Parrafo', class: 'ck-heading_paragraph' },
                    { model: 'heading1', view: 'h1', title: 'Encabezado 1', class: 'ck-heading_heading1' },
                    { model: 'heading2', view: 'h2', title: 'Encabezado 2', class: 'ck-heading_heading2' }
                ]
            }
        })
        .then( editor => {
            //console.log( editor );
        } )
        .catch( error => {
                console.error( error );
        });
    },
    ...

    3) Cambiar imagen

    <div class="grid grid-cols-2 gap-4">
    <figure>
        @isset($course->image)
            <img id="picture" class="w-full h-64 object-cover object-center" src="{{ Storage::url($course->image->url) }}" alt=""
            x-ref="picture">
        @else
            <img id="picture" class="w-full h-64 object-cover object-center" src="https://images.pexels.com/photos/4497761/pexels-photo-4497761.jpeg?auto=compress&cs=tinysrgb&dpr=2&h=650&w=940" alt=""
            x-ref="picture">
        @endisset
    </figure>
    <div>
        <p class="mb-2">Lorem ipsum dolor sit amet consectetur adipisicing elit. Quisquam, voluptatum.</p>
        {!! Form::file('file', ['class' => 'form-input w-full' . ($errors->has('file') ? ' border-red-600' : ''), 'id' => 'file', 'accept' => 'image/*', 'x-ref' => 'file', '@change' => 'loadFile']) !!}
    
    
        @error('file')
            <strong class="text-xs text-red-600">{{ $message }}</strong>
        @enderror
    </div>
    </div>

    JS:

    // Cambiar imagen
                            file: null,
                            imagePreview() {
                                if (this.file) {
                                    let reader = new FileReader();
                                    reader.readAsDataURL(this.file);
                                    reader.onload = e => this.$refs.picture.src = e.target.result;
                                }
                            },
                            // Cargar imagen
                            loadFile() {
                                this.file = this.$refs.file.files[0];
                                this.imagePreview();
                            }

     

  • Gustavo

    Gustavo hace 1 año

    Mi estimado Víctor. Dos cosas:
     

    1.- ¿Cómo se puede usar Alpine con Collective? 
    {!! Form::text('slug', null, ['class' => 'form-input block w-full mt-1 rounded-lg', 'disabled' => 'disabled', 'x-on:keydown' => "{{ Str::slug('title', '-') }}"]) !!}
    Traté de hacer esto comentando tu JavaScript y no funcionó.

     

    2.- ¿En lugar de usar slot con nombres para el JavaScript no se puede usar Stack y push?

     

    Gracias por tu tiempo y paciencia.

    • Victor Arana Flores hace 1 año

      Hola Gustavo, nunca he utilizado Laravel Collective con Alpine, así que por ese lado no podría ayudarte, pero te comparto su documentación, de pasada encuentras algo. https://laravelcollective.com/ 

       

      Con respecto a stack o push, claro, ambos son validas.

      Si sientes que lo vas a necesitar incluir varias veces, pues usa push. Caso contrario puedes usar stack.

    • Gustavo hace 1 año

      Gracias Víctor

  • Fabian Andres Robles Cortes

    Fabian Andres Robles Cortes hace 1 año

    disculpen presento un problema con el botón de actualizar , solo aparece cuando el cursor se posiciona encima de lo contrario no aparece.

     

     


     

    • Victor Arana Flores hace 1 año

      Hola Fabian. Estás colocando un boton de tipo submit, y es probable que la clase lo hayas definido para botones de tipo button. 

      Modifica como has creado la clase btn, y btn-primary, para que también se aplique los estilos a los botones de tipo submit

    • July hace 11 meses

      Hola estimado Victor tengo el mismo problema que Fabian, la respuesta que indico no la entiendo, ya que este tipo de enunciado de botones se a utilizado anteriormente por ejemplo para el botón de creación de roles y funciona sin ningún problema   => {!! Form::submit('Crear Role', ['class'=>'btn btn-primary mt-2']) !!} en views\admin\roles\create.blade.php. Adicionalmente trate de modificar la instrucciòn de la siguiente manera    {!! Form::button('Actualizar información',['class'=>'btn btn-danger','type'=>'submit']) !!} pero sigue presentando el mismo problema, quedo atenta a tú comentario.

    • Satorou96 hace 8 meses

      También no me quedo clara la explicación

    • Antony hace 5 meses

      Tambien tengo el mismo problema ,ademas no me carga los estilos de los imput

       

    • Marco Cordero hace 5 meses

      .btn-primary, input[type=submit].btn-primary { @apply bg-blue-500 text-white; }
      esto ponlo en el archivo css que se creo al inicio del curso llamado buttons.css

      Con eso pude resolver.

  • Camilo Ernesto Agreda Chamorro

    Camilo Ernesto Agreda Chamorro hace 1 año

    saludo ing Victor, en mi caso la escucha del evento change en el elemento file me presentaba el sigueinte error

    Uncaught TypeError: Cannot read properties of null (reading 'addEventListener')

    al inspeccionar el elemento directamente me di cuenta que le faltaba el atributo id

    por tanto lo solucioné agregando la opción al método del elemento file de laravelcollective de la siguiente forma:

     

    {!! Form::file('file', ['id'=>'file','class'=>'form-input w-full']) !!}

     

    gracias