2010-08-04 309 views
50

me gusta el fullcalendar JQuery-Plugin. En este momento estoy buscando una solución para mostrar más información en el evento. Por ejemplo en el DayView que ver un evento 6:00-10:00. Ahora quiero mostrar una descripción adicional en este evento (no solo la hora y el título).mostrar más texto en fullcalendar

Respuesta

31

Yo personalmente uso un texto de ayuda para visualizar información adicional, así que cuando alguien se cierne sobre el evento que se puede ver una descripción más largos. En este ejemplo se utiliza qTip, pero cualquier aplicación sobre herramientas funcionaría.

$(document).ready(function() { 
    var date = new Date(); 
    var d = date.getDate(); 
    var m = date.getMonth(); 
    var y = date.getFullYear(); 
    $('#calendar').fullCalendar({ 
     header: { 
      left: 'prev, next today', 
      center: 'title', 
      right: 'month, basicWeek, basicDay' 
     }, 
     //events: "Calendar.asmx/EventList", 
     //defaultView: 'dayView', 
     events: [ 
     { 
      title: 'All Day Event', 
      start: new Date(y, m, 1), 
      description: 'long description', 
      id: 1 
     }, 
     { 
      title: 'Long Event', 
      start: new Date(y, m, d - 5), 
      end: new Date(y, m, 1), 
      description: 'long description3', 
      id: 2 
     }], 
     eventRender: function(event, element) { 
      element.qtip({ 
       content: event.description + '<br />' + event.start, 
       style: { 
        background: 'black', 
        color: '#FFFFFF' 
       }, 
       position: { 
        corner: { 
         target: 'center', 
         tooltip: 'bottomMiddle' 
        } 
       } 
      }); 
     } 
    }); 
}); 
+0

Hola quiero saber una cosa en su totalidad calendario podemos mostrar el título algo así como https://www.screencast.com/t/iOSPV822VD8Y este tipo de cosas podemos hacerlo. –

6

Con la modificación de una sola línea que podría alterar la secuencia de comandos fullcalendar.js para permitir un salto de línea y poner la información múltiple en la misma línea.

En FullCalendar.js sobre la función ~ 3922 hallazgo htmlEscape (s) línea y añadir .replace (/ br < \ s? /? >/g, '
') al final de la misma.

function htmlEscape(s) { 
    return s.replace(/&/g, '&amp;') 
    .replace(/</g, '&lt;') 
    .replace(/>/g, '&gt;') 
    .replace(/'/g, '&#039;') 
    .replace(/"/g, '&quot;') 
    .replace(/\n/g, '<br />') 
    .replace(/&lt;br\s?\/?&gt;/g, '<br />'); 
} 

Esto le permitirá tener varias líneas para el título, separando la información. Ejemplo sustituir el event.title con título: 'Todo el día' + '< br/>' + 'Otros Descripción'

+0

esto es genial, creo que es una buena solución para mí. Gracias Jake – chichi

+0

@ La respuesta de Eureka es mucho más general que esta y no le causará problemas para tratar de mantener sus cambios en fullcalendar.js sincronizados con las nuevas funciones y correcciones de errores publicadas después de realizar el cambio. – Tom

+1

Estoy de acuerdo en que no prefiero modificar la fuente, pero a veces es una solución más limpia y fullcalendar no es exactamente un proyecto que se mueve rápidamente. – Jake1164

108

Este código puede ayudarle a:

$(document).ready(function() { 
    $('#calendar').fullCalendar({ 
     events: 
      [ 
       { 
        id: 1, 
        title: First Event', 
        start: ......., 
        end: ....., 
        description: 'first description' 
       }, 
       { 
        id: 2, 
        title: 'Second Event', 
        start: ......., 
        end: ....., 
        description: 'second description' 
       } 
      ], 
     eventRender: function(event, element) { 
      element.find('.fc-title').append("<br/>" + event.description); 
     } 
    }); 
} 
+1

Esta es una solución increíble. Muy flexible y dinámico – Catfish

+6

agregando a eso, en lugar de 'append' podrías usar' after' si quieres crear un nuevo elemento fuera de ''. También he agregado una declaración condicional por lo que no obtengo ninguna salida * No definida *: 'if (event.description) {element.find ('. Fc-event-title'). After (" "event.description +" "); } ' – pax

+5

Tenga en cuenta que el nombre de clase ha sido cambiado por fullCalendar y entonces en vez de' .find ('. Fc-event-title') 'use' .find ('.fc-title') 'ahora! – Michbeckable

1

Bueno he encontrado una solución más simple para mí:

he cambiado fullcalendar.css

y añadió lo siguiente:

float: left; 
clear: none; 
margin-right: 10px; 

El resultado es:

.fc-event-time, 
.fc-event-title { 
    padding: 0 1px; 
    float: left; 
    clear: none; 
    margin-right: 10px; 
} 

ahora sólo envuelve cuando se necesita.

4

Aquí está mi código para emergente usando qTip2 y eventMouseover:

$(document).ready(function() { 
    // Setup FullCalendar 
    // Setup FullCalendar 
    (function() { 
     var date = new Date(); 
     var d = date.getDate(); 
     var m = date.getMonth(); 
     var y = date.getFullYear(); 
     var day=date.toLocaleDateString(); 

     var tooltip = $('<div/>').qtip({ 
      id: 'fullcalendar', 
      prerender: true, 
      content: { 
       text: ' ', 
       title: { 
        button: true 
       } 
      }, 
      position: { 
       my: 'bottom center', 
       at: 'top center', 
       target: 'mouse', 
       viewport: $('#fullcalendar'), 
       adjust: { 
        mouse: false, 
        scroll: false 
       } 
      }, 
      show: false, 
      hide: false, 
      style: 'qtip-light' 
     }).qtip('api'); 

     $('#fullcalendar').fullCalendar({ 
      editable: true, 
      disableDragging: true, 
      height: 600, 
      header: { 
       left: 'title', 
       center: '', 
       right: 'today prev,next' 
      }, 

      dayClick: function() { tooltip.hide() }, 
      eventResizeStart: function() { tooltip.hide() }, 
      eventDragStart: function() { tooltip.hide() }, 
      viewDisplay: function() { tooltip.hide() }, 
      events: [ 
       { 
        title: 'All Day Event', 
        start: new Date(2014, 3, 1) 
       }, 
       { 
        title: 'Long Event', 
        start: new Date(y, m, d-5), 
        end: new Date(y, m, d-2) 
       }, 
       { 
        id: 999, 
        title: 'Repeating Event', 
        start: new Date(y, m, d+4, 16, 0), 
        allDay: false 
       }, 
       { 
        title: 'Meeting', 
        start: new Date(y, m, d, 10, 30), 
        allDay: false 
       }, 
       { 
        title: 'Spring Membership Conference', 
        start: new Date(y, m, d+6, 7,0), 
        end: new Date(y, m, d+6, 13,0), 
        allDay: false, 
        description:'save the date! Join us for our Annual Membership Conference. Breakfast will be served beginning at 7:30 a.m. Featuring The EFEC Belief System & Our Pledge lunch' 
       }, 
       { 
        title: 'Birthday Party', 
        start: new Date(y, m, d+1, 19, 0), 
        end: new Date(y, m, d+1, 22, 30), 
        allDay: false 
       } 
      ], 
      eventMouseover : function(data, event, view) { 
       var content = 
       '<p>'+data.description +'<p>'+ 
       '<h3>'+data.title+'</h3>' + 
        '<p><b>Start:</b> '+data.start+'<br />' + 
        (data.end && '<p><b>End:</b> '+data.end+'</p>' || ''); 

       tooltip.set({ 
        'content.text': content 
       }) 
       .reposition(event).show(event); 
      }, 
     }); 
    }()); 
}); 
1

Por alguna razón, tengo que usar

element.find('.fc-event-inner').empty(); 

a hacer que funcione, que supongo que estoy en la vista del día.

2

como una posible solución: añadir algo más de contenido extra para el título. sobrescribir este estilo css:

.fc-day-grid-event .fc-content { 
    white-space: normal; 
} 
+0

Esto funcionó para mí. Es 2017 ahora :). – Bart

0

Yo recomendaría el uso de la devolución de llamada eventAfterRender en lugar de eventRender. De hecho si se utiliza eventRender que pueda poner en peligro la correcta visualización de los eventos, en coffeescript, algo así como:

$("#calendar").fullCalendar 
    eventAfterRender: (event, element) -> 
     element.find('.fc-title').after("<span>"+event.description+"</span>") 
+0

niños hoy en día con su coffeescript/grumble – a20

+1

Para todos los 'niños' que usan coffeescript. Asegúrate de poner 'return' al final del' eventRender'; de lo contrario, romperá la parte completa del render. – undefinedman

Cuestiones relacionadas