- Deprecated function: Use of "static" in callables is deprecated in Drupal\user\Entity\Role::postLoad() (line 172 of core/modules/user/src/Entity/Role.php).
Drupal\user\Entity\Role::postLoad(Object, Array) (Line: 423)
Drupal\Core\Entity\EntityStorageBase->postLoad(Array) (Line: 353)
Drupal\Core\Entity\EntityStorageBase->loadMultiple(Array) (Line: 16)
Drupal\user\RoleStorage->isPermissionInRoles('access site in maintenance mode', Array) (Line: 112)
Drupal\Core\Session\UserSession->hasPermission('access site in maintenance mode') (Line: 105)
Drupal\Core\Session\AccountProxy->hasPermission('access site in maintenance mode') (Line: 83)
Drupal\redirect\RedirectChecker->canRedirect(Object) (Line: 120)
Drupal\redirect\EventSubscriber\RedirectRequestSubscriber->onKernelRequestCheckRedirect(Object, 'kernel.request', Object)
call_user_func(Array, Object, 'kernel.request', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.request') (Line: 145)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterTags is deprecated in Drupal\Core\Database\Query\Select->addTag() (line 149 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addTag('taxonomy_term_load_multiple') (Line: 696)
Drupal\Core\Entity\Sql\SqlContentEntityStorage->buildQuery(Array) (Line: 422)
Drupal\Core\Entity\Sql\SqlContentEntityStorage->getFromStorage(Array) (Line: 393)
Drupal\Core\Entity\Sql\SqlContentEntityStorage->doLoadMultiple(Array) (Line: 346)
Drupal\Core\Entity\EntityStorageBase->loadMultiple(Array) (Line: 139)
Drupal\Core\Field\Plugin\Field\FieldFormatter\EntityReferenceFormatterBase->prepareView(Array) (Line: 247)
Drupal\Core\Entity\Entity\EntityViewDisplay->buildMultiple(Array) (Line: 340)
Drupal\Core\Entity\EntityViewBuilder->buildComponents(Array, Array, Array, 'full') (Line: 24)
Drupal\node\NodeViewBuilder->buildComponents(Array, Array, Array, 'full') (Line: 282)
Drupal\Core\Entity\EntityViewBuilder->buildMultiple(Array) (Line: 239)
Drupal\Core\Entity\EntityViewBuilder->build(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterMetaData is deprecated in Drupal\Core\Database\Query\Select->addMetaData() (line 178 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addMetaData('entity_type', 'file') (Line: 115)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'ec6069dd-262f-44a0-ac49-10ffa0563110') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('La visualización <strong>As Timeline</strong> nos permite llevar a una línea de tiempo diferentes elementos caracterizados por una fecha de arranque y otra de finalización. La configuración es, además, muy sencilla e intuitiva.
Los datos con que queremos representar son los siguientes:
El campo <em>Employee Id</em> está asociado a una tabla de empleados en la que se incluyen, entre otros datos, el nombre del empleado (campo <em>Full Name</em>) y el departamento al que pertenece (campo <em>Department</em>).
Los campos que controlan la configuración de la visualización son los mostrados en la siguiente imagen:
Tras crear una instancia de la visualización, arrastremos el campo <em>Full Name</em> (nombre del empleado) al campo de la visualización <em>Entity</em>, y los campos <em>Start</em> y <em>End</em> de nuestro modelo de datos a los campos <em>Start Date</em> y <em>End Date</em> de la visualización, respectivamente. La visualización muestra el siguiente aspecto:
Es decir, con un par de clics ya tenemos una representación temporal de las asignaciones a los empleados en cuestión.
Es posible añadir una dimensión adicional que nos permita clasificar nuestros "recursos" (empleados en este ejemplo) utilizando el campo de la visualización <em>Category</em>. Llevemos a este campo el campo <em>Department</em> de nuestra tabla de datos, campo que contiene el departamento al que pertenece cada empleado. Téngase en cuenta que cada empleado pertenece a un único departamento:
Vemos que se ha añadido la "categoría" a las etiquetas de los empleados. Esto es configurable en <em>Formato > Behavior > Stacked</em> (véase siguiente imagen). Por otro lado, al mover el cursor encima de una de las barras horizontales asociadas a un empleado se muestra la información asociada:
Sin embargo, si la "categoría" añadida no es única para cada empleado, el comportamiento de la visualización cambia. Supongamos que nuestro empleados van a trabajar en el proyecto tanto como beta-testers como desarrolladores, y que cada una de las asignaciones (periodos de tiempo) los van a asociar a uno de los dos roles. Activemos la opción <em>Stacked</em> que hemos visto en <em>Formato > Behavior</em> y llevemos al campo <em>Category</em> de la visualización el campo <em>Role</em> de nuestra tabla:
Ahora la visualización está mostrando una fila para cada una de las combinaciones de empleado y role. Si desactivamos la opción <em>Stacked</em>, las filas correspondientes a cada empleado se muestran solapadas:
Podemos llevar al campo <em>Overlay</em> campos (uno o más) que queramos que se muestren sobre las barras. Por ejemplo, si llevamos el identificador del empleado, el resultado es el siguiente:
Estas etiquetas que se muestran son configurables en <em>Formato > Overlay text options</em>. El orden en el que se muestran dentro de una barra, sin embargo, es automático (no coincide con el orden en el que llevamos los campos de nuestro modelo de datos al campo de la visualización)
Las selecciones no tienen un comportamiento especialmente lógico: un clic en uno de los nombres de los empleados (cabeceras de filas) no filtra la tabla de empleados ni el resto de visualizaciones que haya en nuestro informe (de hecho la visualización se reordena de forma un tanto inexplicable al hacer clic en una de estas cabeceras). Pero un clic en una de las barras horizontales sí lo hace. Un segundo clic en la misma barra debería deseleccionar al empleado en cuestión, pero no ocurre así: Hay que hacer clic en alguna de las etiquetas de la leyenda, por ejemplo, para que esto ocurra. Hay ciertas opciones para configurar las selecciones en <em>Formato > Multiselect</em>.
Por otro lado, la selección de uno de los recursos en otra visualización sí va a filtrar el <em>As Timeline</em>.
Una limitación de la visualización tiene que ver con el período siendo mostrado: si incluimos asignaciones de períodos lejanos, se muestran todos, con independencia de la escala que haya que aplicar. Por ejemplo, si una de las asignaciones de los datos con los que estamos trabajando se ha retrasado un año, la visualización muestra el siguiente aspecto:
La opción más conveniente es recurrir a una segmentación temporal adicional.
Otro factor a considerar es que el campo a llevar a <em>End Date</em> no es la última fecha en la que el recurso en cuestión está asignado, sino el primer día en el que ya no lo está. Por ejemplo, si un recurso está asignado solo un día, el 5/7/2019, habría que llevar a <em>Start Date</em> el valor 5/7/2019 y a End Date el valor 6/7/2019. De otra forma no se mostraría en la gráfica.
Aun con algunas limitaciones, se trata de una visualización muy práctica y recomendable.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterTags is deprecated in Drupal\Core\Database\Query\Select->addTag() (line 149 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addTag('entity_query') (Line: 147)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'ec6069dd-262f-44a0-ac49-10ffa0563110') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('La visualización <strong>As Timeline</strong> nos permite llevar a una línea de tiempo diferentes elementos caracterizados por una fecha de arranque y otra de finalización. La configuración es, además, muy sencilla e intuitiva.
Los datos con que queremos representar son los siguientes:
El campo <em>Employee Id</em> está asociado a una tabla de empleados en la que se incluyen, entre otros datos, el nombre del empleado (campo <em>Full Name</em>) y el departamento al que pertenece (campo <em>Department</em>).
Los campos que controlan la configuración de la visualización son los mostrados en la siguiente imagen:
Tras crear una instancia de la visualización, arrastremos el campo <em>Full Name</em> (nombre del empleado) al campo de la visualización <em>Entity</em>, y los campos <em>Start</em> y <em>End</em> de nuestro modelo de datos a los campos <em>Start Date</em> y <em>End Date</em> de la visualización, respectivamente. La visualización muestra el siguiente aspecto:
Es decir, con un par de clics ya tenemos una representación temporal de las asignaciones a los empleados en cuestión.
Es posible añadir una dimensión adicional que nos permita clasificar nuestros "recursos" (empleados en este ejemplo) utilizando el campo de la visualización <em>Category</em>. Llevemos a este campo el campo <em>Department</em> de nuestra tabla de datos, campo que contiene el departamento al que pertenece cada empleado. Téngase en cuenta que cada empleado pertenece a un único departamento:
Vemos que se ha añadido la "categoría" a las etiquetas de los empleados. Esto es configurable en <em>Formato > Behavior > Stacked</em> (véase siguiente imagen). Por otro lado, al mover el cursor encima de una de las barras horizontales asociadas a un empleado se muestra la información asociada:
Sin embargo, si la "categoría" añadida no es única para cada empleado, el comportamiento de la visualización cambia. Supongamos que nuestro empleados van a trabajar en el proyecto tanto como beta-testers como desarrolladores, y que cada una de las asignaciones (periodos de tiempo) los van a asociar a uno de los dos roles. Activemos la opción <em>Stacked</em> que hemos visto en <em>Formato > Behavior</em> y llevemos al campo <em>Category</em> de la visualización el campo <em>Role</em> de nuestra tabla:
Ahora la visualización está mostrando una fila para cada una de las combinaciones de empleado y role. Si desactivamos la opción <em>Stacked</em>, las filas correspondientes a cada empleado se muestran solapadas:
Podemos llevar al campo <em>Overlay</em> campos (uno o más) que queramos que se muestren sobre las barras. Por ejemplo, si llevamos el identificador del empleado, el resultado es el siguiente:
Estas etiquetas que se muestran son configurables en <em>Formato > Overlay text options</em>. El orden en el que se muestran dentro de una barra, sin embargo, es automático (no coincide con el orden en el que llevamos los campos de nuestro modelo de datos al campo de la visualización)
Las selecciones no tienen un comportamiento especialmente lógico: un clic en uno de los nombres de los empleados (cabeceras de filas) no filtra la tabla de empleados ni el resto de visualizaciones que haya en nuestro informe (de hecho la visualización se reordena de forma un tanto inexplicable al hacer clic en una de estas cabeceras). Pero un clic en una de las barras horizontales sí lo hace. Un segundo clic en la misma barra debería deseleccionar al empleado en cuestión, pero no ocurre así: Hay que hacer clic en alguna de las etiquetas de la leyenda, por ejemplo, para que esto ocurra. Hay ciertas opciones para configurar las selecciones en <em>Formato > Multiselect</em>.
Por otro lado, la selección de uno de los recursos en otra visualización sí va a filtrar el <em>As Timeline</em>.
Una limitación de la visualización tiene que ver con el período siendo mostrado: si incluimos asignaciones de períodos lejanos, se muestran todos, con independencia de la escala que haya que aplicar. Por ejemplo, si una de las asignaciones de los datos con los que estamos trabajando se ha retrasado un año, la visualización muestra el siguiente aspecto:
La opción más conveniente es recurrir a una segmentación temporal adicional.
Otro factor a considerar es que el campo a llevar a <em>End Date</em> no es la última fecha en la que el recurso en cuestión está asignado, sino el primer día en el que ya no lo está. Por ejemplo, si un recurso está asignado solo un día, el 5/7/2019, habría que llevar a <em>Start Date</em> el valor 5/7/2019 y a End Date el valor 6/7/2019. De otra forma no se mostraría en la gráfica.
Aun con algunas limitaciones, se trata de una visualización muy práctica y recomendable.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterTags is deprecated in Drupal\Core\Database\Query\Select->addTag() (line 149 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addTag('file_load_multiple') (Line: 696)
Drupal\Core\Entity\Sql\SqlContentEntityStorage->buildQuery(Array) (Line: 422)
Drupal\Core\Entity\Sql\SqlContentEntityStorage->getFromStorage(Array) (Line: 393)
Drupal\Core\Entity\Sql\SqlContentEntityStorage->doLoadMultiple(Array) (Line: 346)
Drupal\Core\Entity\EntityStorageBase->loadMultiple(Array) (Line: 641)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'ec6069dd-262f-44a0-ac49-10ffa0563110') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('La visualización <strong>As Timeline</strong> nos permite llevar a una línea de tiempo diferentes elementos caracterizados por una fecha de arranque y otra de finalización. La configuración es, además, muy sencilla e intuitiva.
Los datos con que queremos representar son los siguientes:
El campo <em>Employee Id</em> está asociado a una tabla de empleados en la que se incluyen, entre otros datos, el nombre del empleado (campo <em>Full Name</em>) y el departamento al que pertenece (campo <em>Department</em>).
Los campos que controlan la configuración de la visualización son los mostrados en la siguiente imagen:
Tras crear una instancia de la visualización, arrastremos el campo <em>Full Name</em> (nombre del empleado) al campo de la visualización <em>Entity</em>, y los campos <em>Start</em> y <em>End</em> de nuestro modelo de datos a los campos <em>Start Date</em> y <em>End Date</em> de la visualización, respectivamente. La visualización muestra el siguiente aspecto:
Es decir, con un par de clics ya tenemos una representación temporal de las asignaciones a los empleados en cuestión.
Es posible añadir una dimensión adicional que nos permita clasificar nuestros "recursos" (empleados en este ejemplo) utilizando el campo de la visualización <em>Category</em>. Llevemos a este campo el campo <em>Department</em> de nuestra tabla de datos, campo que contiene el departamento al que pertenece cada empleado. Téngase en cuenta que cada empleado pertenece a un único departamento:
Vemos que se ha añadido la "categoría" a las etiquetas de los empleados. Esto es configurable en <em>Formato > Behavior > Stacked</em> (véase siguiente imagen). Por otro lado, al mover el cursor encima de una de las barras horizontales asociadas a un empleado se muestra la información asociada:
Sin embargo, si la "categoría" añadida no es única para cada empleado, el comportamiento de la visualización cambia. Supongamos que nuestro empleados van a trabajar en el proyecto tanto como beta-testers como desarrolladores, y que cada una de las asignaciones (periodos de tiempo) los van a asociar a uno de los dos roles. Activemos la opción <em>Stacked</em> que hemos visto en <em>Formato > Behavior</em> y llevemos al campo <em>Category</em> de la visualización el campo <em>Role</em> de nuestra tabla:
Ahora la visualización está mostrando una fila para cada una de las combinaciones de empleado y role. Si desactivamos la opción <em>Stacked</em>, las filas correspondientes a cada empleado se muestran solapadas:
Podemos llevar al campo <em>Overlay</em> campos (uno o más) que queramos que se muestren sobre las barras. Por ejemplo, si llevamos el identificador del empleado, el resultado es el siguiente:
Estas etiquetas que se muestran son configurables en <em>Formato > Overlay text options</em>. El orden en el que se muestran dentro de una barra, sin embargo, es automático (no coincide con el orden en el que llevamos los campos de nuestro modelo de datos al campo de la visualización)
Las selecciones no tienen un comportamiento especialmente lógico: un clic en uno de los nombres de los empleados (cabeceras de filas) no filtra la tabla de empleados ni el resto de visualizaciones que haya en nuestro informe (de hecho la visualización se reordena de forma un tanto inexplicable al hacer clic en una de estas cabeceras). Pero un clic en una de las barras horizontales sí lo hace. Un segundo clic en la misma barra debería deseleccionar al empleado en cuestión, pero no ocurre así: Hay que hacer clic en alguna de las etiquetas de la leyenda, por ejemplo, para que esto ocurra. Hay ciertas opciones para configurar las selecciones en <em>Formato > Multiselect</em>.
Por otro lado, la selección de uno de los recursos en otra visualización sí va a filtrar el <em>As Timeline</em>.
Una limitación de la visualización tiene que ver con el período siendo mostrado: si incluimos asignaciones de períodos lejanos, se muestran todos, con independencia de la escala que haya que aplicar. Por ejemplo, si una de las asignaciones de los datos con los que estamos trabajando se ha retrasado un año, la visualización muestra el siguiente aspecto:
La opción más conveniente es recurrir a una segmentación temporal adicional.
Otro factor a considerar es que el campo a llevar a <em>End Date</em> no es la última fecha en la que el recurso en cuestión está asignado, sino el primer día en el que ya no lo está. Por ejemplo, si un recurso está asignado solo un día, el 5/7/2019, habría que llevar a <em>Start Date</em> el valor 5/7/2019 y a End Date el valor 6/7/2019. De otra forma no se mostraría en la gráfica.
Aun con algunas limitaciones, se trata de una visualización muy práctica y recomendable.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterMetaData is deprecated in Drupal\Core\Database\Query\Select->addMetaData() (line 178 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addMetaData('entity_type', 'file') (Line: 115)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'ec6069dd-262f-44a0-ac49-10ffa0563110') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('La visualización <strong>As Timeline</strong> nos permite llevar a una línea de tiempo diferentes elementos caracterizados por una fecha de arranque y otra de finalización. La configuración es, además, muy sencilla e intuitiva.
Los datos con que queremos representar son los siguientes:
El campo <em>Employee Id</em> está asociado a una tabla de empleados en la que se incluyen, entre otros datos, el nombre del empleado (campo <em>Full Name</em>) y el departamento al que pertenece (campo <em>Department</em>).
Los campos que controlan la configuración de la visualización son los mostrados en la siguiente imagen:
Tras crear una instancia de la visualización, arrastremos el campo <em>Full Name</em> (nombre del empleado) al campo de la visualización <em>Entity</em>, y los campos <em>Start</em> y <em>End</em> de nuestro modelo de datos a los campos <em>Start Date</em> y <em>End Date</em> de la visualización, respectivamente. La visualización muestra el siguiente aspecto:
Es decir, con un par de clics ya tenemos una representación temporal de las asignaciones a los empleados en cuestión.
Es posible añadir una dimensión adicional que nos permita clasificar nuestros "recursos" (empleados en este ejemplo) utilizando el campo de la visualización <em>Category</em>. Llevemos a este campo el campo <em>Department</em> de nuestra tabla de datos, campo que contiene el departamento al que pertenece cada empleado. Téngase en cuenta que cada empleado pertenece a un único departamento:
Vemos que se ha añadido la "categoría" a las etiquetas de los empleados. Esto es configurable en <em>Formato > Behavior > Stacked</em> (véase siguiente imagen). Por otro lado, al mover el cursor encima de una de las barras horizontales asociadas a un empleado se muestra la información asociada:
Sin embargo, si la "categoría" añadida no es única para cada empleado, el comportamiento de la visualización cambia. Supongamos que nuestro empleados van a trabajar en el proyecto tanto como beta-testers como desarrolladores, y que cada una de las asignaciones (periodos de tiempo) los van a asociar a uno de los dos roles. Activemos la opción <em>Stacked</em> que hemos visto en <em>Formato > Behavior</em> y llevemos al campo <em>Category</em> de la visualización el campo <em>Role</em> de nuestra tabla:
Ahora la visualización está mostrando una fila para cada una de las combinaciones de empleado y role. Si desactivamos la opción <em>Stacked</em>, las filas correspondientes a cada empleado se muestran solapadas:
Podemos llevar al campo <em>Overlay</em> campos (uno o más) que queramos que se muestren sobre las barras. Por ejemplo, si llevamos el identificador del empleado, el resultado es el siguiente:
Estas etiquetas que se muestran son configurables en <em>Formato > Overlay text options</em>. El orden en el que se muestran dentro de una barra, sin embargo, es automático (no coincide con el orden en el que llevamos los campos de nuestro modelo de datos al campo de la visualización)
Las selecciones no tienen un comportamiento especialmente lógico: un clic en uno de los nombres de los empleados (cabeceras de filas) no filtra la tabla de empleados ni el resto de visualizaciones que haya en nuestro informe (de hecho la visualización se reordena de forma un tanto inexplicable al hacer clic en una de estas cabeceras). Pero un clic en una de las barras horizontales sí lo hace. Un segundo clic en la misma barra debería deseleccionar al empleado en cuestión, pero no ocurre así: Hay que hacer clic en alguna de las etiquetas de la leyenda, por ejemplo, para que esto ocurra. Hay ciertas opciones para configurar las selecciones en <em>Formato > Multiselect</em>.
Por otro lado, la selección de uno de los recursos en otra visualización sí va a filtrar el <em>As Timeline</em>.
Una limitación de la visualización tiene que ver con el período siendo mostrado: si incluimos asignaciones de períodos lejanos, se muestran todos, con independencia de la escala que haya que aplicar. Por ejemplo, si una de las asignaciones de los datos con los que estamos trabajando se ha retrasado un año, la visualización muestra el siguiente aspecto:
La opción más conveniente es recurrir a una segmentación temporal adicional.
Otro factor a considerar es que el campo a llevar a <em>End Date</em> no es la última fecha en la que el recurso en cuestión está asignado, sino el primer día en el que ya no lo está. Por ejemplo, si un recurso está asignado solo un día, el 5/7/2019, habría que llevar a <em>Start Date</em> el valor 5/7/2019 y a End Date el valor 6/7/2019. De otra forma no se mostraría en la gráfica.
Aun con algunas limitaciones, se trata de una visualización muy práctica y recomendable.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterTags is deprecated in Drupal\Core\Database\Query\Select->addTag() (line 149 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addTag('entity_query') (Line: 147)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'ec6069dd-262f-44a0-ac49-10ffa0563110') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('La visualización <strong>As Timeline</strong> nos permite llevar a una línea de tiempo diferentes elementos caracterizados por una fecha de arranque y otra de finalización. La configuración es, además, muy sencilla e intuitiva.
Los datos con que queremos representar son los siguientes:
El campo <em>Employee Id</em> está asociado a una tabla de empleados en la que se incluyen, entre otros datos, el nombre del empleado (campo <em>Full Name</em>) y el departamento al que pertenece (campo <em>Department</em>).
Los campos que controlan la configuración de la visualización son los mostrados en la siguiente imagen:
Tras crear una instancia de la visualización, arrastremos el campo <em>Full Name</em> (nombre del empleado) al campo de la visualización <em>Entity</em>, y los campos <em>Start</em> y <em>End</em> de nuestro modelo de datos a los campos <em>Start Date</em> y <em>End Date</em> de la visualización, respectivamente. La visualización muestra el siguiente aspecto:
Es decir, con un par de clics ya tenemos una representación temporal de las asignaciones a los empleados en cuestión.
Es posible añadir una dimensión adicional que nos permita clasificar nuestros "recursos" (empleados en este ejemplo) utilizando el campo de la visualización <em>Category</em>. Llevemos a este campo el campo <em>Department</em> de nuestra tabla de datos, campo que contiene el departamento al que pertenece cada empleado. Téngase en cuenta que cada empleado pertenece a un único departamento:
Vemos que se ha añadido la "categoría" a las etiquetas de los empleados. Esto es configurable en <em>Formato > Behavior > Stacked</em> (véase siguiente imagen). Por otro lado, al mover el cursor encima de una de las barras horizontales asociadas a un empleado se muestra la información asociada:
Sin embargo, si la "categoría" añadida no es única para cada empleado, el comportamiento de la visualización cambia. Supongamos que nuestro empleados van a trabajar en el proyecto tanto como beta-testers como desarrolladores, y que cada una de las asignaciones (periodos de tiempo) los van a asociar a uno de los dos roles. Activemos la opción <em>Stacked</em> que hemos visto en <em>Formato > Behavior</em> y llevemos al campo <em>Category</em> de la visualización el campo <em>Role</em> de nuestra tabla:
Ahora la visualización está mostrando una fila para cada una de las combinaciones de empleado y role. Si desactivamos la opción <em>Stacked</em>, las filas correspondientes a cada empleado se muestran solapadas:
Podemos llevar al campo <em>Overlay</em> campos (uno o más) que queramos que se muestren sobre las barras. Por ejemplo, si llevamos el identificador del empleado, el resultado es el siguiente:
Estas etiquetas que se muestran son configurables en <em>Formato > Overlay text options</em>. El orden en el que se muestran dentro de una barra, sin embargo, es automático (no coincide con el orden en el que llevamos los campos de nuestro modelo de datos al campo de la visualización)
Las selecciones no tienen un comportamiento especialmente lógico: un clic en uno de los nombres de los empleados (cabeceras de filas) no filtra la tabla de empleados ni el resto de visualizaciones que haya en nuestro informe (de hecho la visualización se reordena de forma un tanto inexplicable al hacer clic en una de estas cabeceras). Pero un clic en una de las barras horizontales sí lo hace. Un segundo clic en la misma barra debería deseleccionar al empleado en cuestión, pero no ocurre así: Hay que hacer clic en alguna de las etiquetas de la leyenda, por ejemplo, para que esto ocurra. Hay ciertas opciones para configurar las selecciones en <em>Formato > Multiselect</em>.
Por otro lado, la selección de uno de los recursos en otra visualización sí va a filtrar el <em>As Timeline</em>.
Una limitación de la visualización tiene que ver con el período siendo mostrado: si incluimos asignaciones de períodos lejanos, se muestran todos, con independencia de la escala que haya que aplicar. Por ejemplo, si una de las asignaciones de los datos con los que estamos trabajando se ha retrasado un año, la visualización muestra el siguiente aspecto:
La opción más conveniente es recurrir a una segmentación temporal adicional.
Otro factor a considerar es que el campo a llevar a <em>End Date</em> no es la última fecha en la que el recurso en cuestión está asignado, sino el primer día en el que ya no lo está. Por ejemplo, si un recurso está asignado solo un día, el 5/7/2019, habría que llevar a <em>Start Date</em> el valor 5/7/2019 y a End Date el valor 6/7/2019. De otra forma no se mostraría en la gráfica.
Aun con algunas limitaciones, se trata de una visualización muy práctica y recomendable.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterMetaData is deprecated in Drupal\Core\Database\Query\Select->addMetaData() (line 178 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addMetaData('entity_type', 'file') (Line: 115)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', '87668183-48fc-4f5a-a25e-44779058a871') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('La visualización <strong>As Timeline</strong> nos permite llevar a una línea de tiempo diferentes elementos caracterizados por una fecha de arranque y otra de finalización. La configuración es, además, muy sencilla e intuitiva.
Los datos con que queremos representar son los siguientes:
El campo <em>Employee Id</em> está asociado a una tabla de empleados en la que se incluyen, entre otros datos, el nombre del empleado (campo <em>Full Name</em>) y el departamento al que pertenece (campo <em>Department</em>).
Los campos que controlan la configuración de la visualización son los mostrados en la siguiente imagen:
Tras crear una instancia de la visualización, arrastremos el campo <em>Full Name</em> (nombre del empleado) al campo de la visualización <em>Entity</em>, y los campos <em>Start</em> y <em>End</em> de nuestro modelo de datos a los campos <em>Start Date</em> y <em>End Date</em> de la visualización, respectivamente. La visualización muestra el siguiente aspecto:
Es decir, con un par de clics ya tenemos una representación temporal de las asignaciones a los empleados en cuestión.
Es posible añadir una dimensión adicional que nos permita clasificar nuestros "recursos" (empleados en este ejemplo) utilizando el campo de la visualización <em>Category</em>. Llevemos a este campo el campo <em>Department</em> de nuestra tabla de datos, campo que contiene el departamento al que pertenece cada empleado. Téngase en cuenta que cada empleado pertenece a un único departamento:
Vemos que se ha añadido la "categoría" a las etiquetas de los empleados. Esto es configurable en <em>Formato > Behavior > Stacked</em> (véase siguiente imagen). Por otro lado, al mover el cursor encima de una de las barras horizontales asociadas a un empleado se muestra la información asociada:
Sin embargo, si la "categoría" añadida no es única para cada empleado, el comportamiento de la visualización cambia. Supongamos que nuestro empleados van a trabajar en el proyecto tanto como beta-testers como desarrolladores, y que cada una de las asignaciones (periodos de tiempo) los van a asociar a uno de los dos roles. Activemos la opción <em>Stacked</em> que hemos visto en <em>Formato > Behavior</em> y llevemos al campo <em>Category</em> de la visualización el campo <em>Role</em> de nuestra tabla:
Ahora la visualización está mostrando una fila para cada una de las combinaciones de empleado y role. Si desactivamos la opción <em>Stacked</em>, las filas correspondientes a cada empleado se muestran solapadas:
Podemos llevar al campo <em>Overlay</em> campos (uno o más) que queramos que se muestren sobre las barras. Por ejemplo, si llevamos el identificador del empleado, el resultado es el siguiente:
Estas etiquetas que se muestran son configurables en <em>Formato > Overlay text options</em>. El orden en el que se muestran dentro de una barra, sin embargo, es automático (no coincide con el orden en el que llevamos los campos de nuestro modelo de datos al campo de la visualización)
Las selecciones no tienen un comportamiento especialmente lógico: un clic en uno de los nombres de los empleados (cabeceras de filas) no filtra la tabla de empleados ni el resto de visualizaciones que haya en nuestro informe (de hecho la visualización se reordena de forma un tanto inexplicable al hacer clic en una de estas cabeceras). Pero un clic en una de las barras horizontales sí lo hace. Un segundo clic en la misma barra debería deseleccionar al empleado en cuestión, pero no ocurre así: Hay que hacer clic en alguna de las etiquetas de la leyenda, por ejemplo, para que esto ocurra. Hay ciertas opciones para configurar las selecciones en <em>Formato > Multiselect</em>.
Por otro lado, la selección de uno de los recursos en otra visualización sí va a filtrar el <em>As Timeline</em>.
Una limitación de la visualización tiene que ver con el período siendo mostrado: si incluimos asignaciones de períodos lejanos, se muestran todos, con independencia de la escala que haya que aplicar. Por ejemplo, si una de las asignaciones de los datos con los que estamos trabajando se ha retrasado un año, la visualización muestra el siguiente aspecto:
La opción más conveniente es recurrir a una segmentación temporal adicional.
Otro factor a considerar es que el campo a llevar a <em>End Date</em> no es la última fecha en la que el recurso en cuestión está asignado, sino el primer día en el que ya no lo está. Por ejemplo, si un recurso está asignado solo un día, el 5/7/2019, habría que llevar a <em>Start Date</em> el valor 5/7/2019 y a End Date el valor 6/7/2019. De otra forma no se mostraría en la gráfica.
Aun con algunas limitaciones, se trata de una visualización muy práctica y recomendable.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterTags is deprecated in Drupal\Core\Database\Query\Select->addTag() (line 149 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addTag('entity_query') (Line: 147)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', '87668183-48fc-4f5a-a25e-44779058a871') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('La visualización <strong>As Timeline</strong> nos permite llevar a una línea de tiempo diferentes elementos caracterizados por una fecha de arranque y otra de finalización. La configuración es, además, muy sencilla e intuitiva.
Los datos con que queremos representar son los siguientes:
El campo <em>Employee Id</em> está asociado a una tabla de empleados en la que se incluyen, entre otros datos, el nombre del empleado (campo <em>Full Name</em>) y el departamento al que pertenece (campo <em>Department</em>).
Los campos que controlan la configuración de la visualización son los mostrados en la siguiente imagen:
Tras crear una instancia de la visualización, arrastremos el campo <em>Full Name</em> (nombre del empleado) al campo de la visualización <em>Entity</em>, y los campos <em>Start</em> y <em>End</em> de nuestro modelo de datos a los campos <em>Start Date</em> y <em>End Date</em> de la visualización, respectivamente. La visualización muestra el siguiente aspecto:
Es decir, con un par de clics ya tenemos una representación temporal de las asignaciones a los empleados en cuestión.
Es posible añadir una dimensión adicional que nos permita clasificar nuestros "recursos" (empleados en este ejemplo) utilizando el campo de la visualización <em>Category</em>. Llevemos a este campo el campo <em>Department</em> de nuestra tabla de datos, campo que contiene el departamento al que pertenece cada empleado. Téngase en cuenta que cada empleado pertenece a un único departamento:
Vemos que se ha añadido la "categoría" a las etiquetas de los empleados. Esto es configurable en <em>Formato > Behavior > Stacked</em> (véase siguiente imagen). Por otro lado, al mover el cursor encima de una de las barras horizontales asociadas a un empleado se muestra la información asociada:
Sin embargo, si la "categoría" añadida no es única para cada empleado, el comportamiento de la visualización cambia. Supongamos que nuestro empleados van a trabajar en el proyecto tanto como beta-testers como desarrolladores, y que cada una de las asignaciones (periodos de tiempo) los van a asociar a uno de los dos roles. Activemos la opción <em>Stacked</em> que hemos visto en <em>Formato > Behavior</em> y llevemos al campo <em>Category</em> de la visualización el campo <em>Role</em> de nuestra tabla:
Ahora la visualización está mostrando una fila para cada una de las combinaciones de empleado y role. Si desactivamos la opción <em>Stacked</em>, las filas correspondientes a cada empleado se muestran solapadas:
Podemos llevar al campo <em>Overlay</em> campos (uno o más) que queramos que se muestren sobre las barras. Por ejemplo, si llevamos el identificador del empleado, el resultado es el siguiente:
Estas etiquetas que se muestran son configurables en <em>Formato > Overlay text options</em>. El orden en el que se muestran dentro de una barra, sin embargo, es automático (no coincide con el orden en el que llevamos los campos de nuestro modelo de datos al campo de la visualización)
Las selecciones no tienen un comportamiento especialmente lógico: un clic en uno de los nombres de los empleados (cabeceras de filas) no filtra la tabla de empleados ni el resto de visualizaciones que haya en nuestro informe (de hecho la visualización se reordena de forma un tanto inexplicable al hacer clic en una de estas cabeceras). Pero un clic en una de las barras horizontales sí lo hace. Un segundo clic en la misma barra debería deseleccionar al empleado en cuestión, pero no ocurre así: Hay que hacer clic en alguna de las etiquetas de la leyenda, por ejemplo, para que esto ocurra. Hay ciertas opciones para configurar las selecciones en <em>Formato > Multiselect</em>.
Por otro lado, la selección de uno de los recursos en otra visualización sí va a filtrar el <em>As Timeline</em>.
Una limitación de la visualización tiene que ver con el período siendo mostrado: si incluimos asignaciones de períodos lejanos, se muestran todos, con independencia de la escala que haya que aplicar. Por ejemplo, si una de las asignaciones de los datos con los que estamos trabajando se ha retrasado un año, la visualización muestra el siguiente aspecto:
La opción más conveniente es recurrir a una segmentación temporal adicional.
Otro factor a considerar es que el campo a llevar a <em>End Date</em> no es la última fecha en la que el recurso en cuestión está asignado, sino el primer día en el que ya no lo está. Por ejemplo, si un recurso está asignado solo un día, el 5/7/2019, habría que llevar a <em>Start Date</em> el valor 5/7/2019 y a End Date el valor 6/7/2019. De otra forma no se mostraría en la gráfica.
Aun con algunas limitaciones, se trata de una visualización muy práctica y recomendable.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterTags is deprecated in Drupal\Core\Database\Query\Select->addTag() (line 149 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addTag('file_load_multiple') (Line: 696)
Drupal\Core\Entity\Sql\SqlContentEntityStorage->buildQuery(Array) (Line: 422)
Drupal\Core\Entity\Sql\SqlContentEntityStorage->getFromStorage(Array) (Line: 393)
Drupal\Core\Entity\Sql\SqlContentEntityStorage->doLoadMultiple(Array) (Line: 346)
Drupal\Core\Entity\EntityStorageBase->loadMultiple(Array) (Line: 641)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', '87668183-48fc-4f5a-a25e-44779058a871') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('La visualización <strong>As Timeline</strong> nos permite llevar a una línea de tiempo diferentes elementos caracterizados por una fecha de arranque y otra de finalización. La configuración es, además, muy sencilla e intuitiva.
Los datos con que queremos representar son los siguientes:
El campo <em>Employee Id</em> está asociado a una tabla de empleados en la que se incluyen, entre otros datos, el nombre del empleado (campo <em>Full Name</em>) y el departamento al que pertenece (campo <em>Department</em>).
Los campos que controlan la configuración de la visualización son los mostrados en la siguiente imagen:
Tras crear una instancia de la visualización, arrastremos el campo <em>Full Name</em> (nombre del empleado) al campo de la visualización <em>Entity</em>, y los campos <em>Start</em> y <em>End</em> de nuestro modelo de datos a los campos <em>Start Date</em> y <em>End Date</em> de la visualización, respectivamente. La visualización muestra el siguiente aspecto:
Es decir, con un par de clics ya tenemos una representación temporal de las asignaciones a los empleados en cuestión.
Es posible añadir una dimensión adicional que nos permita clasificar nuestros "recursos" (empleados en este ejemplo) utilizando el campo de la visualización <em>Category</em>. Llevemos a este campo el campo <em>Department</em> de nuestra tabla de datos, campo que contiene el departamento al que pertenece cada empleado. Téngase en cuenta que cada empleado pertenece a un único departamento:
Vemos que se ha añadido la "categoría" a las etiquetas de los empleados. Esto es configurable en <em>Formato > Behavior > Stacked</em> (véase siguiente imagen). Por otro lado, al mover el cursor encima de una de las barras horizontales asociadas a un empleado se muestra la información asociada:
Sin embargo, si la "categoría" añadida no es única para cada empleado, el comportamiento de la visualización cambia. Supongamos que nuestro empleados van a trabajar en el proyecto tanto como beta-testers como desarrolladores, y que cada una de las asignaciones (periodos de tiempo) los van a asociar a uno de los dos roles. Activemos la opción <em>Stacked</em> que hemos visto en <em>Formato > Behavior</em> y llevemos al campo <em>Category</em> de la visualización el campo <em>Role</em> de nuestra tabla:
Ahora la visualización está mostrando una fila para cada una de las combinaciones de empleado y role. Si desactivamos la opción <em>Stacked</em>, las filas correspondientes a cada empleado se muestran solapadas:
Podemos llevar al campo <em>Overlay</em> campos (uno o más) que queramos que se muestren sobre las barras. Por ejemplo, si llevamos el identificador del empleado, el resultado es el siguiente:
Estas etiquetas que se muestran son configurables en <em>Formato > Overlay text options</em>. El orden en el que se muestran dentro de una barra, sin embargo, es automático (no coincide con el orden en el que llevamos los campos de nuestro modelo de datos al campo de la visualización)
Las selecciones no tienen un comportamiento especialmente lógico: un clic en uno de los nombres de los empleados (cabeceras de filas) no filtra la tabla de empleados ni el resto de visualizaciones que haya en nuestro informe (de hecho la visualización se reordena de forma un tanto inexplicable al hacer clic en una de estas cabeceras). Pero un clic en una de las barras horizontales sí lo hace. Un segundo clic en la misma barra debería deseleccionar al empleado en cuestión, pero no ocurre así: Hay que hacer clic en alguna de las etiquetas de la leyenda, por ejemplo, para que esto ocurra. Hay ciertas opciones para configurar las selecciones en <em>Formato > Multiselect</em>.
Por otro lado, la selección de uno de los recursos en otra visualización sí va a filtrar el <em>As Timeline</em>.
Una limitación de la visualización tiene que ver con el período siendo mostrado: si incluimos asignaciones de períodos lejanos, se muestran todos, con independencia de la escala que haya que aplicar. Por ejemplo, si una de las asignaciones de los datos con los que estamos trabajando se ha retrasado un año, la visualización muestra el siguiente aspecto:
La opción más conveniente es recurrir a una segmentación temporal adicional.
Otro factor a considerar es que el campo a llevar a <em>End Date</em> no es la última fecha en la que el recurso en cuestión está asignado, sino el primer día en el que ya no lo está. Por ejemplo, si un recurso está asignado solo un día, el 5/7/2019, habría que llevar a <em>Start Date</em> el valor 5/7/2019 y a End Date el valor 6/7/2019. De otra forma no se mostraría en la gráfica.
Aun con algunas limitaciones, se trata de una visualización muy práctica y recomendable.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterMetaData is deprecated in Drupal\Core\Database\Query\Select->addMetaData() (line 178 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addMetaData('entity_type', 'file') (Line: 115)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', '87668183-48fc-4f5a-a25e-44779058a871') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('La visualización <strong>As Timeline</strong> nos permite llevar a una línea de tiempo diferentes elementos caracterizados por una fecha de arranque y otra de finalización. La configuración es, además, muy sencilla e intuitiva.
Los datos con que queremos representar son los siguientes:
El campo <em>Employee Id</em> está asociado a una tabla de empleados en la que se incluyen, entre otros datos, el nombre del empleado (campo <em>Full Name</em>) y el departamento al que pertenece (campo <em>Department</em>).
Los campos que controlan la configuración de la visualización son los mostrados en la siguiente imagen:
Tras crear una instancia de la visualización, arrastremos el campo <em>Full Name</em> (nombre del empleado) al campo de la visualización <em>Entity</em>, y los campos <em>Start</em> y <em>End</em> de nuestro modelo de datos a los campos <em>Start Date</em> y <em>End Date</em> de la visualización, respectivamente. La visualización muestra el siguiente aspecto:
Es decir, con un par de clics ya tenemos una representación temporal de las asignaciones a los empleados en cuestión.
Es posible añadir una dimensión adicional que nos permita clasificar nuestros "recursos" (empleados en este ejemplo) utilizando el campo de la visualización <em>Category</em>. Llevemos a este campo el campo <em>Department</em> de nuestra tabla de datos, campo que contiene el departamento al que pertenece cada empleado. Téngase en cuenta que cada empleado pertenece a un único departamento:
Vemos que se ha añadido la "categoría" a las etiquetas de los empleados. Esto es configurable en <em>Formato > Behavior > Stacked</em> (véase siguiente imagen). Por otro lado, al mover el cursor encima de una de las barras horizontales asociadas a un empleado se muestra la información asociada:
Sin embargo, si la "categoría" añadida no es única para cada empleado, el comportamiento de la visualización cambia. Supongamos que nuestro empleados van a trabajar en el proyecto tanto como beta-testers como desarrolladores, y que cada una de las asignaciones (periodos de tiempo) los van a asociar a uno de los dos roles. Activemos la opción <em>Stacked</em> que hemos visto en <em>Formato > Behavior</em> y llevemos al campo <em>Category</em> de la visualización el campo <em>Role</em> de nuestra tabla:
Ahora la visualización está mostrando una fila para cada una de las combinaciones de empleado y role. Si desactivamos la opción <em>Stacked</em>, las filas correspondientes a cada empleado se muestran solapadas:
Podemos llevar al campo <em>Overlay</em> campos (uno o más) que queramos que se muestren sobre las barras. Por ejemplo, si llevamos el identificador del empleado, el resultado es el siguiente:
Estas etiquetas que se muestran son configurables en <em>Formato > Overlay text options</em>. El orden en el que se muestran dentro de una barra, sin embargo, es automático (no coincide con el orden en el que llevamos los campos de nuestro modelo de datos al campo de la visualización)
Las selecciones no tienen un comportamiento especialmente lógico: un clic en uno de los nombres de los empleados (cabeceras de filas) no filtra la tabla de empleados ni el resto de visualizaciones que haya en nuestro informe (de hecho la visualización se reordena de forma un tanto inexplicable al hacer clic en una de estas cabeceras). Pero un clic en una de las barras horizontales sí lo hace. Un segundo clic en la misma barra debería deseleccionar al empleado en cuestión, pero no ocurre así: Hay que hacer clic en alguna de las etiquetas de la leyenda, por ejemplo, para que esto ocurra. Hay ciertas opciones para configurar las selecciones en <em>Formato > Multiselect</em>.
Por otro lado, la selección de uno de los recursos en otra visualización sí va a filtrar el <em>As Timeline</em>.
Una limitación de la visualización tiene que ver con el período siendo mostrado: si incluimos asignaciones de períodos lejanos, se muestran todos, con independencia de la escala que haya que aplicar. Por ejemplo, si una de las asignaciones de los datos con los que estamos trabajando se ha retrasado un año, la visualización muestra el siguiente aspecto:
La opción más conveniente es recurrir a una segmentación temporal adicional.
Otro factor a considerar es que el campo a llevar a <em>End Date</em> no es la última fecha en la que el recurso en cuestión está asignado, sino el primer día en el que ya no lo está. Por ejemplo, si un recurso está asignado solo un día, el 5/7/2019, habría que llevar a <em>Start Date</em> el valor 5/7/2019 y a End Date el valor 6/7/2019. De otra forma no se mostraría en la gráfica.
Aun con algunas limitaciones, se trata de una visualización muy práctica y recomendable.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterTags is deprecated in Drupal\Core\Database\Query\Select->addTag() (line 149 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addTag('entity_query') (Line: 147)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', '87668183-48fc-4f5a-a25e-44779058a871') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('La visualización <strong>As Timeline</strong> nos permite llevar a una línea de tiempo diferentes elementos caracterizados por una fecha de arranque y otra de finalización. La configuración es, además, muy sencilla e intuitiva.
Los datos con que queremos representar son los siguientes:
El campo <em>Employee Id</em> está asociado a una tabla de empleados en la que se incluyen, entre otros datos, el nombre del empleado (campo <em>Full Name</em>) y el departamento al que pertenece (campo <em>Department</em>).
Los campos que controlan la configuración de la visualización son los mostrados en la siguiente imagen:
Tras crear una instancia de la visualización, arrastremos el campo <em>Full Name</em> (nombre del empleado) al campo de la visualización <em>Entity</em>, y los campos <em>Start</em> y <em>End</em> de nuestro modelo de datos a los campos <em>Start Date</em> y <em>End Date</em> de la visualización, respectivamente. La visualización muestra el siguiente aspecto:
Es decir, con un par de clics ya tenemos una representación temporal de las asignaciones a los empleados en cuestión.
Es posible añadir una dimensión adicional que nos permita clasificar nuestros "recursos" (empleados en este ejemplo) utilizando el campo de la visualización <em>Category</em>. Llevemos a este campo el campo <em>Department</em> de nuestra tabla de datos, campo que contiene el departamento al que pertenece cada empleado. Téngase en cuenta que cada empleado pertenece a un único departamento:
Vemos que se ha añadido la "categoría" a las etiquetas de los empleados. Esto es configurable en <em>Formato > Behavior > Stacked</em> (véase siguiente imagen). Por otro lado, al mover el cursor encima de una de las barras horizontales asociadas a un empleado se muestra la información asociada:
Sin embargo, si la "categoría" añadida no es única para cada empleado, el comportamiento de la visualización cambia. Supongamos que nuestro empleados van a trabajar en el proyecto tanto como beta-testers como desarrolladores, y que cada una de las asignaciones (periodos de tiempo) los van a asociar a uno de los dos roles. Activemos la opción <em>Stacked</em> que hemos visto en <em>Formato > Behavior</em> y llevemos al campo <em>Category</em> de la visualización el campo <em>Role</em> de nuestra tabla:
Ahora la visualización está mostrando una fila para cada una de las combinaciones de empleado y role. Si desactivamos la opción <em>Stacked</em>, las filas correspondientes a cada empleado se muestran solapadas:
Podemos llevar al campo <em>Overlay</em> campos (uno o más) que queramos que se muestren sobre las barras. Por ejemplo, si llevamos el identificador del empleado, el resultado es el siguiente:
Estas etiquetas que se muestran son configurables en <em>Formato > Overlay text options</em>. El orden en el que se muestran dentro de una barra, sin embargo, es automático (no coincide con el orden en el que llevamos los campos de nuestro modelo de datos al campo de la visualización)
Las selecciones no tienen un comportamiento especialmente lógico: un clic en uno de los nombres de los empleados (cabeceras de filas) no filtra la tabla de empleados ni el resto de visualizaciones que haya en nuestro informe (de hecho la visualización se reordena de forma un tanto inexplicable al hacer clic en una de estas cabeceras). Pero un clic en una de las barras horizontales sí lo hace. Un segundo clic en la misma barra debería deseleccionar al empleado en cuestión, pero no ocurre así: Hay que hacer clic en alguna de las etiquetas de la leyenda, por ejemplo, para que esto ocurra. Hay ciertas opciones para configurar las selecciones en <em>Formato > Multiselect</em>.
Por otro lado, la selección de uno de los recursos en otra visualización sí va a filtrar el <em>As Timeline</em>.
Una limitación de la visualización tiene que ver con el período siendo mostrado: si incluimos asignaciones de períodos lejanos, se muestran todos, con independencia de la escala que haya que aplicar. Por ejemplo, si una de las asignaciones de los datos con los que estamos trabajando se ha retrasado un año, la visualización muestra el siguiente aspecto:
La opción más conveniente es recurrir a una segmentación temporal adicional.
Otro factor a considerar es que el campo a llevar a <em>End Date</em> no es la última fecha en la que el recurso en cuestión está asignado, sino el primer día en el que ya no lo está. Por ejemplo, si un recurso está asignado solo un día, el 5/7/2019, habría que llevar a <em>Start Date</em> el valor 5/7/2019 y a End Date el valor 6/7/2019. De otra forma no se mostraría en la gráfica.
Aun con algunas limitaciones, se trata de una visualización muy práctica y recomendable.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterMetaData is deprecated in Drupal\Core\Database\Query\Select->addMetaData() (line 178 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addMetaData('entity_type', 'file') (Line: 115)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'a9469fac-5366-4a63-acc8-32caba5c304b') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('La visualización <strong>As Timeline</strong> nos permite llevar a una línea de tiempo diferentes elementos caracterizados por una fecha de arranque y otra de finalización. La configuración es, además, muy sencilla e intuitiva.
Los datos con que queremos representar son los siguientes:
El campo <em>Employee Id</em> está asociado a una tabla de empleados en la que se incluyen, entre otros datos, el nombre del empleado (campo <em>Full Name</em>) y el departamento al que pertenece (campo <em>Department</em>).
Los campos que controlan la configuración de la visualización son los mostrados en la siguiente imagen:
Tras crear una instancia de la visualización, arrastremos el campo <em>Full Name</em> (nombre del empleado) al campo de la visualización <em>Entity</em>, y los campos <em>Start</em> y <em>End</em> de nuestro modelo de datos a los campos <em>Start Date</em> y <em>End Date</em> de la visualización, respectivamente. La visualización muestra el siguiente aspecto:
Es decir, con un par de clics ya tenemos una representación temporal de las asignaciones a los empleados en cuestión.
Es posible añadir una dimensión adicional que nos permita clasificar nuestros "recursos" (empleados en este ejemplo) utilizando el campo de la visualización <em>Category</em>. Llevemos a este campo el campo <em>Department</em> de nuestra tabla de datos, campo que contiene el departamento al que pertenece cada empleado. Téngase en cuenta que cada empleado pertenece a un único departamento:
Vemos que se ha añadido la "categoría" a las etiquetas de los empleados. Esto es configurable en <em>Formato > Behavior > Stacked</em> (véase siguiente imagen). Por otro lado, al mover el cursor encima de una de las barras horizontales asociadas a un empleado se muestra la información asociada:
Sin embargo, si la "categoría" añadida no es única para cada empleado, el comportamiento de la visualización cambia. Supongamos que nuestro empleados van a trabajar en el proyecto tanto como beta-testers como desarrolladores, y que cada una de las asignaciones (periodos de tiempo) los van a asociar a uno de los dos roles. Activemos la opción <em>Stacked</em> que hemos visto en <em>Formato > Behavior</em> y llevemos al campo <em>Category</em> de la visualización el campo <em>Role</em> de nuestra tabla:
Ahora la visualización está mostrando una fila para cada una de las combinaciones de empleado y role. Si desactivamos la opción <em>Stacked</em>, las filas correspondientes a cada empleado se muestran solapadas:
Podemos llevar al campo <em>Overlay</em> campos (uno o más) que queramos que se muestren sobre las barras. Por ejemplo, si llevamos el identificador del empleado, el resultado es el siguiente:
Estas etiquetas que se muestran son configurables en <em>Formato > Overlay text options</em>. El orden en el que se muestran dentro de una barra, sin embargo, es automático (no coincide con el orden en el que llevamos los campos de nuestro modelo de datos al campo de la visualización)
Las selecciones no tienen un comportamiento especialmente lógico: un clic en uno de los nombres de los empleados (cabeceras de filas) no filtra la tabla de empleados ni el resto de visualizaciones que haya en nuestro informe (de hecho la visualización se reordena de forma un tanto inexplicable al hacer clic en una de estas cabeceras). Pero un clic en una de las barras horizontales sí lo hace. Un segundo clic en la misma barra debería deseleccionar al empleado en cuestión, pero no ocurre así: Hay que hacer clic en alguna de las etiquetas de la leyenda, por ejemplo, para que esto ocurra. Hay ciertas opciones para configurar las selecciones en <em>Formato > Multiselect</em>.
Por otro lado, la selección de uno de los recursos en otra visualización sí va a filtrar el <em>As Timeline</em>.
Una limitación de la visualización tiene que ver con el período siendo mostrado: si incluimos asignaciones de períodos lejanos, se muestran todos, con independencia de la escala que haya que aplicar. Por ejemplo, si una de las asignaciones de los datos con los que estamos trabajando se ha retrasado un año, la visualización muestra el siguiente aspecto:
La opción más conveniente es recurrir a una segmentación temporal adicional.
Otro factor a considerar es que el campo a llevar a <em>End Date</em> no es la última fecha en la que el recurso en cuestión está asignado, sino el primer día en el que ya no lo está. Por ejemplo, si un recurso está asignado solo un día, el 5/7/2019, habría que llevar a <em>Start Date</em> el valor 5/7/2019 y a End Date el valor 6/7/2019. De otra forma no se mostraría en la gráfica.
Aun con algunas limitaciones, se trata de una visualización muy práctica y recomendable.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterTags is deprecated in Drupal\Core\Database\Query\Select->addTag() (line 149 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addTag('entity_query') (Line: 147)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'a9469fac-5366-4a63-acc8-32caba5c304b') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('La visualización <strong>As Timeline</strong> nos permite llevar a una línea de tiempo diferentes elementos caracterizados por una fecha de arranque y otra de finalización. La configuración es, además, muy sencilla e intuitiva.
Los datos con que queremos representar son los siguientes:
El campo <em>Employee Id</em> está asociado a una tabla de empleados en la que se incluyen, entre otros datos, el nombre del empleado (campo <em>Full Name</em>) y el departamento al que pertenece (campo <em>Department</em>).
Los campos que controlan la configuración de la visualización son los mostrados en la siguiente imagen:
Tras crear una instancia de la visualización, arrastremos el campo <em>Full Name</em> (nombre del empleado) al campo de la visualización <em>Entity</em>, y los campos <em>Start</em> y <em>End</em> de nuestro modelo de datos a los campos <em>Start Date</em> y <em>End Date</em> de la visualización, respectivamente. La visualización muestra el siguiente aspecto:
Es decir, con un par de clics ya tenemos una representación temporal de las asignaciones a los empleados en cuestión.
Es posible añadir una dimensión adicional que nos permita clasificar nuestros "recursos" (empleados en este ejemplo) utilizando el campo de la visualización <em>Category</em>. Llevemos a este campo el campo <em>Department</em> de nuestra tabla de datos, campo que contiene el departamento al que pertenece cada empleado. Téngase en cuenta que cada empleado pertenece a un único departamento:
Vemos que se ha añadido la "categoría" a las etiquetas de los empleados. Esto es configurable en <em>Formato > Behavior > Stacked</em> (véase siguiente imagen). Por otro lado, al mover el cursor encima de una de las barras horizontales asociadas a un empleado se muestra la información asociada:
Sin embargo, si la "categoría" añadida no es única para cada empleado, el comportamiento de la visualización cambia. Supongamos que nuestro empleados van a trabajar en el proyecto tanto como beta-testers como desarrolladores, y que cada una de las asignaciones (periodos de tiempo) los van a asociar a uno de los dos roles. Activemos la opción <em>Stacked</em> que hemos visto en <em>Formato > Behavior</em> y llevemos al campo <em>Category</em> de la visualización el campo <em>Role</em> de nuestra tabla:
Ahora la visualización está mostrando una fila para cada una de las combinaciones de empleado y role. Si desactivamos la opción <em>Stacked</em>, las filas correspondientes a cada empleado se muestran solapadas:
Podemos llevar al campo <em>Overlay</em> campos (uno o más) que queramos que se muestren sobre las barras. Por ejemplo, si llevamos el identificador del empleado, el resultado es el siguiente:
Estas etiquetas que se muestran son configurables en <em>Formato > Overlay text options</em>. El orden en el que se muestran dentro de una barra, sin embargo, es automático (no coincide con el orden en el que llevamos los campos de nuestro modelo de datos al campo de la visualización)
Las selecciones no tienen un comportamiento especialmente lógico: un clic en uno de los nombres de los empleados (cabeceras de filas) no filtra la tabla de empleados ni el resto de visualizaciones que haya en nuestro informe (de hecho la visualización se reordena de forma un tanto inexplicable al hacer clic en una de estas cabeceras). Pero un clic en una de las barras horizontales sí lo hace. Un segundo clic en la misma barra debería deseleccionar al empleado en cuestión, pero no ocurre así: Hay que hacer clic en alguna de las etiquetas de la leyenda, por ejemplo, para que esto ocurra. Hay ciertas opciones para configurar las selecciones en <em>Formato > Multiselect</em>.
Por otro lado, la selección de uno de los recursos en otra visualización sí va a filtrar el <em>As Timeline</em>.
Una limitación de la visualización tiene que ver con el período siendo mostrado: si incluimos asignaciones de períodos lejanos, se muestran todos, con independencia de la escala que haya que aplicar. Por ejemplo, si una de las asignaciones de los datos con los que estamos trabajando se ha retrasado un año, la visualización muestra el siguiente aspecto:
La opción más conveniente es recurrir a una segmentación temporal adicional.
Otro factor a considerar es que el campo a llevar a <em>End Date</em> no es la última fecha en la que el recurso en cuestión está asignado, sino el primer día en el que ya no lo está. Por ejemplo, si un recurso está asignado solo un día, el 5/7/2019, habría que llevar a <em>Start Date</em> el valor 5/7/2019 y a End Date el valor 6/7/2019. De otra forma no se mostraría en la gráfica.
Aun con algunas limitaciones, se trata de una visualización muy práctica y recomendable.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterTags is deprecated in Drupal\Core\Database\Query\Select->addTag() (line 149 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addTag('file_load_multiple') (Line: 696)
Drupal\Core\Entity\Sql\SqlContentEntityStorage->buildQuery(Array) (Line: 422)
Drupal\Core\Entity\Sql\SqlContentEntityStorage->getFromStorage(Array) (Line: 393)
Drupal\Core\Entity\Sql\SqlContentEntityStorage->doLoadMultiple(Array) (Line: 346)
Drupal\Core\Entity\EntityStorageBase->loadMultiple(Array) (Line: 641)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'a9469fac-5366-4a63-acc8-32caba5c304b') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('La visualización <strong>As Timeline</strong> nos permite llevar a una línea de tiempo diferentes elementos caracterizados por una fecha de arranque y otra de finalización. La configuración es, además, muy sencilla e intuitiva.
Los datos con que queremos representar son los siguientes:
El campo <em>Employee Id</em> está asociado a una tabla de empleados en la que se incluyen, entre otros datos, el nombre del empleado (campo <em>Full Name</em>) y el departamento al que pertenece (campo <em>Department</em>).
Los campos que controlan la configuración de la visualización son los mostrados en la siguiente imagen:
Tras crear una instancia de la visualización, arrastremos el campo <em>Full Name</em> (nombre del empleado) al campo de la visualización <em>Entity</em>, y los campos <em>Start</em> y <em>End</em> de nuestro modelo de datos a los campos <em>Start Date</em> y <em>End Date</em> de la visualización, respectivamente. La visualización muestra el siguiente aspecto:
Es decir, con un par de clics ya tenemos una representación temporal de las asignaciones a los empleados en cuestión.
Es posible añadir una dimensión adicional que nos permita clasificar nuestros "recursos" (empleados en este ejemplo) utilizando el campo de la visualización <em>Category</em>. Llevemos a este campo el campo <em>Department</em> de nuestra tabla de datos, campo que contiene el departamento al que pertenece cada empleado. Téngase en cuenta que cada empleado pertenece a un único departamento:
Vemos que se ha añadido la "categoría" a las etiquetas de los empleados. Esto es configurable en <em>Formato > Behavior > Stacked</em> (véase siguiente imagen). Por otro lado, al mover el cursor encima de una de las barras horizontales asociadas a un empleado se muestra la información asociada:
Sin embargo, si la "categoría" añadida no es única para cada empleado, el comportamiento de la visualización cambia. Supongamos que nuestro empleados van a trabajar en el proyecto tanto como beta-testers como desarrolladores, y que cada una de las asignaciones (periodos de tiempo) los van a asociar a uno de los dos roles. Activemos la opción <em>Stacked</em> que hemos visto en <em>Formato > Behavior</em> y llevemos al campo <em>Category</em> de la visualización el campo <em>Role</em> de nuestra tabla:
Ahora la visualización está mostrando una fila para cada una de las combinaciones de empleado y role. Si desactivamos la opción <em>Stacked</em>, las filas correspondientes a cada empleado se muestran solapadas:
Podemos llevar al campo <em>Overlay</em> campos (uno o más) que queramos que se muestren sobre las barras. Por ejemplo, si llevamos el identificador del empleado, el resultado es el siguiente:
Estas etiquetas que se muestran son configurables en <em>Formato > Overlay text options</em>. El orden en el que se muestran dentro de una barra, sin embargo, es automático (no coincide con el orden en el que llevamos los campos de nuestro modelo de datos al campo de la visualización)
Las selecciones no tienen un comportamiento especialmente lógico: un clic en uno de los nombres de los empleados (cabeceras de filas) no filtra la tabla de empleados ni el resto de visualizaciones que haya en nuestro informe (de hecho la visualización se reordena de forma un tanto inexplicable al hacer clic en una de estas cabeceras). Pero un clic en una de las barras horizontales sí lo hace. Un segundo clic en la misma barra debería deseleccionar al empleado en cuestión, pero no ocurre así: Hay que hacer clic en alguna de las etiquetas de la leyenda, por ejemplo, para que esto ocurra. Hay ciertas opciones para configurar las selecciones en <em>Formato > Multiselect</em>.
Por otro lado, la selección de uno de los recursos en otra visualización sí va a filtrar el <em>As Timeline</em>.
Una limitación de la visualización tiene que ver con el período siendo mostrado: si incluimos asignaciones de períodos lejanos, se muestran todos, con independencia de la escala que haya que aplicar. Por ejemplo, si una de las asignaciones de los datos con los que estamos trabajando se ha retrasado un año, la visualización muestra el siguiente aspecto:
La opción más conveniente es recurrir a una segmentación temporal adicional.
Otro factor a considerar es que el campo a llevar a <em>End Date</em> no es la última fecha en la que el recurso en cuestión está asignado, sino el primer día en el que ya no lo está. Por ejemplo, si un recurso está asignado solo un día, el 5/7/2019, habría que llevar a <em>Start Date</em> el valor 5/7/2019 y a End Date el valor 6/7/2019. De otra forma no se mostraría en la gráfica.
Aun con algunas limitaciones, se trata de una visualización muy práctica y recomendable.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterMetaData is deprecated in Drupal\Core\Database\Query\Select->addMetaData() (line 178 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addMetaData('entity_type', 'file') (Line: 115)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'a9469fac-5366-4a63-acc8-32caba5c304b') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('La visualización <strong>As Timeline</strong> nos permite llevar a una línea de tiempo diferentes elementos caracterizados por una fecha de arranque y otra de finalización. La configuración es, además, muy sencilla e intuitiva.
Los datos con que queremos representar son los siguientes:
El campo <em>Employee Id</em> está asociado a una tabla de empleados en la que se incluyen, entre otros datos, el nombre del empleado (campo <em>Full Name</em>) y el departamento al que pertenece (campo <em>Department</em>).
Los campos que controlan la configuración de la visualización son los mostrados en la siguiente imagen:
Tras crear una instancia de la visualización, arrastremos el campo <em>Full Name</em> (nombre del empleado) al campo de la visualización <em>Entity</em>, y los campos <em>Start</em> y <em>End</em> de nuestro modelo de datos a los campos <em>Start Date</em> y <em>End Date</em> de la visualización, respectivamente. La visualización muestra el siguiente aspecto:
Es decir, con un par de clics ya tenemos una representación temporal de las asignaciones a los empleados en cuestión.
Es posible añadir una dimensión adicional que nos permita clasificar nuestros "recursos" (empleados en este ejemplo) utilizando el campo de la visualización <em>Category</em>. Llevemos a este campo el campo <em>Department</em> de nuestra tabla de datos, campo que contiene el departamento al que pertenece cada empleado. Téngase en cuenta que cada empleado pertenece a un único departamento:
Vemos que se ha añadido la "categoría" a las etiquetas de los empleados. Esto es configurable en <em>Formato > Behavior > Stacked</em> (véase siguiente imagen). Por otro lado, al mover el cursor encima de una de las barras horizontales asociadas a un empleado se muestra la información asociada:
Sin embargo, si la "categoría" añadida no es única para cada empleado, el comportamiento de la visualización cambia. Supongamos que nuestro empleados van a trabajar en el proyecto tanto como beta-testers como desarrolladores, y que cada una de las asignaciones (periodos de tiempo) los van a asociar a uno de los dos roles. Activemos la opción <em>Stacked</em> que hemos visto en <em>Formato > Behavior</em> y llevemos al campo <em>Category</em> de la visualización el campo <em>Role</em> de nuestra tabla:
Ahora la visualización está mostrando una fila para cada una de las combinaciones de empleado y role. Si desactivamos la opción <em>Stacked</em>, las filas correspondientes a cada empleado se muestran solapadas:
Podemos llevar al campo <em>Overlay</em> campos (uno o más) que queramos que se muestren sobre las barras. Por ejemplo, si llevamos el identificador del empleado, el resultado es el siguiente:
Estas etiquetas que se muestran son configurables en <em>Formato > Overlay text options</em>. El orden en el que se muestran dentro de una barra, sin embargo, es automático (no coincide con el orden en el que llevamos los campos de nuestro modelo de datos al campo de la visualización)
Las selecciones no tienen un comportamiento especialmente lógico: un clic en uno de los nombres de los empleados (cabeceras de filas) no filtra la tabla de empleados ni el resto de visualizaciones que haya en nuestro informe (de hecho la visualización se reordena de forma un tanto inexplicable al hacer clic en una de estas cabeceras). Pero un clic en una de las barras horizontales sí lo hace. Un segundo clic en la misma barra debería deseleccionar al empleado en cuestión, pero no ocurre así: Hay que hacer clic en alguna de las etiquetas de la leyenda, por ejemplo, para que esto ocurra. Hay ciertas opciones para configurar las selecciones en <em>Formato > Multiselect</em>.
Por otro lado, la selección de uno de los recursos en otra visualización sí va a filtrar el <em>As Timeline</em>.
Una limitación de la visualización tiene que ver con el período siendo mostrado: si incluimos asignaciones de períodos lejanos, se muestran todos, con independencia de la escala que haya que aplicar. Por ejemplo, si una de las asignaciones de los datos con los que estamos trabajando se ha retrasado un año, la visualización muestra el siguiente aspecto:
La opción más conveniente es recurrir a una segmentación temporal adicional.
Otro factor a considerar es que el campo a llevar a <em>End Date</em> no es la última fecha en la que el recurso en cuestión está asignado, sino el primer día en el que ya no lo está. Por ejemplo, si un recurso está asignado solo un día, el 5/7/2019, habría que llevar a <em>Start Date</em> el valor 5/7/2019 y a End Date el valor 6/7/2019. De otra forma no se mostraría en la gráfica.
Aun con algunas limitaciones, se trata de una visualización muy práctica y recomendable.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterTags is deprecated in Drupal\Core\Database\Query\Select->addTag() (line 149 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addTag('entity_query') (Line: 147)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'a9469fac-5366-4a63-acc8-32caba5c304b') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('La visualización <strong>As Timeline</strong> nos permite llevar a una línea de tiempo diferentes elementos caracterizados por una fecha de arranque y otra de finalización. La configuración es, además, muy sencilla e intuitiva.
Los datos con que queremos representar son los siguientes:
El campo <em>Employee Id</em> está asociado a una tabla de empleados en la que se incluyen, entre otros datos, el nombre del empleado (campo <em>Full Name</em>) y el departamento al que pertenece (campo <em>Department</em>).
Los campos que controlan la configuración de la visualización son los mostrados en la siguiente imagen:
Tras crear una instancia de la visualización, arrastremos el campo <em>Full Name</em> (nombre del empleado) al campo de la visualización <em>Entity</em>, y los campos <em>Start</em> y <em>End</em> de nuestro modelo de datos a los campos <em>Start Date</em> y <em>End Date</em> de la visualización, respectivamente. La visualización muestra el siguiente aspecto:
Es decir, con un par de clics ya tenemos una representación temporal de las asignaciones a los empleados en cuestión.
Es posible añadir una dimensión adicional que nos permita clasificar nuestros "recursos" (empleados en este ejemplo) utilizando el campo de la visualización <em>Category</em>. Llevemos a este campo el campo <em>Department</em> de nuestra tabla de datos, campo que contiene el departamento al que pertenece cada empleado. Téngase en cuenta que cada empleado pertenece a un único departamento:
Vemos que se ha añadido la "categoría" a las etiquetas de los empleados. Esto es configurable en <em>Formato > Behavior > Stacked</em> (véase siguiente imagen). Por otro lado, al mover el cursor encima de una de las barras horizontales asociadas a un empleado se muestra la información asociada:
Sin embargo, si la "categoría" añadida no es única para cada empleado, el comportamiento de la visualización cambia. Supongamos que nuestro empleados van a trabajar en el proyecto tanto como beta-testers como desarrolladores, y que cada una de las asignaciones (periodos de tiempo) los van a asociar a uno de los dos roles. Activemos la opción <em>Stacked</em> que hemos visto en <em>Formato > Behavior</em> y llevemos al campo <em>Category</em> de la visualización el campo <em>Role</em> de nuestra tabla:
Ahora la visualización está mostrando una fila para cada una de las combinaciones de empleado y role. Si desactivamos la opción <em>Stacked</em>, las filas correspondientes a cada empleado se muestran solapadas:
Podemos llevar al campo <em>Overlay</em> campos (uno o más) que queramos que se muestren sobre las barras. Por ejemplo, si llevamos el identificador del empleado, el resultado es el siguiente:
Estas etiquetas que se muestran son configurables en <em>Formato > Overlay text options</em>. El orden en el que se muestran dentro de una barra, sin embargo, es automático (no coincide con el orden en el que llevamos los campos de nuestro modelo de datos al campo de la visualización)
Las selecciones no tienen un comportamiento especialmente lógico: un clic en uno de los nombres de los empleados (cabeceras de filas) no filtra la tabla de empleados ni el resto de visualizaciones que haya en nuestro informe (de hecho la visualización se reordena de forma un tanto inexplicable al hacer clic en una de estas cabeceras). Pero un clic en una de las barras horizontales sí lo hace. Un segundo clic en la misma barra debería deseleccionar al empleado en cuestión, pero no ocurre así: Hay que hacer clic en alguna de las etiquetas de la leyenda, por ejemplo, para que esto ocurra. Hay ciertas opciones para configurar las selecciones en <em>Formato > Multiselect</em>.
Por otro lado, la selección de uno de los recursos en otra visualización sí va a filtrar el <em>As Timeline</em>.
Una limitación de la visualización tiene que ver con el período siendo mostrado: si incluimos asignaciones de períodos lejanos, se muestran todos, con independencia de la escala que haya que aplicar. Por ejemplo, si una de las asignaciones de los datos con los que estamos trabajando se ha retrasado un año, la visualización muestra el siguiente aspecto:
La opción más conveniente es recurrir a una segmentación temporal adicional.
Otro factor a considerar es que el campo a llevar a <em>End Date</em> no es la última fecha en la que el recurso en cuestión está asignado, sino el primer día en el que ya no lo está. Por ejemplo, si un recurso está asignado solo un día, el 5/7/2019, habría que llevar a <em>Start Date</em> el valor 5/7/2019 y a End Date el valor 6/7/2019. De otra forma no se mostraría en la gráfica.
Aun con algunas limitaciones, se trata de una visualización muy práctica y recomendable.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterMetaData is deprecated in Drupal\Core\Database\Query\Select->addMetaData() (line 178 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addMetaData('entity_type', 'file') (Line: 115)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', '99fb6570-a29a-401d-bbfc-a54c47070870') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('La visualización <strong>As Timeline</strong> nos permite llevar a una línea de tiempo diferentes elementos caracterizados por una fecha de arranque y otra de finalización. La configuración es, además, muy sencilla e intuitiva.
Los datos con que queremos representar son los siguientes:
El campo <em>Employee Id</em> está asociado a una tabla de empleados en la que se incluyen, entre otros datos, el nombre del empleado (campo <em>Full Name</em>) y el departamento al que pertenece (campo <em>Department</em>).
Los campos que controlan la configuración de la visualización son los mostrados en la siguiente imagen:
Tras crear una instancia de la visualización, arrastremos el campo <em>Full Name</em> (nombre del empleado) al campo de la visualización <em>Entity</em>, y los campos <em>Start</em> y <em>End</em> de nuestro modelo de datos a los campos <em>Start Date</em> y <em>End Date</em> de la visualización, respectivamente. La visualización muestra el siguiente aspecto:
Es decir, con un par de clics ya tenemos una representación temporal de las asignaciones a los empleados en cuestión.
Es posible añadir una dimensión adicional que nos permita clasificar nuestros "recursos" (empleados en este ejemplo) utilizando el campo de la visualización <em>Category</em>. Llevemos a este campo el campo <em>Department</em> de nuestra tabla de datos, campo que contiene el departamento al que pertenece cada empleado. Téngase en cuenta que cada empleado pertenece a un único departamento:
Vemos que se ha añadido la "categoría" a las etiquetas de los empleados. Esto es configurable en <em>Formato > Behavior > Stacked</em> (véase siguiente imagen). Por otro lado, al mover el cursor encima de una de las barras horizontales asociadas a un empleado se muestra la información asociada:
Sin embargo, si la "categoría" añadida no es única para cada empleado, el comportamiento de la visualización cambia. Supongamos que nuestro empleados van a trabajar en el proyecto tanto como beta-testers como desarrolladores, y que cada una de las asignaciones (periodos de tiempo) los van a asociar a uno de los dos roles. Activemos la opción <em>Stacked</em> que hemos visto en <em>Formato > Behavior</em> y llevemos al campo <em>Category</em> de la visualización el campo <em>Role</em> de nuestra tabla:
Ahora la visualización está mostrando una fila para cada una de las combinaciones de empleado y role. Si desactivamos la opción <em>Stacked</em>, las filas correspondientes a cada empleado se muestran solapadas:
Podemos llevar al campo <em>Overlay</em> campos (uno o más) que queramos que se muestren sobre las barras. Por ejemplo, si llevamos el identificador del empleado, el resultado es el siguiente:
Estas etiquetas que se muestran son configurables en <em>Formato > Overlay text options</em>. El orden en el que se muestran dentro de una barra, sin embargo, es automático (no coincide con el orden en el que llevamos los campos de nuestro modelo de datos al campo de la visualización)
Las selecciones no tienen un comportamiento especialmente lógico: un clic en uno de los nombres de los empleados (cabeceras de filas) no filtra la tabla de empleados ni el resto de visualizaciones que haya en nuestro informe (de hecho la visualización se reordena de forma un tanto inexplicable al hacer clic en una de estas cabeceras). Pero un clic en una de las barras horizontales sí lo hace. Un segundo clic en la misma barra debería deseleccionar al empleado en cuestión, pero no ocurre así: Hay que hacer clic en alguna de las etiquetas de la leyenda, por ejemplo, para que esto ocurra. Hay ciertas opciones para configurar las selecciones en <em>Formato > Multiselect</em>.
Por otro lado, la selección de uno de los recursos en otra visualización sí va a filtrar el <em>As Timeline</em>.
Una limitación de la visualización tiene que ver con el período siendo mostrado: si incluimos asignaciones de períodos lejanos, se muestran todos, con independencia de la escala que haya que aplicar. Por ejemplo, si una de las asignaciones de los datos con los que estamos trabajando se ha retrasado un año, la visualización muestra el siguiente aspecto:
La opción más conveniente es recurrir a una segmentación temporal adicional.
Otro factor a considerar es que el campo a llevar a <em>End Date</em> no es la última fecha en la que el recurso en cuestión está asignado, sino el primer día en el que ya no lo está. Por ejemplo, si un recurso está asignado solo un día, el 5/7/2019, habría que llevar a <em>Start Date</em> el valor 5/7/2019 y a End Date el valor 6/7/2019. De otra forma no se mostraría en la gráfica.
Aun con algunas limitaciones, se trata de una visualización muy práctica y recomendable.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterTags is deprecated in Drupal\Core\Database\Query\Select->addTag() (line 149 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addTag('entity_query') (Line: 147)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', '99fb6570-a29a-401d-bbfc-a54c47070870') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('La visualización <strong>As Timeline</strong> nos permite llevar a una línea de tiempo diferentes elementos caracterizados por una fecha de arranque y otra de finalización. La configuración es, además, muy sencilla e intuitiva.
Los datos con que queremos representar son los siguientes:
El campo <em>Employee Id</em> está asociado a una tabla de empleados en la que se incluyen, entre otros datos, el nombre del empleado (campo <em>Full Name</em>) y el departamento al que pertenece (campo <em>Department</em>).
Los campos que controlan la configuración de la visualización son los mostrados en la siguiente imagen:
Tras crear una instancia de la visualización, arrastremos el campo <em>Full Name</em> (nombre del empleado) al campo de la visualización <em>Entity</em>, y los campos <em>Start</em> y <em>End</em> de nuestro modelo de datos a los campos <em>Start Date</em> y <em>End Date</em> de la visualización, respectivamente. La visualización muestra el siguiente aspecto:
Es decir, con un par de clics ya tenemos una representación temporal de las asignaciones a los empleados en cuestión.
Es posible añadir una dimensión adicional que nos permita clasificar nuestros "recursos" (empleados en este ejemplo) utilizando el campo de la visualización <em>Category</em>. Llevemos a este campo el campo <em>Department</em> de nuestra tabla de datos, campo que contiene el departamento al que pertenece cada empleado. Téngase en cuenta que cada empleado pertenece a un único departamento:
Vemos que se ha añadido la "categoría" a las etiquetas de los empleados. Esto es configurable en <em>Formato > Behavior > Stacked</em> (véase siguiente imagen). Por otro lado, al mover el cursor encima de una de las barras horizontales asociadas a un empleado se muestra la información asociada:
Sin embargo, si la "categoría" añadida no es única para cada empleado, el comportamiento de la visualización cambia. Supongamos que nuestro empleados van a trabajar en el proyecto tanto como beta-testers como desarrolladores, y que cada una de las asignaciones (periodos de tiempo) los van a asociar a uno de los dos roles. Activemos la opción <em>Stacked</em> que hemos visto en <em>Formato > Behavior</em> y llevemos al campo <em>Category</em> de la visualización el campo <em>Role</em> de nuestra tabla:
Ahora la visualización está mostrando una fila para cada una de las combinaciones de empleado y role. Si desactivamos la opción <em>Stacked</em>, las filas correspondientes a cada empleado se muestran solapadas:
Podemos llevar al campo <em>Overlay</em> campos (uno o más) que queramos que se muestren sobre las barras. Por ejemplo, si llevamos el identificador del empleado, el resultado es el siguiente:
Estas etiquetas que se muestran son configurables en <em>Formato > Overlay text options</em>. El orden en el que se muestran dentro de una barra, sin embargo, es automático (no coincide con el orden en el que llevamos los campos de nuestro modelo de datos al campo de la visualización)
Las selecciones no tienen un comportamiento especialmente lógico: un clic en uno de los nombres de los empleados (cabeceras de filas) no filtra la tabla de empleados ni el resto de visualizaciones que haya en nuestro informe (de hecho la visualización se reordena de forma un tanto inexplicable al hacer clic en una de estas cabeceras). Pero un clic en una de las barras horizontales sí lo hace. Un segundo clic en la misma barra debería deseleccionar al empleado en cuestión, pero no ocurre así: Hay que hacer clic en alguna de las etiquetas de la leyenda, por ejemplo, para que esto ocurra. Hay ciertas opciones para configurar las selecciones en <em>Formato > Multiselect</em>.
Por otro lado, la selección de uno de los recursos en otra visualización sí va a filtrar el <em>As Timeline</em>.
Una limitación de la visualización tiene que ver con el período siendo mostrado: si incluimos asignaciones de períodos lejanos, se muestran todos, con independencia de la escala que haya que aplicar. Por ejemplo, si una de las asignaciones de los datos con los que estamos trabajando se ha retrasado un año, la visualización muestra el siguiente aspecto:
La opción más conveniente es recurrir a una segmentación temporal adicional.
Otro factor a considerar es que el campo a llevar a <em>End Date</em> no es la última fecha en la que el recurso en cuestión está asignado, sino el primer día en el que ya no lo está. Por ejemplo, si un recurso está asignado solo un día, el 5/7/2019, habría que llevar a <em>Start Date</em> el valor 5/7/2019 y a End Date el valor 6/7/2019. De otra forma no se mostraría en la gráfica.
Aun con algunas limitaciones, se trata de una visualización muy práctica y recomendable.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterTags is deprecated in Drupal\Core\Database\Query\Select->addTag() (line 149 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addTag('file_load_multiple') (Line: 696)
Drupal\Core\Entity\Sql\SqlContentEntityStorage->buildQuery(Array) (Line: 422)
Drupal\Core\Entity\Sql\SqlContentEntityStorage->getFromStorage(Array) (Line: 393)
Drupal\Core\Entity\Sql\SqlContentEntityStorage->doLoadMultiple(Array) (Line: 346)
Drupal\Core\Entity\EntityStorageBase->loadMultiple(Array) (Line: 641)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', '99fb6570-a29a-401d-bbfc-a54c47070870') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('La visualización <strong>As Timeline</strong> nos permite llevar a una línea de tiempo diferentes elementos caracterizados por una fecha de arranque y otra de finalización. La configuración es, además, muy sencilla e intuitiva.
Los datos con que queremos representar son los siguientes:
El campo <em>Employee Id</em> está asociado a una tabla de empleados en la que se incluyen, entre otros datos, el nombre del empleado (campo <em>Full Name</em>) y el departamento al que pertenece (campo <em>Department</em>).
Los campos que controlan la configuración de la visualización son los mostrados en la siguiente imagen:
Tras crear una instancia de la visualización, arrastremos el campo <em>Full Name</em> (nombre del empleado) al campo de la visualización <em>Entity</em>, y los campos <em>Start</em> y <em>End</em> de nuestro modelo de datos a los campos <em>Start Date</em> y <em>End Date</em> de la visualización, respectivamente. La visualización muestra el siguiente aspecto:
Es decir, con un par de clics ya tenemos una representación temporal de las asignaciones a los empleados en cuestión.
Es posible añadir una dimensión adicional que nos permita clasificar nuestros "recursos" (empleados en este ejemplo) utilizando el campo de la visualización <em>Category</em>. Llevemos a este campo el campo <em>Department</em> de nuestra tabla de datos, campo que contiene el departamento al que pertenece cada empleado. Téngase en cuenta que cada empleado pertenece a un único departamento:
Vemos que se ha añadido la "categoría" a las etiquetas de los empleados. Esto es configurable en <em>Formato > Behavior > Stacked</em> (véase siguiente imagen). Por otro lado, al mover el cursor encima de una de las barras horizontales asociadas a un empleado se muestra la información asociada:
Sin embargo, si la "categoría" añadida no es única para cada empleado, el comportamiento de la visualización cambia. Supongamos que nuestro empleados van a trabajar en el proyecto tanto como beta-testers como desarrolladores, y que cada una de las asignaciones (periodos de tiempo) los van a asociar a uno de los dos roles. Activemos la opción <em>Stacked</em> que hemos visto en <em>Formato > Behavior</em> y llevemos al campo <em>Category</em> de la visualización el campo <em>Role</em> de nuestra tabla:
Ahora la visualización está mostrando una fila para cada una de las combinaciones de empleado y role. Si desactivamos la opción <em>Stacked</em>, las filas correspondientes a cada empleado se muestran solapadas:
Podemos llevar al campo <em>Overlay</em> campos (uno o más) que queramos que se muestren sobre las barras. Por ejemplo, si llevamos el identificador del empleado, el resultado es el siguiente:
Estas etiquetas que se muestran son configurables en <em>Formato > Overlay text options</em>. El orden en el que se muestran dentro de una barra, sin embargo, es automático (no coincide con el orden en el que llevamos los campos de nuestro modelo de datos al campo de la visualización)
Las selecciones no tienen un comportamiento especialmente lógico: un clic en uno de los nombres de los empleados (cabeceras de filas) no filtra la tabla de empleados ni el resto de visualizaciones que haya en nuestro informe (de hecho la visualización se reordena de forma un tanto inexplicable al hacer clic en una de estas cabeceras). Pero un clic en una de las barras horizontales sí lo hace. Un segundo clic en la misma barra debería deseleccionar al empleado en cuestión, pero no ocurre así: Hay que hacer clic en alguna de las etiquetas de la leyenda, por ejemplo, para que esto ocurra. Hay ciertas opciones para configurar las selecciones en <em>Formato > Multiselect</em>.
Por otro lado, la selección de uno de los recursos en otra visualización sí va a filtrar el <em>As Timeline</em>.
Una limitación de la visualización tiene que ver con el período siendo mostrado: si incluimos asignaciones de períodos lejanos, se muestran todos, con independencia de la escala que haya que aplicar. Por ejemplo, si una de las asignaciones de los datos con los que estamos trabajando se ha retrasado un año, la visualización muestra el siguiente aspecto:
La opción más conveniente es recurrir a una segmentación temporal adicional.
Otro factor a considerar es que el campo a llevar a <em>End Date</em> no es la última fecha en la que el recurso en cuestión está asignado, sino el primer día en el que ya no lo está. Por ejemplo, si un recurso está asignado solo un día, el 5/7/2019, habría que llevar a <em>Start Date</em> el valor 5/7/2019 y a End Date el valor 6/7/2019. De otra forma no se mostraría en la gráfica.
Aun con algunas limitaciones, se trata de una visualización muy práctica y recomendable.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterMetaData is deprecated in Drupal\Core\Database\Query\Select->addMetaData() (line 178 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addMetaData('entity_type', 'file') (Line: 115)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', '99fb6570-a29a-401d-bbfc-a54c47070870') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('La visualización <strong>As Timeline</strong> nos permite llevar a una línea de tiempo diferentes elementos caracterizados por una fecha de arranque y otra de finalización. La configuración es, además, muy sencilla e intuitiva.
Los datos con que queremos representar son los siguientes:
El campo <em>Employee Id</em> está asociado a una tabla de empleados en la que se incluyen, entre otros datos, el nombre del empleado (campo <em>Full Name</em>) y el departamento al que pertenece (campo <em>Department</em>).
Los campos que controlan la configuración de la visualización son los mostrados en la siguiente imagen:
Tras crear una instancia de la visualización, arrastremos el campo <em>Full Name</em> (nombre del empleado) al campo de la visualización <em>Entity</em>, y los campos <em>Start</em> y <em>End</em> de nuestro modelo de datos a los campos <em>Start Date</em> y <em>End Date</em> de la visualización, respectivamente. La visualización muestra el siguiente aspecto:
Es decir, con un par de clics ya tenemos una representación temporal de las asignaciones a los empleados en cuestión.
Es posible añadir una dimensión adicional que nos permita clasificar nuestros "recursos" (empleados en este ejemplo) utilizando el campo de la visualización <em>Category</em>. Llevemos a este campo el campo <em>Department</em> de nuestra tabla de datos, campo que contiene el departamento al que pertenece cada empleado. Téngase en cuenta que cada empleado pertenece a un único departamento:
Vemos que se ha añadido la "categoría" a las etiquetas de los empleados. Esto es configurable en <em>Formato > Behavior > Stacked</em> (véase siguiente imagen). Por otro lado, al mover el cursor encima de una de las barras horizontales asociadas a un empleado se muestra la información asociada:
Sin embargo, si la "categoría" añadida no es única para cada empleado, el comportamiento de la visualización cambia. Supongamos que nuestro empleados van a trabajar en el proyecto tanto como beta-testers como desarrolladores, y que cada una de las asignaciones (periodos de tiempo) los van a asociar a uno de los dos roles. Activemos la opción <em>Stacked</em> que hemos visto en <em>Formato > Behavior</em> y llevemos al campo <em>Category</em> de la visualización el campo <em>Role</em> de nuestra tabla:
Ahora la visualización está mostrando una fila para cada una de las combinaciones de empleado y role. Si desactivamos la opción <em>Stacked</em>, las filas correspondientes a cada empleado se muestran solapadas:
Podemos llevar al campo <em>Overlay</em> campos (uno o más) que queramos que se muestren sobre las barras. Por ejemplo, si llevamos el identificador del empleado, el resultado es el siguiente:
Estas etiquetas que se muestran son configurables en <em>Formato > Overlay text options</em>. El orden en el que se muestran dentro de una barra, sin embargo, es automático (no coincide con el orden en el que llevamos los campos de nuestro modelo de datos al campo de la visualización)
Las selecciones no tienen un comportamiento especialmente lógico: un clic en uno de los nombres de los empleados (cabeceras de filas) no filtra la tabla de empleados ni el resto de visualizaciones que haya en nuestro informe (de hecho la visualización se reordena de forma un tanto inexplicable al hacer clic en una de estas cabeceras). Pero un clic en una de las barras horizontales sí lo hace. Un segundo clic en la misma barra debería deseleccionar al empleado en cuestión, pero no ocurre así: Hay que hacer clic en alguna de las etiquetas de la leyenda, por ejemplo, para que esto ocurra. Hay ciertas opciones para configurar las selecciones en <em>Formato > Multiselect</em>.
Por otro lado, la selección de uno de los recursos en otra visualización sí va a filtrar el <em>As Timeline</em>.
Una limitación de la visualización tiene que ver con el período siendo mostrado: si incluimos asignaciones de períodos lejanos, se muestran todos, con independencia de la escala que haya que aplicar. Por ejemplo, si una de las asignaciones de los datos con los que estamos trabajando se ha retrasado un año, la visualización muestra el siguiente aspecto:
La opción más conveniente es recurrir a una segmentación temporal adicional.
Otro factor a considerar es que el campo a llevar a <em>End Date</em> no es la última fecha en la que el recurso en cuestión está asignado, sino el primer día en el que ya no lo está. Por ejemplo, si un recurso está asignado solo un día, el 5/7/2019, habría que llevar a <em>Start Date</em> el valor 5/7/2019 y a End Date el valor 6/7/2019. De otra forma no se mostraría en la gráfica.
Aun con algunas limitaciones, se trata de una visualización muy práctica y recomendable.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterTags is deprecated in Drupal\Core\Database\Query\Select->addTag() (line 149 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addTag('entity_query') (Line: 147)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', '99fb6570-a29a-401d-bbfc-a54c47070870') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('La visualización <strong>As Timeline</strong> nos permite llevar a una línea de tiempo diferentes elementos caracterizados por una fecha de arranque y otra de finalización. La configuración es, además, muy sencilla e intuitiva.
Los datos con que queremos representar son los siguientes:
El campo <em>Employee Id</em> está asociado a una tabla de empleados en la que se incluyen, entre otros datos, el nombre del empleado (campo <em>Full Name</em>) y el departamento al que pertenece (campo <em>Department</em>).
Los campos que controlan la configuración de la visualización son los mostrados en la siguiente imagen:
Tras crear una instancia de la visualización, arrastremos el campo <em>Full Name</em> (nombre del empleado) al campo de la visualización <em>Entity</em>, y los campos <em>Start</em> y <em>End</em> de nuestro modelo de datos a los campos <em>Start Date</em> y <em>End Date</em> de la visualización, respectivamente. La visualización muestra el siguiente aspecto:
Es decir, con un par de clics ya tenemos una representación temporal de las asignaciones a los empleados en cuestión.
Es posible añadir una dimensión adicional que nos permita clasificar nuestros "recursos" (empleados en este ejemplo) utilizando el campo de la visualización <em>Category</em>. Llevemos a este campo el campo <em>Department</em> de nuestra tabla de datos, campo que contiene el departamento al que pertenece cada empleado. Téngase en cuenta que cada empleado pertenece a un único departamento:
Vemos que se ha añadido la "categoría" a las etiquetas de los empleados. Esto es configurable en <em>Formato > Behavior > Stacked</em> (véase siguiente imagen). Por otro lado, al mover el cursor encima de una de las barras horizontales asociadas a un empleado se muestra la información asociada:
Sin embargo, si la "categoría" añadida no es única para cada empleado, el comportamiento de la visualización cambia. Supongamos que nuestro empleados van a trabajar en el proyecto tanto como beta-testers como desarrolladores, y que cada una de las asignaciones (periodos de tiempo) los van a asociar a uno de los dos roles. Activemos la opción <em>Stacked</em> que hemos visto en <em>Formato > Behavior</em> y llevemos al campo <em>Category</em> de la visualización el campo <em>Role</em> de nuestra tabla:
Ahora la visualización está mostrando una fila para cada una de las combinaciones de empleado y role. Si desactivamos la opción <em>Stacked</em>, las filas correspondientes a cada empleado se muestran solapadas:
Podemos llevar al campo <em>Overlay</em> campos (uno o más) que queramos que se muestren sobre las barras. Por ejemplo, si llevamos el identificador del empleado, el resultado es el siguiente:
Estas etiquetas que se muestran son configurables en <em>Formato > Overlay text options</em>. El orden en el que se muestran dentro de una barra, sin embargo, es automático (no coincide con el orden en el que llevamos los campos de nuestro modelo de datos al campo de la visualización)
Las selecciones no tienen un comportamiento especialmente lógico: un clic en uno de los nombres de los empleados (cabeceras de filas) no filtra la tabla de empleados ni el resto de visualizaciones que haya en nuestro informe (de hecho la visualización se reordena de forma un tanto inexplicable al hacer clic en una de estas cabeceras). Pero un clic en una de las barras horizontales sí lo hace. Un segundo clic en la misma barra debería deseleccionar al empleado en cuestión, pero no ocurre así: Hay que hacer clic en alguna de las etiquetas de la leyenda, por ejemplo, para que esto ocurra. Hay ciertas opciones para configurar las selecciones en <em>Formato > Multiselect</em>.
Por otro lado, la selección de uno de los recursos en otra visualización sí va a filtrar el <em>As Timeline</em>.
Una limitación de la visualización tiene que ver con el período siendo mostrado: si incluimos asignaciones de períodos lejanos, se muestran todos, con independencia de la escala que haya que aplicar. Por ejemplo, si una de las asignaciones de los datos con los que estamos trabajando se ha retrasado un año, la visualización muestra el siguiente aspecto:
La opción más conveniente es recurrir a una segmentación temporal adicional.
Otro factor a considerar es que el campo a llevar a <em>End Date</em> no es la última fecha en la que el recurso en cuestión está asignado, sino el primer día en el que ya no lo está. Por ejemplo, si un recurso está asignado solo un día, el 5/7/2019, habría que llevar a <em>Start Date</em> el valor 5/7/2019 y a End Date el valor 6/7/2019. De otra forma no se mostraría en la gráfica.
Aun con algunas limitaciones, se trata de una visualización muy práctica y recomendable.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterMetaData is deprecated in Drupal\Core\Database\Query\Select->addMetaData() (line 178 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addMetaData('entity_type', 'file') (Line: 115)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'f81e0428-b518-4cb4-98b8-3d6873960a01') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('La visualización <strong>As Timeline</strong> nos permite llevar a una línea de tiempo diferentes elementos caracterizados por una fecha de arranque y otra de finalización. La configuración es, además, muy sencilla e intuitiva.
Los datos con que queremos representar son los siguientes:
El campo <em>Employee Id</em> está asociado a una tabla de empleados en la que se incluyen, entre otros datos, el nombre del empleado (campo <em>Full Name</em>) y el departamento al que pertenece (campo <em>Department</em>).
Los campos que controlan la configuración de la visualización son los mostrados en la siguiente imagen:
Tras crear una instancia de la visualización, arrastremos el campo <em>Full Name</em> (nombre del empleado) al campo de la visualización <em>Entity</em>, y los campos <em>Start</em> y <em>End</em> de nuestro modelo de datos a los campos <em>Start Date</em> y <em>End Date</em> de la visualización, respectivamente. La visualización muestra el siguiente aspecto:
Es decir, con un par de clics ya tenemos una representación temporal de las asignaciones a los empleados en cuestión.
Es posible añadir una dimensión adicional que nos permita clasificar nuestros "recursos" (empleados en este ejemplo) utilizando el campo de la visualización <em>Category</em>. Llevemos a este campo el campo <em>Department</em> de nuestra tabla de datos, campo que contiene el departamento al que pertenece cada empleado. Téngase en cuenta que cada empleado pertenece a un único departamento:
Vemos que se ha añadido la "categoría" a las etiquetas de los empleados. Esto es configurable en <em>Formato > Behavior > Stacked</em> (véase siguiente imagen). Por otro lado, al mover el cursor encima de una de las barras horizontales asociadas a un empleado se muestra la información asociada:
Sin embargo, si la "categoría" añadida no es única para cada empleado, el comportamiento de la visualización cambia. Supongamos que nuestro empleados van a trabajar en el proyecto tanto como beta-testers como desarrolladores, y que cada una de las asignaciones (periodos de tiempo) los van a asociar a uno de los dos roles. Activemos la opción <em>Stacked</em> que hemos visto en <em>Formato > Behavior</em> y llevemos al campo <em>Category</em> de la visualización el campo <em>Role</em> de nuestra tabla:
Ahora la visualización está mostrando una fila para cada una de las combinaciones de empleado y role. Si desactivamos la opción <em>Stacked</em>, las filas correspondientes a cada empleado se muestran solapadas:
Podemos llevar al campo <em>Overlay</em> campos (uno o más) que queramos que se muestren sobre las barras. Por ejemplo, si llevamos el identificador del empleado, el resultado es el siguiente:
Estas etiquetas que se muestran son configurables en <em>Formato > Overlay text options</em>. El orden en el que se muestran dentro de una barra, sin embargo, es automático (no coincide con el orden en el que llevamos los campos de nuestro modelo de datos al campo de la visualización)
Las selecciones no tienen un comportamiento especialmente lógico: un clic en uno de los nombres de los empleados (cabeceras de filas) no filtra la tabla de empleados ni el resto de visualizaciones que haya en nuestro informe (de hecho la visualización se reordena de forma un tanto inexplicable al hacer clic en una de estas cabeceras). Pero un clic en una de las barras horizontales sí lo hace. Un segundo clic en la misma barra debería deseleccionar al empleado en cuestión, pero no ocurre así: Hay que hacer clic en alguna de las etiquetas de la leyenda, por ejemplo, para que esto ocurra. Hay ciertas opciones para configurar las selecciones en <em>Formato > Multiselect</em>.
Por otro lado, la selección de uno de los recursos en otra visualización sí va a filtrar el <em>As Timeline</em>.
Una limitación de la visualización tiene que ver con el período siendo mostrado: si incluimos asignaciones de períodos lejanos, se muestran todos, con independencia de la escala que haya que aplicar. Por ejemplo, si una de las asignaciones de los datos con los que estamos trabajando se ha retrasado un año, la visualización muestra el siguiente aspecto:
La opción más conveniente es recurrir a una segmentación temporal adicional.
Otro factor a considerar es que el campo a llevar a <em>End Date</em> no es la última fecha en la que el recurso en cuestión está asignado, sino el primer día en el que ya no lo está. Por ejemplo, si un recurso está asignado solo un día, el 5/7/2019, habría que llevar a <em>Start Date</em> el valor 5/7/2019 y a End Date el valor 6/7/2019. De otra forma no se mostraría en la gráfica.
Aun con algunas limitaciones, se trata de una visualización muy práctica y recomendable.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterTags is deprecated in Drupal\Core\Database\Query\Select->addTag() (line 149 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addTag('entity_query') (Line: 147)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'f81e0428-b518-4cb4-98b8-3d6873960a01') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('La visualización <strong>As Timeline</strong> nos permite llevar a una línea de tiempo diferentes elementos caracterizados por una fecha de arranque y otra de finalización. La configuración es, además, muy sencilla e intuitiva.
Los datos con que queremos representar son los siguientes:
El campo <em>Employee Id</em> está asociado a una tabla de empleados en la que se incluyen, entre otros datos, el nombre del empleado (campo <em>Full Name</em>) y el departamento al que pertenece (campo <em>Department</em>).
Los campos que controlan la configuración de la visualización son los mostrados en la siguiente imagen:
Tras crear una instancia de la visualización, arrastremos el campo <em>Full Name</em> (nombre del empleado) al campo de la visualización <em>Entity</em>, y los campos <em>Start</em> y <em>End</em> de nuestro modelo de datos a los campos <em>Start Date</em> y <em>End Date</em> de la visualización, respectivamente. La visualización muestra el siguiente aspecto:
Es decir, con un par de clics ya tenemos una representación temporal de las asignaciones a los empleados en cuestión.
Es posible añadir una dimensión adicional que nos permita clasificar nuestros "recursos" (empleados en este ejemplo) utilizando el campo de la visualización <em>Category</em>. Llevemos a este campo el campo <em>Department</em> de nuestra tabla de datos, campo que contiene el departamento al que pertenece cada empleado. Téngase en cuenta que cada empleado pertenece a un único departamento:
Vemos que se ha añadido la "categoría" a las etiquetas de los empleados. Esto es configurable en <em>Formato > Behavior > Stacked</em> (véase siguiente imagen). Por otro lado, al mover el cursor encima de una de las barras horizontales asociadas a un empleado se muestra la información asociada:
Sin embargo, si la "categoría" añadida no es única para cada empleado, el comportamiento de la visualización cambia. Supongamos que nuestro empleados van a trabajar en el proyecto tanto como beta-testers como desarrolladores, y que cada una de las asignaciones (periodos de tiempo) los van a asociar a uno de los dos roles. Activemos la opción <em>Stacked</em> que hemos visto en <em>Formato > Behavior</em> y llevemos al campo <em>Category</em> de la visualización el campo <em>Role</em> de nuestra tabla:
Ahora la visualización está mostrando una fila para cada una de las combinaciones de empleado y role. Si desactivamos la opción <em>Stacked</em>, las filas correspondientes a cada empleado se muestran solapadas:
Podemos llevar al campo <em>Overlay</em> campos (uno o más) que queramos que se muestren sobre las barras. Por ejemplo, si llevamos el identificador del empleado, el resultado es el siguiente:
Estas etiquetas que se muestran son configurables en <em>Formato > Overlay text options</em>. El orden en el que se muestran dentro de una barra, sin embargo, es automático (no coincide con el orden en el que llevamos los campos de nuestro modelo de datos al campo de la visualización)
Las selecciones no tienen un comportamiento especialmente lógico: un clic en uno de los nombres de los empleados (cabeceras de filas) no filtra la tabla de empleados ni el resto de visualizaciones que haya en nuestro informe (de hecho la visualización se reordena de forma un tanto inexplicable al hacer clic en una de estas cabeceras). Pero un clic en una de las barras horizontales sí lo hace. Un segundo clic en la misma barra debería deseleccionar al empleado en cuestión, pero no ocurre así: Hay que hacer clic en alguna de las etiquetas de la leyenda, por ejemplo, para que esto ocurra. Hay ciertas opciones para configurar las selecciones en <em>Formato > Multiselect</em>.
Por otro lado, la selección de uno de los recursos en otra visualización sí va a filtrar el <em>As Timeline</em>.
Una limitación de la visualización tiene que ver con el período siendo mostrado: si incluimos asignaciones de períodos lejanos, se muestran todos, con independencia de la escala que haya que aplicar. Por ejemplo, si una de las asignaciones de los datos con los que estamos trabajando se ha retrasado un año, la visualización muestra el siguiente aspecto:
La opción más conveniente es recurrir a una segmentación temporal adicional.
Otro factor a considerar es que el campo a llevar a <em>End Date</em> no es la última fecha en la que el recurso en cuestión está asignado, sino el primer día en el que ya no lo está. Por ejemplo, si un recurso está asignado solo un día, el 5/7/2019, habría que llevar a <em>Start Date</em> el valor 5/7/2019 y a End Date el valor 6/7/2019. De otra forma no se mostraría en la gráfica.
Aun con algunas limitaciones, se trata de una visualización muy práctica y recomendable.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterTags is deprecated in Drupal\Core\Database\Query\Select->addTag() (line 149 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addTag('file_load_multiple') (Line: 696)
Drupal\Core\Entity\Sql\SqlContentEntityStorage->buildQuery(Array) (Line: 422)
Drupal\Core\Entity\Sql\SqlContentEntityStorage->getFromStorage(Array) (Line: 393)
Drupal\Core\Entity\Sql\SqlContentEntityStorage->doLoadMultiple(Array) (Line: 346)
Drupal\Core\Entity\EntityStorageBase->loadMultiple(Array) (Line: 641)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'f81e0428-b518-4cb4-98b8-3d6873960a01') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('La visualización <strong>As Timeline</strong> nos permite llevar a una línea de tiempo diferentes elementos caracterizados por una fecha de arranque y otra de finalización. La configuración es, además, muy sencilla e intuitiva.
Los datos con que queremos representar son los siguientes:
El campo <em>Employee Id</em> está asociado a una tabla de empleados en la que se incluyen, entre otros datos, el nombre del empleado (campo <em>Full Name</em>) y el departamento al que pertenece (campo <em>Department</em>).
Los campos que controlan la configuración de la visualización son los mostrados en la siguiente imagen:
Tras crear una instancia de la visualización, arrastremos el campo <em>Full Name</em> (nombre del empleado) al campo de la visualización <em>Entity</em>, y los campos <em>Start</em> y <em>End</em> de nuestro modelo de datos a los campos <em>Start Date</em> y <em>End Date</em> de la visualización, respectivamente. La visualización muestra el siguiente aspecto:
Es decir, con un par de clics ya tenemos una representación temporal de las asignaciones a los empleados en cuestión.
Es posible añadir una dimensión adicional que nos permita clasificar nuestros "recursos" (empleados en este ejemplo) utilizando el campo de la visualización <em>Category</em>. Llevemos a este campo el campo <em>Department</em> de nuestra tabla de datos, campo que contiene el departamento al que pertenece cada empleado. Téngase en cuenta que cada empleado pertenece a un único departamento:
Vemos que se ha añadido la "categoría" a las etiquetas de los empleados. Esto es configurable en <em>Formato > Behavior > Stacked</em> (véase siguiente imagen). Por otro lado, al mover el cursor encima de una de las barras horizontales asociadas a un empleado se muestra la información asociada:
Sin embargo, si la "categoría" añadida no es única para cada empleado, el comportamiento de la visualización cambia. Supongamos que nuestro empleados van a trabajar en el proyecto tanto como beta-testers como desarrolladores, y que cada una de las asignaciones (periodos de tiempo) los van a asociar a uno de los dos roles. Activemos la opción <em>Stacked</em> que hemos visto en <em>Formato > Behavior</em> y llevemos al campo <em>Category</em> de la visualización el campo <em>Role</em> de nuestra tabla:
Ahora la visualización está mostrando una fila para cada una de las combinaciones de empleado y role. Si desactivamos la opción <em>Stacked</em>, las filas correspondientes a cada empleado se muestran solapadas:
Podemos llevar al campo <em>Overlay</em> campos (uno o más) que queramos que se muestren sobre las barras. Por ejemplo, si llevamos el identificador del empleado, el resultado es el siguiente:
Estas etiquetas que se muestran son configurables en <em>Formato > Overlay text options</em>. El orden en el que se muestran dentro de una barra, sin embargo, es automático (no coincide con el orden en el que llevamos los campos de nuestro modelo de datos al campo de la visualización)
Las selecciones no tienen un comportamiento especialmente lógico: un clic en uno de los nombres de los empleados (cabeceras de filas) no filtra la tabla de empleados ni el resto de visualizaciones que haya en nuestro informe (de hecho la visualización se reordena de forma un tanto inexplicable al hacer clic en una de estas cabeceras). Pero un clic en una de las barras horizontales sí lo hace. Un segundo clic en la misma barra debería deseleccionar al empleado en cuestión, pero no ocurre así: Hay que hacer clic en alguna de las etiquetas de la leyenda, por ejemplo, para que esto ocurra. Hay ciertas opciones para configurar las selecciones en <em>Formato > Multiselect</em>.
Por otro lado, la selección de uno de los recursos en otra visualización sí va a filtrar el <em>As Timeline</em>.
Una limitación de la visualización tiene que ver con el período siendo mostrado: si incluimos asignaciones de períodos lejanos, se muestran todos, con independencia de la escala que haya que aplicar. Por ejemplo, si una de las asignaciones de los datos con los que estamos trabajando se ha retrasado un año, la visualización muestra el siguiente aspecto:
La opción más conveniente es recurrir a una segmentación temporal adicional.
Otro factor a considerar es que el campo a llevar a <em>End Date</em> no es la última fecha en la que el recurso en cuestión está asignado, sino el primer día en el que ya no lo está. Por ejemplo, si un recurso está asignado solo un día, el 5/7/2019, habría que llevar a <em>Start Date</em> el valor 5/7/2019 y a End Date el valor 6/7/2019. De otra forma no se mostraría en la gráfica.
Aun con algunas limitaciones, se trata de una visualización muy práctica y recomendable.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterMetaData is deprecated in Drupal\Core\Database\Query\Select->addMetaData() (line 178 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addMetaData('entity_type', 'file') (Line: 115)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'f81e0428-b518-4cb4-98b8-3d6873960a01') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('La visualización <strong>As Timeline</strong> nos permite llevar a una línea de tiempo diferentes elementos caracterizados por una fecha de arranque y otra de finalización. La configuración es, además, muy sencilla e intuitiva.
Los datos con que queremos representar son los siguientes:
El campo <em>Employee Id</em> está asociado a una tabla de empleados en la que se incluyen, entre otros datos, el nombre del empleado (campo <em>Full Name</em>) y el departamento al que pertenece (campo <em>Department</em>).
Los campos que controlan la configuración de la visualización son los mostrados en la siguiente imagen:
Tras crear una instancia de la visualización, arrastremos el campo <em>Full Name</em> (nombre del empleado) al campo de la visualización <em>Entity</em>, y los campos <em>Start</em> y <em>End</em> de nuestro modelo de datos a los campos <em>Start Date</em> y <em>End Date</em> de la visualización, respectivamente. La visualización muestra el siguiente aspecto:
Es decir, con un par de clics ya tenemos una representación temporal de las asignaciones a los empleados en cuestión.
Es posible añadir una dimensión adicional que nos permita clasificar nuestros "recursos" (empleados en este ejemplo) utilizando el campo de la visualización <em>Category</em>. Llevemos a este campo el campo <em>Department</em> de nuestra tabla de datos, campo que contiene el departamento al que pertenece cada empleado. Téngase en cuenta que cada empleado pertenece a un único departamento:
Vemos que se ha añadido la "categoría" a las etiquetas de los empleados. Esto es configurable en <em>Formato > Behavior > Stacked</em> (véase siguiente imagen). Por otro lado, al mover el cursor encima de una de las barras horizontales asociadas a un empleado se muestra la información asociada:
Sin embargo, si la "categoría" añadida no es única para cada empleado, el comportamiento de la visualización cambia. Supongamos que nuestro empleados van a trabajar en el proyecto tanto como beta-testers como desarrolladores, y que cada una de las asignaciones (periodos de tiempo) los van a asociar a uno de los dos roles. Activemos la opción <em>Stacked</em> que hemos visto en <em>Formato > Behavior</em> y llevemos al campo <em>Category</em> de la visualización el campo <em>Role</em> de nuestra tabla:
Ahora la visualización está mostrando una fila para cada una de las combinaciones de empleado y role. Si desactivamos la opción <em>Stacked</em>, las filas correspondientes a cada empleado se muestran solapadas:
Podemos llevar al campo <em>Overlay</em> campos (uno o más) que queramos que se muestren sobre las barras. Por ejemplo, si llevamos el identificador del empleado, el resultado es el siguiente:
Estas etiquetas que se muestran son configurables en <em>Formato > Overlay text options</em>. El orden en el que se muestran dentro de una barra, sin embargo, es automático (no coincide con el orden en el que llevamos los campos de nuestro modelo de datos al campo de la visualización)
Las selecciones no tienen un comportamiento especialmente lógico: un clic en uno de los nombres de los empleados (cabeceras de filas) no filtra la tabla de empleados ni el resto de visualizaciones que haya en nuestro informe (de hecho la visualización se reordena de forma un tanto inexplicable al hacer clic en una de estas cabeceras). Pero un clic en una de las barras horizontales sí lo hace. Un segundo clic en la misma barra debería deseleccionar al empleado en cuestión, pero no ocurre así: Hay que hacer clic en alguna de las etiquetas de la leyenda, por ejemplo, para que esto ocurra. Hay ciertas opciones para configurar las selecciones en <em>Formato > Multiselect</em>.
Por otro lado, la selección de uno de los recursos en otra visualización sí va a filtrar el <em>As Timeline</em>.
Una limitación de la visualización tiene que ver con el período siendo mostrado: si incluimos asignaciones de períodos lejanos, se muestran todos, con independencia de la escala que haya que aplicar. Por ejemplo, si una de las asignaciones de los datos con los que estamos trabajando se ha retrasado un año, la visualización muestra el siguiente aspecto:
La opción más conveniente es recurrir a una segmentación temporal adicional.
Otro factor a considerar es que el campo a llevar a <em>End Date</em> no es la última fecha en la que el recurso en cuestión está asignado, sino el primer día en el que ya no lo está. Por ejemplo, si un recurso está asignado solo un día, el 5/7/2019, habría que llevar a <em>Start Date</em> el valor 5/7/2019 y a End Date el valor 6/7/2019. De otra forma no se mostraría en la gráfica.
Aun con algunas limitaciones, se trata de una visualización muy práctica y recomendable.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterTags is deprecated in Drupal\Core\Database\Query\Select->addTag() (line 149 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addTag('entity_query') (Line: 147)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'f81e0428-b518-4cb4-98b8-3d6873960a01') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('La visualización <strong>As Timeline</strong> nos permite llevar a una línea de tiempo diferentes elementos caracterizados por una fecha de arranque y otra de finalización. La configuración es, además, muy sencilla e intuitiva.
Los datos con que queremos representar son los siguientes:
El campo <em>Employee Id</em> está asociado a una tabla de empleados en la que se incluyen, entre otros datos, el nombre del empleado (campo <em>Full Name</em>) y el departamento al que pertenece (campo <em>Department</em>).
Los campos que controlan la configuración de la visualización son los mostrados en la siguiente imagen:
Tras crear una instancia de la visualización, arrastremos el campo <em>Full Name</em> (nombre del empleado) al campo de la visualización <em>Entity</em>, y los campos <em>Start</em> y <em>End</em> de nuestro modelo de datos a los campos <em>Start Date</em> y <em>End Date</em> de la visualización, respectivamente. La visualización muestra el siguiente aspecto:
Es decir, con un par de clics ya tenemos una representación temporal de las asignaciones a los empleados en cuestión.
Es posible añadir una dimensión adicional que nos permita clasificar nuestros "recursos" (empleados en este ejemplo) utilizando el campo de la visualización <em>Category</em>. Llevemos a este campo el campo <em>Department</em> de nuestra tabla de datos, campo que contiene el departamento al que pertenece cada empleado. Téngase en cuenta que cada empleado pertenece a un único departamento:
Vemos que se ha añadido la "categoría" a las etiquetas de los empleados. Esto es configurable en <em>Formato > Behavior > Stacked</em> (véase siguiente imagen). Por otro lado, al mover el cursor encima de una de las barras horizontales asociadas a un empleado se muestra la información asociada:
Sin embargo, si la "categoría" añadida no es única para cada empleado, el comportamiento de la visualización cambia. Supongamos que nuestro empleados van a trabajar en el proyecto tanto como beta-testers como desarrolladores, y que cada una de las asignaciones (periodos de tiempo) los van a asociar a uno de los dos roles. Activemos la opción <em>Stacked</em> que hemos visto en <em>Formato > Behavior</em> y llevemos al campo <em>Category</em> de la visualización el campo <em>Role</em> de nuestra tabla:
Ahora la visualización está mostrando una fila para cada una de las combinaciones de empleado y role. Si desactivamos la opción <em>Stacked</em>, las filas correspondientes a cada empleado se muestran solapadas:
Podemos llevar al campo <em>Overlay</em> campos (uno o más) que queramos que se muestren sobre las barras. Por ejemplo, si llevamos el identificador del empleado, el resultado es el siguiente:
Estas etiquetas que se muestran son configurables en <em>Formato > Overlay text options</em>. El orden en el que se muestran dentro de una barra, sin embargo, es automático (no coincide con el orden en el que llevamos los campos de nuestro modelo de datos al campo de la visualización)
Las selecciones no tienen un comportamiento especialmente lógico: un clic en uno de los nombres de los empleados (cabeceras de filas) no filtra la tabla de empleados ni el resto de visualizaciones que haya en nuestro informe (de hecho la visualización se reordena de forma un tanto inexplicable al hacer clic en una de estas cabeceras). Pero un clic en una de las barras horizontales sí lo hace. Un segundo clic en la misma barra debería deseleccionar al empleado en cuestión, pero no ocurre así: Hay que hacer clic en alguna de las etiquetas de la leyenda, por ejemplo, para que esto ocurra. Hay ciertas opciones para configurar las selecciones en <em>Formato > Multiselect</em>.
Por otro lado, la selección de uno de los recursos en otra visualización sí va a filtrar el <em>As Timeline</em>.
Una limitación de la visualización tiene que ver con el período siendo mostrado: si incluimos asignaciones de períodos lejanos, se muestran todos, con independencia de la escala que haya que aplicar. Por ejemplo, si una de las asignaciones de los datos con los que estamos trabajando se ha retrasado un año, la visualización muestra el siguiente aspecto:
La opción más conveniente es recurrir a una segmentación temporal adicional.
Otro factor a considerar es que el campo a llevar a <em>End Date</em> no es la última fecha en la que el recurso en cuestión está asignado, sino el primer día en el que ya no lo está. Por ejemplo, si un recurso está asignado solo un día, el 5/7/2019, habría que llevar a <em>Start Date</em> el valor 5/7/2019 y a End Date el valor 6/7/2019. De otra forma no se mostraría en la gráfica.
Aun con algunas limitaciones, se trata de una visualización muy práctica y recomendable.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterMetaData is deprecated in Drupal\Core\Database\Query\Select->addMetaData() (line 178 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addMetaData('entity_type', 'file') (Line: 115)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', '9e553b17-59c7-4eee-8f95-db32dead548a') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('La visualización <strong>As Timeline</strong> nos permite llevar a una línea de tiempo diferentes elementos caracterizados por una fecha de arranque y otra de finalización. La configuración es, además, muy sencilla e intuitiva.
Los datos con que queremos representar son los siguientes:
El campo <em>Employee Id</em> está asociado a una tabla de empleados en la que se incluyen, entre otros datos, el nombre del empleado (campo <em>Full Name</em>) y el departamento al que pertenece (campo <em>Department</em>).
Los campos que controlan la configuración de la visualización son los mostrados en la siguiente imagen:
Tras crear una instancia de la visualización, arrastremos el campo <em>Full Name</em> (nombre del empleado) al campo de la visualización <em>Entity</em>, y los campos <em>Start</em> y <em>End</em> de nuestro modelo de datos a los campos <em>Start Date</em> y <em>End Date</em> de la visualización, respectivamente. La visualización muestra el siguiente aspecto:
Es decir, con un par de clics ya tenemos una representación temporal de las asignaciones a los empleados en cuestión.
Es posible añadir una dimensión adicional que nos permita clasificar nuestros "recursos" (empleados en este ejemplo) utilizando el campo de la visualización <em>Category</em>. Llevemos a este campo el campo <em>Department</em> de nuestra tabla de datos, campo que contiene el departamento al que pertenece cada empleado. Téngase en cuenta que cada empleado pertenece a un único departamento:
Vemos que se ha añadido la "categoría" a las etiquetas de los empleados. Esto es configurable en <em>Formato > Behavior > Stacked</em> (véase siguiente imagen). Por otro lado, al mover el cursor encima de una de las barras horizontales asociadas a un empleado se muestra la información asociada:
Sin embargo, si la "categoría" añadida no es única para cada empleado, el comportamiento de la visualización cambia. Supongamos que nuestro empleados van a trabajar en el proyecto tanto como beta-testers como desarrolladores, y que cada una de las asignaciones (periodos de tiempo) los van a asociar a uno de los dos roles. Activemos la opción <em>Stacked</em> que hemos visto en <em>Formato > Behavior</em> y llevemos al campo <em>Category</em> de la visualización el campo <em>Role</em> de nuestra tabla:
Ahora la visualización está mostrando una fila para cada una de las combinaciones de empleado y role. Si desactivamos la opción <em>Stacked</em>, las filas correspondientes a cada empleado se muestran solapadas:
Podemos llevar al campo <em>Overlay</em> campos (uno o más) que queramos que se muestren sobre las barras. Por ejemplo, si llevamos el identificador del empleado, el resultado es el siguiente:
Estas etiquetas que se muestran son configurables en <em>Formato > Overlay text options</em>. El orden en el que se muestran dentro de una barra, sin embargo, es automático (no coincide con el orden en el que llevamos los campos de nuestro modelo de datos al campo de la visualización)
Las selecciones no tienen un comportamiento especialmente lógico: un clic en uno de los nombres de los empleados (cabeceras de filas) no filtra la tabla de empleados ni el resto de visualizaciones que haya en nuestro informe (de hecho la visualización se reordena de forma un tanto inexplicable al hacer clic en una de estas cabeceras). Pero un clic en una de las barras horizontales sí lo hace. Un segundo clic en la misma barra debería deseleccionar al empleado en cuestión, pero no ocurre así: Hay que hacer clic en alguna de las etiquetas de la leyenda, por ejemplo, para que esto ocurra. Hay ciertas opciones para configurar las selecciones en <em>Formato > Multiselect</em>.
Por otro lado, la selección de uno de los recursos en otra visualización sí va a filtrar el <em>As Timeline</em>.
Una limitación de la visualización tiene que ver con el período siendo mostrado: si incluimos asignaciones de períodos lejanos, se muestran todos, con independencia de la escala que haya que aplicar. Por ejemplo, si una de las asignaciones de los datos con los que estamos trabajando se ha retrasado un año, la visualización muestra el siguiente aspecto:
La opción más conveniente es recurrir a una segmentación temporal adicional.
Otro factor a considerar es que el campo a llevar a <em>End Date</em> no es la última fecha en la que el recurso en cuestión está asignado, sino el primer día en el que ya no lo está. Por ejemplo, si un recurso está asignado solo un día, el 5/7/2019, habría que llevar a <em>Start Date</em> el valor 5/7/2019 y a End Date el valor 6/7/2019. De otra forma no se mostraría en la gráfica.
Aun con algunas limitaciones, se trata de una visualización muy práctica y recomendable.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterTags is deprecated in Drupal\Core\Database\Query\Select->addTag() (line 149 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addTag('entity_query') (Line: 147)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', '9e553b17-59c7-4eee-8f95-db32dead548a') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('La visualización <strong>As Timeline</strong> nos permite llevar a una línea de tiempo diferentes elementos caracterizados por una fecha de arranque y otra de finalización. La configuración es, además, muy sencilla e intuitiva.
Los datos con que queremos representar son los siguientes:
El campo <em>Employee Id</em> está asociado a una tabla de empleados en la que se incluyen, entre otros datos, el nombre del empleado (campo <em>Full Name</em>) y el departamento al que pertenece (campo <em>Department</em>).
Los campos que controlan la configuración de la visualización son los mostrados en la siguiente imagen:
Tras crear una instancia de la visualización, arrastremos el campo <em>Full Name</em> (nombre del empleado) al campo de la visualización <em>Entity</em>, y los campos <em>Start</em> y <em>End</em> de nuestro modelo de datos a los campos <em>Start Date</em> y <em>End Date</em> de la visualización, respectivamente. La visualización muestra el siguiente aspecto:
Es decir, con un par de clics ya tenemos una representación temporal de las asignaciones a los empleados en cuestión.
Es posible añadir una dimensión adicional que nos permita clasificar nuestros "recursos" (empleados en este ejemplo) utilizando el campo de la visualización <em>Category</em>. Llevemos a este campo el campo <em>Department</em> de nuestra tabla de datos, campo que contiene el departamento al que pertenece cada empleado. Téngase en cuenta que cada empleado pertenece a un único departamento:
Vemos que se ha añadido la "categoría" a las etiquetas de los empleados. Esto es configurable en <em>Formato > Behavior > Stacked</em> (véase siguiente imagen). Por otro lado, al mover el cursor encima de una de las barras horizontales asociadas a un empleado se muestra la información asociada:
Sin embargo, si la "categoría" añadida no es única para cada empleado, el comportamiento de la visualización cambia. Supongamos que nuestro empleados van a trabajar en el proyecto tanto como beta-testers como desarrolladores, y que cada una de las asignaciones (periodos de tiempo) los van a asociar a uno de los dos roles. Activemos la opción <em>Stacked</em> que hemos visto en <em>Formato > Behavior</em> y llevemos al campo <em>Category</em> de la visualización el campo <em>Role</em> de nuestra tabla:
Ahora la visualización está mostrando una fila para cada una de las combinaciones de empleado y role. Si desactivamos la opción <em>Stacked</em>, las filas correspondientes a cada empleado se muestran solapadas:
Podemos llevar al campo <em>Overlay</em> campos (uno o más) que queramos que se muestren sobre las barras. Por ejemplo, si llevamos el identificador del empleado, el resultado es el siguiente:
Estas etiquetas que se muestran son configurables en <em>Formato > Overlay text options</em>. El orden en el que se muestran dentro de una barra, sin embargo, es automático (no coincide con el orden en el que llevamos los campos de nuestro modelo de datos al campo de la visualización)
Las selecciones no tienen un comportamiento especialmente lógico: un clic en uno de los nombres de los empleados (cabeceras de filas) no filtra la tabla de empleados ni el resto de visualizaciones que haya en nuestro informe (de hecho la visualización se reordena de forma un tanto inexplicable al hacer clic en una de estas cabeceras). Pero un clic en una de las barras horizontales sí lo hace. Un segundo clic en la misma barra debería deseleccionar al empleado en cuestión, pero no ocurre así: Hay que hacer clic en alguna de las etiquetas de la leyenda, por ejemplo, para que esto ocurra. Hay ciertas opciones para configurar las selecciones en <em>Formato > Multiselect</em>.
Por otro lado, la selección de uno de los recursos en otra visualización sí va a filtrar el <em>As Timeline</em>.
Una limitación de la visualización tiene que ver con el período siendo mostrado: si incluimos asignaciones de períodos lejanos, se muestran todos, con independencia de la escala que haya que aplicar. Por ejemplo, si una de las asignaciones de los datos con los que estamos trabajando se ha retrasado un año, la visualización muestra el siguiente aspecto:
La opción más conveniente es recurrir a una segmentación temporal adicional.
Otro factor a considerar es que el campo a llevar a <em>End Date</em> no es la última fecha en la que el recurso en cuestión está asignado, sino el primer día en el que ya no lo está. Por ejemplo, si un recurso está asignado solo un día, el 5/7/2019, habría que llevar a <em>Start Date</em> el valor 5/7/2019 y a End Date el valor 6/7/2019. De otra forma no se mostraría en la gráfica.
Aun con algunas limitaciones, se trata de una visualización muy práctica y recomendable.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterTags is deprecated in Drupal\Core\Database\Query\Select->addTag() (line 149 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addTag('file_load_multiple') (Line: 696)
Drupal\Core\Entity\Sql\SqlContentEntityStorage->buildQuery(Array) (Line: 422)
Drupal\Core\Entity\Sql\SqlContentEntityStorage->getFromStorage(Array) (Line: 393)
Drupal\Core\Entity\Sql\SqlContentEntityStorage->doLoadMultiple(Array) (Line: 346)
Drupal\Core\Entity\EntityStorageBase->loadMultiple(Array) (Line: 641)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', '9e553b17-59c7-4eee-8f95-db32dead548a') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('La visualización <strong>As Timeline</strong> nos permite llevar a una línea de tiempo diferentes elementos caracterizados por una fecha de arranque y otra de finalización. La configuración es, además, muy sencilla e intuitiva.
Los datos con que queremos representar son los siguientes:
El campo <em>Employee Id</em> está asociado a una tabla de empleados en la que se incluyen, entre otros datos, el nombre del empleado (campo <em>Full Name</em>) y el departamento al que pertenece (campo <em>Department</em>).
Los campos que controlan la configuración de la visualización son los mostrados en la siguiente imagen:
Tras crear una instancia de la visualización, arrastremos el campo <em>Full Name</em> (nombre del empleado) al campo de la visualización <em>Entity</em>, y los campos <em>Start</em> y <em>End</em> de nuestro modelo de datos a los campos <em>Start Date</em> y <em>End Date</em> de la visualización, respectivamente. La visualización muestra el siguiente aspecto:
Es decir, con un par de clics ya tenemos una representación temporal de las asignaciones a los empleados en cuestión.
Es posible añadir una dimensión adicional que nos permita clasificar nuestros "recursos" (empleados en este ejemplo) utilizando el campo de la visualización <em>Category</em>. Llevemos a este campo el campo <em>Department</em> de nuestra tabla de datos, campo que contiene el departamento al que pertenece cada empleado. Téngase en cuenta que cada empleado pertenece a un único departamento:
Vemos que se ha añadido la "categoría" a las etiquetas de los empleados. Esto es configurable en <em>Formato > Behavior > Stacked</em> (véase siguiente imagen). Por otro lado, al mover el cursor encima de una de las barras horizontales asociadas a un empleado se muestra la información asociada:
Sin embargo, si la "categoría" añadida no es única para cada empleado, el comportamiento de la visualización cambia. Supongamos que nuestro empleados van a trabajar en el proyecto tanto como beta-testers como desarrolladores, y que cada una de las asignaciones (periodos de tiempo) los van a asociar a uno de los dos roles. Activemos la opción <em>Stacked</em> que hemos visto en <em>Formato > Behavior</em> y llevemos al campo <em>Category</em> de la visualización el campo <em>Role</em> de nuestra tabla:
Ahora la visualización está mostrando una fila para cada una de las combinaciones de empleado y role. Si desactivamos la opción <em>Stacked</em>, las filas correspondientes a cada empleado se muestran solapadas:
Podemos llevar al campo <em>Overlay</em> campos (uno o más) que queramos que se muestren sobre las barras. Por ejemplo, si llevamos el identificador del empleado, el resultado es el siguiente:
Estas etiquetas que se muestran son configurables en <em>Formato > Overlay text options</em>. El orden en el que se muestran dentro de una barra, sin embargo, es automático (no coincide con el orden en el que llevamos los campos de nuestro modelo de datos al campo de la visualización)
Las selecciones no tienen un comportamiento especialmente lógico: un clic en uno de los nombres de los empleados (cabeceras de filas) no filtra la tabla de empleados ni el resto de visualizaciones que haya en nuestro informe (de hecho la visualización se reordena de forma un tanto inexplicable al hacer clic en una de estas cabeceras). Pero un clic en una de las barras horizontales sí lo hace. Un segundo clic en la misma barra debería deseleccionar al empleado en cuestión, pero no ocurre así: Hay que hacer clic en alguna de las etiquetas de la leyenda, por ejemplo, para que esto ocurra. Hay ciertas opciones para configurar las selecciones en <em>Formato > Multiselect</em>.
Por otro lado, la selección de uno de los recursos en otra visualización sí va a filtrar el <em>As Timeline</em>.
Una limitación de la visualización tiene que ver con el período siendo mostrado: si incluimos asignaciones de períodos lejanos, se muestran todos, con independencia de la escala que haya que aplicar. Por ejemplo, si una de las asignaciones de los datos con los que estamos trabajando se ha retrasado un año, la visualización muestra el siguiente aspecto:
La opción más conveniente es recurrir a una segmentación temporal adicional.
Otro factor a considerar es que el campo a llevar a <em>End Date</em> no es la última fecha en la que el recurso en cuestión está asignado, sino el primer día en el que ya no lo está. Por ejemplo, si un recurso está asignado solo un día, el 5/7/2019, habría que llevar a <em>Start Date</em> el valor 5/7/2019 y a End Date el valor 6/7/2019. De otra forma no se mostraría en la gráfica.
Aun con algunas limitaciones, se trata de una visualización muy práctica y recomendable.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterMetaData is deprecated in Drupal\Core\Database\Query\Select->addMetaData() (line 178 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addMetaData('entity_type', 'file') (Line: 115)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', '9e553b17-59c7-4eee-8f95-db32dead548a') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('La visualización <strong>As Timeline</strong> nos permite llevar a una línea de tiempo diferentes elementos caracterizados por una fecha de arranque y otra de finalización. La configuración es, además, muy sencilla e intuitiva.
Los datos con que queremos representar son los siguientes:
El campo <em>Employee Id</em> está asociado a una tabla de empleados en la que se incluyen, entre otros datos, el nombre del empleado (campo <em>Full Name</em>) y el departamento al que pertenece (campo <em>Department</em>).
Los campos que controlan la configuración de la visualización son los mostrados en la siguiente imagen:
Tras crear una instancia de la visualización, arrastremos el campo <em>Full Name</em> (nombre del empleado) al campo de la visualización <em>Entity</em>, y los campos <em>Start</em> y <em>End</em> de nuestro modelo de datos a los campos <em>Start Date</em> y <em>End Date</em> de la visualización, respectivamente. La visualización muestra el siguiente aspecto:
Es decir, con un par de clics ya tenemos una representación temporal de las asignaciones a los empleados en cuestión.
Es posible añadir una dimensión adicional que nos permita clasificar nuestros "recursos" (empleados en este ejemplo) utilizando el campo de la visualización <em>Category</em>. Llevemos a este campo el campo <em>Department</em> de nuestra tabla de datos, campo que contiene el departamento al que pertenece cada empleado. Téngase en cuenta que cada empleado pertenece a un único departamento:
Vemos que se ha añadido la "categoría" a las etiquetas de los empleados. Esto es configurable en <em>Formato > Behavior > Stacked</em> (véase siguiente imagen). Por otro lado, al mover el cursor encima de una de las barras horizontales asociadas a un empleado se muestra la información asociada:
Sin embargo, si la "categoría" añadida no es única para cada empleado, el comportamiento de la visualización cambia. Supongamos que nuestro empleados van a trabajar en el proyecto tanto como beta-testers como desarrolladores, y que cada una de las asignaciones (periodos de tiempo) los van a asociar a uno de los dos roles. Activemos la opción <em>Stacked</em> que hemos visto en <em>Formato > Behavior</em> y llevemos al campo <em>Category</em> de la visualización el campo <em>Role</em> de nuestra tabla:
Ahora la visualización está mostrando una fila para cada una de las combinaciones de empleado y role. Si desactivamos la opción <em>Stacked</em>, las filas correspondientes a cada empleado se muestran solapadas:
Podemos llevar al campo <em>Overlay</em> campos (uno o más) que queramos que se muestren sobre las barras. Por ejemplo, si llevamos el identificador del empleado, el resultado es el siguiente:
Estas etiquetas que se muestran son configurables en <em>Formato > Overlay text options</em>. El orden en el que se muestran dentro de una barra, sin embargo, es automático (no coincide con el orden en el que llevamos los campos de nuestro modelo de datos al campo de la visualización)
Las selecciones no tienen un comportamiento especialmente lógico: un clic en uno de los nombres de los empleados (cabeceras de filas) no filtra la tabla de empleados ni el resto de visualizaciones que haya en nuestro informe (de hecho la visualización se reordena de forma un tanto inexplicable al hacer clic en una de estas cabeceras). Pero un clic en una de las barras horizontales sí lo hace. Un segundo clic en la misma barra debería deseleccionar al empleado en cuestión, pero no ocurre así: Hay que hacer clic en alguna de las etiquetas de la leyenda, por ejemplo, para que esto ocurra. Hay ciertas opciones para configurar las selecciones en <em>Formato > Multiselect</em>.
Por otro lado, la selección de uno de los recursos en otra visualización sí va a filtrar el <em>As Timeline</em>.
Una limitación de la visualización tiene que ver con el período siendo mostrado: si incluimos asignaciones de períodos lejanos, se muestran todos, con independencia de la escala que haya que aplicar. Por ejemplo, si una de las asignaciones de los datos con los que estamos trabajando se ha retrasado un año, la visualización muestra el siguiente aspecto:
La opción más conveniente es recurrir a una segmentación temporal adicional.
Otro factor a considerar es que el campo a llevar a <em>End Date</em> no es la última fecha en la que el recurso en cuestión está asignado, sino el primer día en el que ya no lo está. Por ejemplo, si un recurso está asignado solo un día, el 5/7/2019, habría que llevar a <em>Start Date</em> el valor 5/7/2019 y a End Date el valor 6/7/2019. De otra forma no se mostraría en la gráfica.
Aun con algunas limitaciones, se trata de una visualización muy práctica y recomendable.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterTags is deprecated in Drupal\Core\Database\Query\Select->addTag() (line 149 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addTag('entity_query') (Line: 147)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', '9e553b17-59c7-4eee-8f95-db32dead548a') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('La visualización <strong>As Timeline</strong> nos permite llevar a una línea de tiempo diferentes elementos caracterizados por una fecha de arranque y otra de finalización. La configuración es, además, muy sencilla e intuitiva.
Los datos con que queremos representar son los siguientes:
El campo <em>Employee Id</em> está asociado a una tabla de empleados en la que se incluyen, entre otros datos, el nombre del empleado (campo <em>Full Name</em>) y el departamento al que pertenece (campo <em>Department</em>).
Los campos que controlan la configuración de la visualización son los mostrados en la siguiente imagen:
Tras crear una instancia de la visualización, arrastremos el campo <em>Full Name</em> (nombre del empleado) al campo de la visualización <em>Entity</em>, y los campos <em>Start</em> y <em>End</em> de nuestro modelo de datos a los campos <em>Start Date</em> y <em>End Date</em> de la visualización, respectivamente. La visualización muestra el siguiente aspecto:
Es decir, con un par de clics ya tenemos una representación temporal de las asignaciones a los empleados en cuestión.
Es posible añadir una dimensión adicional que nos permita clasificar nuestros "recursos" (empleados en este ejemplo) utilizando el campo de la visualización <em>Category</em>. Llevemos a este campo el campo <em>Department</em> de nuestra tabla de datos, campo que contiene el departamento al que pertenece cada empleado. Téngase en cuenta que cada empleado pertenece a un único departamento:
Vemos que se ha añadido la "categoría" a las etiquetas de los empleados. Esto es configurable en <em>Formato > Behavior > Stacked</em> (véase siguiente imagen). Por otro lado, al mover el cursor encima de una de las barras horizontales asociadas a un empleado se muestra la información asociada:
Sin embargo, si la "categoría" añadida no es única para cada empleado, el comportamiento de la visualización cambia. Supongamos que nuestro empleados van a trabajar en el proyecto tanto como beta-testers como desarrolladores, y que cada una de las asignaciones (periodos de tiempo) los van a asociar a uno de los dos roles. Activemos la opción <em>Stacked</em> que hemos visto en <em>Formato > Behavior</em> y llevemos al campo <em>Category</em> de la visualización el campo <em>Role</em> de nuestra tabla:
Ahora la visualización está mostrando una fila para cada una de las combinaciones de empleado y role. Si desactivamos la opción <em>Stacked</em>, las filas correspondientes a cada empleado se muestran solapadas:
Podemos llevar al campo <em>Overlay</em> campos (uno o más) que queramos que se muestren sobre las barras. Por ejemplo, si llevamos el identificador del empleado, el resultado es el siguiente:
Estas etiquetas que se muestran son configurables en <em>Formato > Overlay text options</em>. El orden en el que se muestran dentro de una barra, sin embargo, es automático (no coincide con el orden en el que llevamos los campos de nuestro modelo de datos al campo de la visualización)
Las selecciones no tienen un comportamiento especialmente lógico: un clic en uno de los nombres de los empleados (cabeceras de filas) no filtra la tabla de empleados ni el resto de visualizaciones que haya en nuestro informe (de hecho la visualización se reordena de forma un tanto inexplicable al hacer clic en una de estas cabeceras). Pero un clic en una de las barras horizontales sí lo hace. Un segundo clic en la misma barra debería deseleccionar al empleado en cuestión, pero no ocurre así: Hay que hacer clic en alguna de las etiquetas de la leyenda, por ejemplo, para que esto ocurra. Hay ciertas opciones para configurar las selecciones en <em>Formato > Multiselect</em>.
Por otro lado, la selección de uno de los recursos en otra visualización sí va a filtrar el <em>As Timeline</em>.
Una limitación de la visualización tiene que ver con el período siendo mostrado: si incluimos asignaciones de períodos lejanos, se muestran todos, con independencia de la escala que haya que aplicar. Por ejemplo, si una de las asignaciones de los datos con los que estamos trabajando se ha retrasado un año, la visualización muestra el siguiente aspecto:
La opción más conveniente es recurrir a una segmentación temporal adicional.
Otro factor a considerar es que el campo a llevar a <em>End Date</em> no es la última fecha en la que el recurso en cuestión está asignado, sino el primer día en el que ya no lo está. Por ejemplo, si un recurso está asignado solo un día, el 5/7/2019, habría que llevar a <em>Start Date</em> el valor 5/7/2019 y a End Date el valor 6/7/2019. De otra forma no se mostraría en la gráfica.
Aun con algunas limitaciones, se trata de una visualización muy práctica y recomendable.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterMetaData is deprecated in Drupal\Core\Database\Query\Select->addMetaData() (line 178 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addMetaData('entity_type', 'file') (Line: 115)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', '460ea85f-b422-4a9a-a5ad-dc78bf508722') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('La visualización <strong>As Timeline</strong> nos permite llevar a una línea de tiempo diferentes elementos caracterizados por una fecha de arranque y otra de finalización. La configuración es, además, muy sencilla e intuitiva.
Los datos con que queremos representar son los siguientes:
El campo <em>Employee Id</em> está asociado a una tabla de empleados en la que se incluyen, entre otros datos, el nombre del empleado (campo <em>Full Name</em>) y el departamento al que pertenece (campo <em>Department</em>).
Los campos que controlan la configuración de la visualización son los mostrados en la siguiente imagen:
Tras crear una instancia de la visualización, arrastremos el campo <em>Full Name</em> (nombre del empleado) al campo de la visualización <em>Entity</em>, y los campos <em>Start</em> y <em>End</em> de nuestro modelo de datos a los campos <em>Start Date</em> y <em>End Date</em> de la visualización, respectivamente. La visualización muestra el siguiente aspecto:
Es decir, con un par de clics ya tenemos una representación temporal de las asignaciones a los empleados en cuestión.
Es posible añadir una dimensión adicional que nos permita clasificar nuestros "recursos" (empleados en este ejemplo) utilizando el campo de la visualización <em>Category</em>. Llevemos a este campo el campo <em>Department</em> de nuestra tabla de datos, campo que contiene el departamento al que pertenece cada empleado. Téngase en cuenta que cada empleado pertenece a un único departamento:
Vemos que se ha añadido la "categoría" a las etiquetas de los empleados. Esto es configurable en <em>Formato > Behavior > Stacked</em> (véase siguiente imagen). Por otro lado, al mover el cursor encima de una de las barras horizontales asociadas a un empleado se muestra la información asociada:
Sin embargo, si la "categoría" añadida no es única para cada empleado, el comportamiento de la visualización cambia. Supongamos que nuestro empleados van a trabajar en el proyecto tanto como beta-testers como desarrolladores, y que cada una de las asignaciones (periodos de tiempo) los van a asociar a uno de los dos roles. Activemos la opción <em>Stacked</em> que hemos visto en <em>Formato > Behavior</em> y llevemos al campo <em>Category</em> de la visualización el campo <em>Role</em> de nuestra tabla:
Ahora la visualización está mostrando una fila para cada una de las combinaciones de empleado y role. Si desactivamos la opción <em>Stacked</em>, las filas correspondientes a cada empleado se muestran solapadas:
Podemos llevar al campo <em>Overlay</em> campos (uno o más) que queramos que se muestren sobre las barras. Por ejemplo, si llevamos el identificador del empleado, el resultado es el siguiente:
Estas etiquetas que se muestran son configurables en <em>Formato > Overlay text options</em>. El orden en el que se muestran dentro de una barra, sin embargo, es automático (no coincide con el orden en el que llevamos los campos de nuestro modelo de datos al campo de la visualización)
Las selecciones no tienen un comportamiento especialmente lógico: un clic en uno de los nombres de los empleados (cabeceras de filas) no filtra la tabla de empleados ni el resto de visualizaciones que haya en nuestro informe (de hecho la visualización se reordena de forma un tanto inexplicable al hacer clic en una de estas cabeceras). Pero un clic en una de las barras horizontales sí lo hace. Un segundo clic en la misma barra debería deseleccionar al empleado en cuestión, pero no ocurre así: Hay que hacer clic en alguna de las etiquetas de la leyenda, por ejemplo, para que esto ocurra. Hay ciertas opciones para configurar las selecciones en <em>Formato > Multiselect</em>.
Por otro lado, la selección de uno de los recursos en otra visualización sí va a filtrar el <em>As Timeline</em>.
Una limitación de la visualización tiene que ver con el período siendo mostrado: si incluimos asignaciones de períodos lejanos, se muestran todos, con independencia de la escala que haya que aplicar. Por ejemplo, si una de las asignaciones de los datos con los que estamos trabajando se ha retrasado un año, la visualización muestra el siguiente aspecto:
La opción más conveniente es recurrir a una segmentación temporal adicional.
Otro factor a considerar es que el campo a llevar a <em>End Date</em> no es la última fecha en la que el recurso en cuestión está asignado, sino el primer día en el que ya no lo está. Por ejemplo, si un recurso está asignado solo un día, el 5/7/2019, habría que llevar a <em>Start Date</em> el valor 5/7/2019 y a End Date el valor 6/7/2019. De otra forma no se mostraría en la gráfica.
Aun con algunas limitaciones, se trata de una visualización muy práctica y recomendable.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterTags is deprecated in Drupal\Core\Database\Query\Select->addTag() (line 149 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addTag('entity_query') (Line: 147)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', '460ea85f-b422-4a9a-a5ad-dc78bf508722') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('La visualización <strong>As Timeline</strong> nos permite llevar a una línea de tiempo diferentes elementos caracterizados por una fecha de arranque y otra de finalización. La configuración es, además, muy sencilla e intuitiva.
Los datos con que queremos representar son los siguientes:
El campo <em>Employee Id</em> está asociado a una tabla de empleados en la que se incluyen, entre otros datos, el nombre del empleado (campo <em>Full Name</em>) y el departamento al que pertenece (campo <em>Department</em>).
Los campos que controlan la configuración de la visualización son los mostrados en la siguiente imagen:
Tras crear una instancia de la visualización, arrastremos el campo <em>Full Name</em> (nombre del empleado) al campo de la visualización <em>Entity</em>, y los campos <em>Start</em> y <em>End</em> de nuestro modelo de datos a los campos <em>Start Date</em> y <em>End Date</em> de la visualización, respectivamente. La visualización muestra el siguiente aspecto:
Es decir, con un par de clics ya tenemos una representación temporal de las asignaciones a los empleados en cuestión.
Es posible añadir una dimensión adicional que nos permita clasificar nuestros "recursos" (empleados en este ejemplo) utilizando el campo de la visualización <em>Category</em>. Llevemos a este campo el campo <em>Department</em> de nuestra tabla de datos, campo que contiene el departamento al que pertenece cada empleado. Téngase en cuenta que cada empleado pertenece a un único departamento:
Vemos que se ha añadido la "categoría" a las etiquetas de los empleados. Esto es configurable en <em>Formato > Behavior > Stacked</em> (véase siguiente imagen). Por otro lado, al mover el cursor encima de una de las barras horizontales asociadas a un empleado se muestra la información asociada:
Sin embargo, si la "categoría" añadida no es única para cada empleado, el comportamiento de la visualización cambia. Supongamos que nuestro empleados van a trabajar en el proyecto tanto como beta-testers como desarrolladores, y que cada una de las asignaciones (periodos de tiempo) los van a asociar a uno de los dos roles. Activemos la opción <em>Stacked</em> que hemos visto en <em>Formato > Behavior</em> y llevemos al campo <em>Category</em> de la visualización el campo <em>Role</em> de nuestra tabla:
Ahora la visualización está mostrando una fila para cada una de las combinaciones de empleado y role. Si desactivamos la opción <em>Stacked</em>, las filas correspondientes a cada empleado se muestran solapadas:
Podemos llevar al campo <em>Overlay</em> campos (uno o más) que queramos que se muestren sobre las barras. Por ejemplo, si llevamos el identificador del empleado, el resultado es el siguiente:
Estas etiquetas que se muestran son configurables en <em>Formato > Overlay text options</em>. El orden en el que se muestran dentro de una barra, sin embargo, es automático (no coincide con el orden en el que llevamos los campos de nuestro modelo de datos al campo de la visualización)
Las selecciones no tienen un comportamiento especialmente lógico: un clic en uno de los nombres de los empleados (cabeceras de filas) no filtra la tabla de empleados ni el resto de visualizaciones que haya en nuestro informe (de hecho la visualización se reordena de forma un tanto inexplicable al hacer clic en una de estas cabeceras). Pero un clic en una de las barras horizontales sí lo hace. Un segundo clic en la misma barra debería deseleccionar al empleado en cuestión, pero no ocurre así: Hay que hacer clic en alguna de las etiquetas de la leyenda, por ejemplo, para que esto ocurra. Hay ciertas opciones para configurar las selecciones en <em>Formato > Multiselect</em>.
Por otro lado, la selección de uno de los recursos en otra visualización sí va a filtrar el <em>As Timeline</em>.
Una limitación de la visualización tiene que ver con el período siendo mostrado: si incluimos asignaciones de períodos lejanos, se muestran todos, con independencia de la escala que haya que aplicar. Por ejemplo, si una de las asignaciones de los datos con los que estamos trabajando se ha retrasado un año, la visualización muestra el siguiente aspecto:
La opción más conveniente es recurrir a una segmentación temporal adicional.
Otro factor a considerar es que el campo a llevar a <em>End Date</em> no es la última fecha en la que el recurso en cuestión está asignado, sino el primer día en el que ya no lo está. Por ejemplo, si un recurso está asignado solo un día, el 5/7/2019, habría que llevar a <em>Start Date</em> el valor 5/7/2019 y a End Date el valor 6/7/2019. De otra forma no se mostraría en la gráfica.
Aun con algunas limitaciones, se trata de una visualización muy práctica y recomendable.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterTags is deprecated in Drupal\Core\Database\Query\Select->addTag() (line 149 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addTag('file_load_multiple') (Line: 696)
Drupal\Core\Entity\Sql\SqlContentEntityStorage->buildQuery(Array) (Line: 422)
Drupal\Core\Entity\Sql\SqlContentEntityStorage->getFromStorage(Array) (Line: 393)
Drupal\Core\Entity\Sql\SqlContentEntityStorage->doLoadMultiple(Array) (Line: 346)
Drupal\Core\Entity\EntityStorageBase->loadMultiple(Array) (Line: 641)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', '460ea85f-b422-4a9a-a5ad-dc78bf508722') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('La visualización <strong>As Timeline</strong> nos permite llevar a una línea de tiempo diferentes elementos caracterizados por una fecha de arranque y otra de finalización. La configuración es, además, muy sencilla e intuitiva.
Los datos con que queremos representar son los siguientes:
El campo <em>Employee Id</em> está asociado a una tabla de empleados en la que se incluyen, entre otros datos, el nombre del empleado (campo <em>Full Name</em>) y el departamento al que pertenece (campo <em>Department</em>).
Los campos que controlan la configuración de la visualización son los mostrados en la siguiente imagen:
Tras crear una instancia de la visualización, arrastremos el campo <em>Full Name</em> (nombre del empleado) al campo de la visualización <em>Entity</em>, y los campos <em>Start</em> y <em>End</em> de nuestro modelo de datos a los campos <em>Start Date</em> y <em>End Date</em> de la visualización, respectivamente. La visualización muestra el siguiente aspecto:
Es decir, con un par de clics ya tenemos una representación temporal de las asignaciones a los empleados en cuestión.
Es posible añadir una dimensión adicional que nos permita clasificar nuestros "recursos" (empleados en este ejemplo) utilizando el campo de la visualización <em>Category</em>. Llevemos a este campo el campo <em>Department</em> de nuestra tabla de datos, campo que contiene el departamento al que pertenece cada empleado. Téngase en cuenta que cada empleado pertenece a un único departamento:
Vemos que se ha añadido la "categoría" a las etiquetas de los empleados. Esto es configurable en <em>Formato > Behavior > Stacked</em> (véase siguiente imagen). Por otro lado, al mover el cursor encima de una de las barras horizontales asociadas a un empleado se muestra la información asociada:
Sin embargo, si la "categoría" añadida no es única para cada empleado, el comportamiento de la visualización cambia. Supongamos que nuestro empleados van a trabajar en el proyecto tanto como beta-testers como desarrolladores, y que cada una de las asignaciones (periodos de tiempo) los van a asociar a uno de los dos roles. Activemos la opción <em>Stacked</em> que hemos visto en <em>Formato > Behavior</em> y llevemos al campo <em>Category</em> de la visualización el campo <em>Role</em> de nuestra tabla:
Ahora la visualización está mostrando una fila para cada una de las combinaciones de empleado y role. Si desactivamos la opción <em>Stacked</em>, las filas correspondientes a cada empleado se muestran solapadas:
Podemos llevar al campo <em>Overlay</em> campos (uno o más) que queramos que se muestren sobre las barras. Por ejemplo, si llevamos el identificador del empleado, el resultado es el siguiente:
Estas etiquetas que se muestran son configurables en <em>Formato > Overlay text options</em>. El orden en el que se muestran dentro de una barra, sin embargo, es automático (no coincide con el orden en el que llevamos los campos de nuestro modelo de datos al campo de la visualización)
Las selecciones no tienen un comportamiento especialmente lógico: un clic en uno de los nombres de los empleados (cabeceras de filas) no filtra la tabla de empleados ni el resto de visualizaciones que haya en nuestro informe (de hecho la visualización se reordena de forma un tanto inexplicable al hacer clic en una de estas cabeceras). Pero un clic en una de las barras horizontales sí lo hace. Un segundo clic en la misma barra debería deseleccionar al empleado en cuestión, pero no ocurre así: Hay que hacer clic en alguna de las etiquetas de la leyenda, por ejemplo, para que esto ocurra. Hay ciertas opciones para configurar las selecciones en <em>Formato > Multiselect</em>.
Por otro lado, la selección de uno de los recursos en otra visualización sí va a filtrar el <em>As Timeline</em>.
Una limitación de la visualización tiene que ver con el período siendo mostrado: si incluimos asignaciones de períodos lejanos, se muestran todos, con independencia de la escala que haya que aplicar. Por ejemplo, si una de las asignaciones de los datos con los que estamos trabajando se ha retrasado un año, la visualización muestra el siguiente aspecto:
La opción más conveniente es recurrir a una segmentación temporal adicional.
Otro factor a considerar es que el campo a llevar a <em>End Date</em> no es la última fecha en la que el recurso en cuestión está asignado, sino el primer día en el que ya no lo está. Por ejemplo, si un recurso está asignado solo un día, el 5/7/2019, habría que llevar a <em>Start Date</em> el valor 5/7/2019 y a End Date el valor 6/7/2019. De otra forma no se mostraría en la gráfica.
Aun con algunas limitaciones, se trata de una visualización muy práctica y recomendable.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterMetaData is deprecated in Drupal\Core\Database\Query\Select->addMetaData() (line 178 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addMetaData('entity_type', 'file') (Line: 115)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', '460ea85f-b422-4a9a-a5ad-dc78bf508722') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('La visualización <strong>As Timeline</strong> nos permite llevar a una línea de tiempo diferentes elementos caracterizados por una fecha de arranque y otra de finalización. La configuración es, además, muy sencilla e intuitiva.
Los datos con que queremos representar son los siguientes:
El campo <em>Employee Id</em> está asociado a una tabla de empleados en la que se incluyen, entre otros datos, el nombre del empleado (campo <em>Full Name</em>) y el departamento al que pertenece (campo <em>Department</em>).
Los campos que controlan la configuración de la visualización son los mostrados en la siguiente imagen:
Tras crear una instancia de la visualización, arrastremos el campo <em>Full Name</em> (nombre del empleado) al campo de la visualización <em>Entity</em>, y los campos <em>Start</em> y <em>End</em> de nuestro modelo de datos a los campos <em>Start Date</em> y <em>End Date</em> de la visualización, respectivamente. La visualización muestra el siguiente aspecto:
Es decir, con un par de clics ya tenemos una representación temporal de las asignaciones a los empleados en cuestión.
Es posible añadir una dimensión adicional que nos permita clasificar nuestros "recursos" (empleados en este ejemplo) utilizando el campo de la visualización <em>Category</em>. Llevemos a este campo el campo <em>Department</em> de nuestra tabla de datos, campo que contiene el departamento al que pertenece cada empleado. Téngase en cuenta que cada empleado pertenece a un único departamento:
Vemos que se ha añadido la "categoría" a las etiquetas de los empleados. Esto es configurable en <em>Formato > Behavior > Stacked</em> (véase siguiente imagen). Por otro lado, al mover el cursor encima de una de las barras horizontales asociadas a un empleado se muestra la información asociada:
Sin embargo, si la "categoría" añadida no es única para cada empleado, el comportamiento de la visualización cambia. Supongamos que nuestro empleados van a trabajar en el proyecto tanto como beta-testers como desarrolladores, y que cada una de las asignaciones (periodos de tiempo) los van a asociar a uno de los dos roles. Activemos la opción <em>Stacked</em> que hemos visto en <em>Formato > Behavior</em> y llevemos al campo <em>Category</em> de la visualización el campo <em>Role</em> de nuestra tabla:
Ahora la visualización está mostrando una fila para cada una de las combinaciones de empleado y role. Si desactivamos la opción <em>Stacked</em>, las filas correspondientes a cada empleado se muestran solapadas:
Podemos llevar al campo <em>Overlay</em> campos (uno o más) que queramos que se muestren sobre las barras. Por ejemplo, si llevamos el identificador del empleado, el resultado es el siguiente:
Estas etiquetas que se muestran son configurables en <em>Formato > Overlay text options</em>. El orden en el que se muestran dentro de una barra, sin embargo, es automático (no coincide con el orden en el que llevamos los campos de nuestro modelo de datos al campo de la visualización)
Las selecciones no tienen un comportamiento especialmente lógico: un clic en uno de los nombres de los empleados (cabeceras de filas) no filtra la tabla de empleados ni el resto de visualizaciones que haya en nuestro informe (de hecho la visualización se reordena de forma un tanto inexplicable al hacer clic en una de estas cabeceras). Pero un clic en una de las barras horizontales sí lo hace. Un segundo clic en la misma barra debería deseleccionar al empleado en cuestión, pero no ocurre así: Hay que hacer clic en alguna de las etiquetas de la leyenda, por ejemplo, para que esto ocurra. Hay ciertas opciones para configurar las selecciones en <em>Formato > Multiselect</em>.
Por otro lado, la selección de uno de los recursos en otra visualización sí va a filtrar el <em>As Timeline</em>.
Una limitación de la visualización tiene que ver con el período siendo mostrado: si incluimos asignaciones de períodos lejanos, se muestran todos, con independencia de la escala que haya que aplicar. Por ejemplo, si una de las asignaciones de los datos con los que estamos trabajando se ha retrasado un año, la visualización muestra el siguiente aspecto:
La opción más conveniente es recurrir a una segmentación temporal adicional.
Otro factor a considerar es que el campo a llevar a <em>End Date</em> no es la última fecha en la que el recurso en cuestión está asignado, sino el primer día en el que ya no lo está. Por ejemplo, si un recurso está asignado solo un día, el 5/7/2019, habría que llevar a <em>Start Date</em> el valor 5/7/2019 y a End Date el valor 6/7/2019. De otra forma no se mostraría en la gráfica.
Aun con algunas limitaciones, se trata de una visualización muy práctica y recomendable.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterTags is deprecated in Drupal\Core\Database\Query\Select->addTag() (line 149 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addTag('entity_query') (Line: 147)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', '460ea85f-b422-4a9a-a5ad-dc78bf508722') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('La visualización <strong>As Timeline</strong> nos permite llevar a una línea de tiempo diferentes elementos caracterizados por una fecha de arranque y otra de finalización. La configuración es, además, muy sencilla e intuitiva.
Los datos con que queremos representar son los siguientes:
El campo <em>Employee Id</em> está asociado a una tabla de empleados en la que se incluyen, entre otros datos, el nombre del empleado (campo <em>Full Name</em>) y el departamento al que pertenece (campo <em>Department</em>).
Los campos que controlan la configuración de la visualización son los mostrados en la siguiente imagen:
Tras crear una instancia de la visualización, arrastremos el campo <em>Full Name</em> (nombre del empleado) al campo de la visualización <em>Entity</em>, y los campos <em>Start</em> y <em>End</em> de nuestro modelo de datos a los campos <em>Start Date</em> y <em>End Date</em> de la visualización, respectivamente. La visualización muestra el siguiente aspecto:
Es decir, con un par de clics ya tenemos una representación temporal de las asignaciones a los empleados en cuestión.
Es posible añadir una dimensión adicional que nos permita clasificar nuestros "recursos" (empleados en este ejemplo) utilizando el campo de la visualización <em>Category</em>. Llevemos a este campo el campo <em>Department</em> de nuestra tabla de datos, campo que contiene el departamento al que pertenece cada empleado. Téngase en cuenta que cada empleado pertenece a un único departamento:
Vemos que se ha añadido la "categoría" a las etiquetas de los empleados. Esto es configurable en <em>Formato > Behavior > Stacked</em> (véase siguiente imagen). Por otro lado, al mover el cursor encima de una de las barras horizontales asociadas a un empleado se muestra la información asociada:
Sin embargo, si la "categoría" añadida no es única para cada empleado, el comportamiento de la visualización cambia. Supongamos que nuestro empleados van a trabajar en el proyecto tanto como beta-testers como desarrolladores, y que cada una de las asignaciones (periodos de tiempo) los van a asociar a uno de los dos roles. Activemos la opción <em>Stacked</em> que hemos visto en <em>Formato > Behavior</em> y llevemos al campo <em>Category</em> de la visualización el campo <em>Role</em> de nuestra tabla:
Ahora la visualización está mostrando una fila para cada una de las combinaciones de empleado y role. Si desactivamos la opción <em>Stacked</em>, las filas correspondientes a cada empleado se muestran solapadas:
Podemos llevar al campo <em>Overlay</em> campos (uno o más) que queramos que se muestren sobre las barras. Por ejemplo, si llevamos el identificador del empleado, el resultado es el siguiente:
Estas etiquetas que se muestran son configurables en <em>Formato > Overlay text options</em>. El orden en el que se muestran dentro de una barra, sin embargo, es automático (no coincide con el orden en el que llevamos los campos de nuestro modelo de datos al campo de la visualización)
Las selecciones no tienen un comportamiento especialmente lógico: un clic en uno de los nombres de los empleados (cabeceras de filas) no filtra la tabla de empleados ni el resto de visualizaciones que haya en nuestro informe (de hecho la visualización se reordena de forma un tanto inexplicable al hacer clic en una de estas cabeceras). Pero un clic en una de las barras horizontales sí lo hace. Un segundo clic en la misma barra debería deseleccionar al empleado en cuestión, pero no ocurre así: Hay que hacer clic en alguna de las etiquetas de la leyenda, por ejemplo, para que esto ocurra. Hay ciertas opciones para configurar las selecciones en <em>Formato > Multiselect</em>.
Por otro lado, la selección de uno de los recursos en otra visualización sí va a filtrar el <em>As Timeline</em>.
Una limitación de la visualización tiene que ver con el período siendo mostrado: si incluimos asignaciones de períodos lejanos, se muestran todos, con independencia de la escala que haya que aplicar. Por ejemplo, si una de las asignaciones de los datos con los que estamos trabajando se ha retrasado un año, la visualización muestra el siguiente aspecto:
La opción más conveniente es recurrir a una segmentación temporal adicional.
Otro factor a considerar es que el campo a llevar a <em>End Date</em> no es la última fecha en la que el recurso en cuestión está asignado, sino el primer día en el que ya no lo está. Por ejemplo, si un recurso está asignado solo un día, el 5/7/2019, habría que llevar a <em>Start Date</em> el valor 5/7/2019 y a End Date el valor 6/7/2019. De otra forma no se mostraría en la gráfica.
Aun con algunas limitaciones, se trata de una visualización muy práctica y recomendable.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterMetaData is deprecated in Drupal\Core\Database\Query\Select->addMetaData() (line 178 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addMetaData('entity_type', 'file') (Line: 115)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', '62d88b1a-2b7e-476a-8374-8f41a3822b75') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('La visualización <strong>As Timeline</strong> nos permite llevar a una línea de tiempo diferentes elementos caracterizados por una fecha de arranque y otra de finalización. La configuración es, además, muy sencilla e intuitiva.
Los datos con que queremos representar son los siguientes:
El campo <em>Employee Id</em> está asociado a una tabla de empleados en la que se incluyen, entre otros datos, el nombre del empleado (campo <em>Full Name</em>) y el departamento al que pertenece (campo <em>Department</em>).
Los campos que controlan la configuración de la visualización son los mostrados en la siguiente imagen:
Tras crear una instancia de la visualización, arrastremos el campo <em>Full Name</em> (nombre del empleado) al campo de la visualización <em>Entity</em>, y los campos <em>Start</em> y <em>End</em> de nuestro modelo de datos a los campos <em>Start Date</em> y <em>End Date</em> de la visualización, respectivamente. La visualización muestra el siguiente aspecto:
Es decir, con un par de clics ya tenemos una representación temporal de las asignaciones a los empleados en cuestión.
Es posible añadir una dimensión adicional que nos permita clasificar nuestros "recursos" (empleados en este ejemplo) utilizando el campo de la visualización <em>Category</em>. Llevemos a este campo el campo <em>Department</em> de nuestra tabla de datos, campo que contiene el departamento al que pertenece cada empleado. Téngase en cuenta que cada empleado pertenece a un único departamento:
Vemos que se ha añadido la "categoría" a las etiquetas de los empleados. Esto es configurable en <em>Formato > Behavior > Stacked</em> (véase siguiente imagen). Por otro lado, al mover el cursor encima de una de las barras horizontales asociadas a un empleado se muestra la información asociada:
Sin embargo, si la "categoría" añadida no es única para cada empleado, el comportamiento de la visualización cambia. Supongamos que nuestro empleados van a trabajar en el proyecto tanto como beta-testers como desarrolladores, y que cada una de las asignaciones (periodos de tiempo) los van a asociar a uno de los dos roles. Activemos la opción <em>Stacked</em> que hemos visto en <em>Formato > Behavior</em> y llevemos al campo <em>Category</em> de la visualización el campo <em>Role</em> de nuestra tabla:
Ahora la visualización está mostrando una fila para cada una de las combinaciones de empleado y role. Si desactivamos la opción <em>Stacked</em>, las filas correspondientes a cada empleado se muestran solapadas:
Podemos llevar al campo <em>Overlay</em> campos (uno o más) que queramos que se muestren sobre las barras. Por ejemplo, si llevamos el identificador del empleado, el resultado es el siguiente:
Estas etiquetas que se muestran son configurables en <em>Formato > Overlay text options</em>. El orden en el que se muestran dentro de una barra, sin embargo, es automático (no coincide con el orden en el que llevamos los campos de nuestro modelo de datos al campo de la visualización)
Las selecciones no tienen un comportamiento especialmente lógico: un clic en uno de los nombres de los empleados (cabeceras de filas) no filtra la tabla de empleados ni el resto de visualizaciones que haya en nuestro informe (de hecho la visualización se reordena de forma un tanto inexplicable al hacer clic en una de estas cabeceras). Pero un clic en una de las barras horizontales sí lo hace. Un segundo clic en la misma barra debería deseleccionar al empleado en cuestión, pero no ocurre así: Hay que hacer clic en alguna de las etiquetas de la leyenda, por ejemplo, para que esto ocurra. Hay ciertas opciones para configurar las selecciones en <em>Formato > Multiselect</em>.
Por otro lado, la selección de uno de los recursos en otra visualización sí va a filtrar el <em>As Timeline</em>.
Una limitación de la visualización tiene que ver con el período siendo mostrado: si incluimos asignaciones de períodos lejanos, se muestran todos, con independencia de la escala que haya que aplicar. Por ejemplo, si una de las asignaciones de los datos con los que estamos trabajando se ha retrasado un año, la visualización muestra el siguiente aspecto:
La opción más conveniente es recurrir a una segmentación temporal adicional.
Otro factor a considerar es que el campo a llevar a <em>End Date</em> no es la última fecha en la que el recurso en cuestión está asignado, sino el primer día en el que ya no lo está. Por ejemplo, si un recurso está asignado solo un día, el 5/7/2019, habría que llevar a <em>Start Date</em> el valor 5/7/2019 y a End Date el valor 6/7/2019. De otra forma no se mostraría en la gráfica.
Aun con algunas limitaciones, se trata de una visualización muy práctica y recomendable.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterTags is deprecated in Drupal\Core\Database\Query\Select->addTag() (line 149 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addTag('entity_query') (Line: 147)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', '62d88b1a-2b7e-476a-8374-8f41a3822b75') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('La visualización <strong>As Timeline</strong> nos permite llevar a una línea de tiempo diferentes elementos caracterizados por una fecha de arranque y otra de finalización. La configuración es, además, muy sencilla e intuitiva.
Los datos con que queremos representar son los siguientes:
El campo <em>Employee Id</em> está asociado a una tabla de empleados en la que se incluyen, entre otros datos, el nombre del empleado (campo <em>Full Name</em>) y el departamento al que pertenece (campo <em>Department</em>).
Los campos que controlan la configuración de la visualización son los mostrados en la siguiente imagen:
Tras crear una instancia de la visualización, arrastremos el campo <em>Full Name</em> (nombre del empleado) al campo de la visualización <em>Entity</em>, y los campos <em>Start</em> y <em>End</em> de nuestro modelo de datos a los campos <em>Start Date</em> y <em>End Date</em> de la visualización, respectivamente. La visualización muestra el siguiente aspecto:
Es decir, con un par de clics ya tenemos una representación temporal de las asignaciones a los empleados en cuestión.
Es posible añadir una dimensión adicional que nos permita clasificar nuestros "recursos" (empleados en este ejemplo) utilizando el campo de la visualización <em>Category</em>. Llevemos a este campo el campo <em>Department</em> de nuestra tabla de datos, campo que contiene el departamento al que pertenece cada empleado. Téngase en cuenta que cada empleado pertenece a un único departamento:
Vemos que se ha añadido la "categoría" a las etiquetas de los empleados. Esto es configurable en <em>Formato > Behavior > Stacked</em> (véase siguiente imagen). Por otro lado, al mover el cursor encima de una de las barras horizontales asociadas a un empleado se muestra la información asociada:
Sin embargo, si la "categoría" añadida no es única para cada empleado, el comportamiento de la visualización cambia. Supongamos que nuestro empleados van a trabajar en el proyecto tanto como beta-testers como desarrolladores, y que cada una de las asignaciones (periodos de tiempo) los van a asociar a uno de los dos roles. Activemos la opción <em>Stacked</em> que hemos visto en <em>Formato > Behavior</em> y llevemos al campo <em>Category</em> de la visualización el campo <em>Role</em> de nuestra tabla:
Ahora la visualización está mostrando una fila para cada una de las combinaciones de empleado y role. Si desactivamos la opción <em>Stacked</em>, las filas correspondientes a cada empleado se muestran solapadas:
Podemos llevar al campo <em>Overlay</em> campos (uno o más) que queramos que se muestren sobre las barras. Por ejemplo, si llevamos el identificador del empleado, el resultado es el siguiente:
Estas etiquetas que se muestran son configurables en <em>Formato > Overlay text options</em>. El orden en el que se muestran dentro de una barra, sin embargo, es automático (no coincide con el orden en el que llevamos los campos de nuestro modelo de datos al campo de la visualización)
Las selecciones no tienen un comportamiento especialmente lógico: un clic en uno de los nombres de los empleados (cabeceras de filas) no filtra la tabla de empleados ni el resto de visualizaciones que haya en nuestro informe (de hecho la visualización se reordena de forma un tanto inexplicable al hacer clic en una de estas cabeceras). Pero un clic en una de las barras horizontales sí lo hace. Un segundo clic en la misma barra debería deseleccionar al empleado en cuestión, pero no ocurre así: Hay que hacer clic en alguna de las etiquetas de la leyenda, por ejemplo, para que esto ocurra. Hay ciertas opciones para configurar las selecciones en <em>Formato > Multiselect</em>.
Por otro lado, la selección de uno de los recursos en otra visualización sí va a filtrar el <em>As Timeline</em>.
Una limitación de la visualización tiene que ver con el período siendo mostrado: si incluimos asignaciones de períodos lejanos, se muestran todos, con independencia de la escala que haya que aplicar. Por ejemplo, si una de las asignaciones de los datos con los que estamos trabajando se ha retrasado un año, la visualización muestra el siguiente aspecto:
La opción más conveniente es recurrir a una segmentación temporal adicional.
Otro factor a considerar es que el campo a llevar a <em>End Date</em> no es la última fecha en la que el recurso en cuestión está asignado, sino el primer día en el que ya no lo está. Por ejemplo, si un recurso está asignado solo un día, el 5/7/2019, habría que llevar a <em>Start Date</em> el valor 5/7/2019 y a End Date el valor 6/7/2019. De otra forma no se mostraría en la gráfica.
Aun con algunas limitaciones, se trata de una visualización muy práctica y recomendable.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterTags is deprecated in Drupal\Core\Database\Query\Select->addTag() (line 149 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addTag('file_load_multiple') (Line: 696)
Drupal\Core\Entity\Sql\SqlContentEntityStorage->buildQuery(Array) (Line: 422)
Drupal\Core\Entity\Sql\SqlContentEntityStorage->getFromStorage(Array) (Line: 393)
Drupal\Core\Entity\Sql\SqlContentEntityStorage->doLoadMultiple(Array) (Line: 346)
Drupal\Core\Entity\EntityStorageBase->loadMultiple(Array) (Line: 641)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', '62d88b1a-2b7e-476a-8374-8f41a3822b75') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('La visualización <strong>As Timeline</strong> nos permite llevar a una línea de tiempo diferentes elementos caracterizados por una fecha de arranque y otra de finalización. La configuración es, además, muy sencilla e intuitiva.
Los datos con que queremos representar son los siguientes:
El campo <em>Employee Id</em> está asociado a una tabla de empleados en la que se incluyen, entre otros datos, el nombre del empleado (campo <em>Full Name</em>) y el departamento al que pertenece (campo <em>Department</em>).
Los campos que controlan la configuración de la visualización son los mostrados en la siguiente imagen:
Tras crear una instancia de la visualización, arrastremos el campo <em>Full Name</em> (nombre del empleado) al campo de la visualización <em>Entity</em>, y los campos <em>Start</em> y <em>End</em> de nuestro modelo de datos a los campos <em>Start Date</em> y <em>End Date</em> de la visualización, respectivamente. La visualización muestra el siguiente aspecto:
Es decir, con un par de clics ya tenemos una representación temporal de las asignaciones a los empleados en cuestión.
Es posible añadir una dimensión adicional que nos permita clasificar nuestros "recursos" (empleados en este ejemplo) utilizando el campo de la visualización <em>Category</em>. Llevemos a este campo el campo <em>Department</em> de nuestra tabla de datos, campo que contiene el departamento al que pertenece cada empleado. Téngase en cuenta que cada empleado pertenece a un único departamento:
Vemos que se ha añadido la "categoría" a las etiquetas de los empleados. Esto es configurable en <em>Formato > Behavior > Stacked</em> (véase siguiente imagen). Por otro lado, al mover el cursor encima de una de las barras horizontales asociadas a un empleado se muestra la información asociada:
Sin embargo, si la "categoría" añadida no es única para cada empleado, el comportamiento de la visualización cambia. Supongamos que nuestro empleados van a trabajar en el proyecto tanto como beta-testers como desarrolladores, y que cada una de las asignaciones (periodos de tiempo) los van a asociar a uno de los dos roles. Activemos la opción <em>Stacked</em> que hemos visto en <em>Formato > Behavior</em> y llevemos al campo <em>Category</em> de la visualización el campo <em>Role</em> de nuestra tabla:
Ahora la visualización está mostrando una fila para cada una de las combinaciones de empleado y role. Si desactivamos la opción <em>Stacked</em>, las filas correspondientes a cada empleado se muestran solapadas:
Podemos llevar al campo <em>Overlay</em> campos (uno o más) que queramos que se muestren sobre las barras. Por ejemplo, si llevamos el identificador del empleado, el resultado es el siguiente:
Estas etiquetas que se muestran son configurables en <em>Formato > Overlay text options</em>. El orden en el que se muestran dentro de una barra, sin embargo, es automático (no coincide con el orden en el que llevamos los campos de nuestro modelo de datos al campo de la visualización)
Las selecciones no tienen un comportamiento especialmente lógico: un clic en uno de los nombres de los empleados (cabeceras de filas) no filtra la tabla de empleados ni el resto de visualizaciones que haya en nuestro informe (de hecho la visualización se reordena de forma un tanto inexplicable al hacer clic en una de estas cabeceras). Pero un clic en una de las barras horizontales sí lo hace. Un segundo clic en la misma barra debería deseleccionar al empleado en cuestión, pero no ocurre así: Hay que hacer clic en alguna de las etiquetas de la leyenda, por ejemplo, para que esto ocurra. Hay ciertas opciones para configurar las selecciones en <em>Formato > Multiselect</em>.
Por otro lado, la selección de uno de los recursos en otra visualización sí va a filtrar el <em>As Timeline</em>.
Una limitación de la visualización tiene que ver con el período siendo mostrado: si incluimos asignaciones de períodos lejanos, se muestran todos, con independencia de la escala que haya que aplicar. Por ejemplo, si una de las asignaciones de los datos con los que estamos trabajando se ha retrasado un año, la visualización muestra el siguiente aspecto:
La opción más conveniente es recurrir a una segmentación temporal adicional.
Otro factor a considerar es que el campo a llevar a <em>End Date</em> no es la última fecha en la que el recurso en cuestión está asignado, sino el primer día en el que ya no lo está. Por ejemplo, si un recurso está asignado solo un día, el 5/7/2019, habría que llevar a <em>Start Date</em> el valor 5/7/2019 y a End Date el valor 6/7/2019. De otra forma no se mostraría en la gráfica.
Aun con algunas limitaciones, se trata de una visualización muy práctica y recomendable.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterMetaData is deprecated in Drupal\Core\Database\Query\Select->addMetaData() (line 178 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addMetaData('entity_type', 'file') (Line: 115)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', '62d88b1a-2b7e-476a-8374-8f41a3822b75') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('La visualización <strong>As Timeline</strong> nos permite llevar a una línea de tiempo diferentes elementos caracterizados por una fecha de arranque y otra de finalización. La configuración es, además, muy sencilla e intuitiva.
Los datos con que queremos representar son los siguientes:
El campo <em>Employee Id</em> está asociado a una tabla de empleados en la que se incluyen, entre otros datos, el nombre del empleado (campo <em>Full Name</em>) y el departamento al que pertenece (campo <em>Department</em>).
Los campos que controlan la configuración de la visualización son los mostrados en la siguiente imagen:
Tras crear una instancia de la visualización, arrastremos el campo <em>Full Name</em> (nombre del empleado) al campo de la visualización <em>Entity</em>, y los campos <em>Start</em> y <em>End</em> de nuestro modelo de datos a los campos <em>Start Date</em> y <em>End Date</em> de la visualización, respectivamente. La visualización muestra el siguiente aspecto:
Es decir, con un par de clics ya tenemos una representación temporal de las asignaciones a los empleados en cuestión.
Es posible añadir una dimensión adicional que nos permita clasificar nuestros "recursos" (empleados en este ejemplo) utilizando el campo de la visualización <em>Category</em>. Llevemos a este campo el campo <em>Department</em> de nuestra tabla de datos, campo que contiene el departamento al que pertenece cada empleado. Téngase en cuenta que cada empleado pertenece a un único departamento:
Vemos que se ha añadido la "categoría" a las etiquetas de los empleados. Esto es configurable en <em>Formato > Behavior > Stacked</em> (véase siguiente imagen). Por otro lado, al mover el cursor encima de una de las barras horizontales asociadas a un empleado se muestra la información asociada:
Sin embargo, si la "categoría" añadida no es única para cada empleado, el comportamiento de la visualización cambia. Supongamos que nuestro empleados van a trabajar en el proyecto tanto como beta-testers como desarrolladores, y que cada una de las asignaciones (periodos de tiempo) los van a asociar a uno de los dos roles. Activemos la opción <em>Stacked</em> que hemos visto en <em>Formato > Behavior</em> y llevemos al campo <em>Category</em> de la visualización el campo <em>Role</em> de nuestra tabla:
Ahora la visualización está mostrando una fila para cada una de las combinaciones de empleado y role. Si desactivamos la opción <em>Stacked</em>, las filas correspondientes a cada empleado se muestran solapadas:
Podemos llevar al campo <em>Overlay</em> campos (uno o más) que queramos que se muestren sobre las barras. Por ejemplo, si llevamos el identificador del empleado, el resultado es el siguiente:
Estas etiquetas que se muestran son configurables en <em>Formato > Overlay text options</em>. El orden en el que se muestran dentro de una barra, sin embargo, es automático (no coincide con el orden en el que llevamos los campos de nuestro modelo de datos al campo de la visualización)
Las selecciones no tienen un comportamiento especialmente lógico: un clic en uno de los nombres de los empleados (cabeceras de filas) no filtra la tabla de empleados ni el resto de visualizaciones que haya en nuestro informe (de hecho la visualización se reordena de forma un tanto inexplicable al hacer clic en una de estas cabeceras). Pero un clic en una de las barras horizontales sí lo hace. Un segundo clic en la misma barra debería deseleccionar al empleado en cuestión, pero no ocurre así: Hay que hacer clic en alguna de las etiquetas de la leyenda, por ejemplo, para que esto ocurra. Hay ciertas opciones para configurar las selecciones en <em>Formato > Multiselect</em>.
Por otro lado, la selección de uno de los recursos en otra visualización sí va a filtrar el <em>As Timeline</em>.
Una limitación de la visualización tiene que ver con el período siendo mostrado: si incluimos asignaciones de períodos lejanos, se muestran todos, con independencia de la escala que haya que aplicar. Por ejemplo, si una de las asignaciones de los datos con los que estamos trabajando se ha retrasado un año, la visualización muestra el siguiente aspecto:
La opción más conveniente es recurrir a una segmentación temporal adicional.
Otro factor a considerar es que el campo a llevar a <em>End Date</em> no es la última fecha en la que el recurso en cuestión está asignado, sino el primer día en el que ya no lo está. Por ejemplo, si un recurso está asignado solo un día, el 5/7/2019, habría que llevar a <em>Start Date</em> el valor 5/7/2019 y a End Date el valor 6/7/2019. De otra forma no se mostraría en la gráfica.
Aun con algunas limitaciones, se trata de una visualización muy práctica y recomendable.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterTags is deprecated in Drupal\Core\Database\Query\Select->addTag() (line 149 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addTag('entity_query') (Line: 147)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', '62d88b1a-2b7e-476a-8374-8f41a3822b75') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('La visualización <strong>As Timeline</strong> nos permite llevar a una línea de tiempo diferentes elementos caracterizados por una fecha de arranque y otra de finalización. La configuración es, además, muy sencilla e intuitiva.
Los datos con que queremos representar son los siguientes:
El campo <em>Employee Id</em> está asociado a una tabla de empleados en la que se incluyen, entre otros datos, el nombre del empleado (campo <em>Full Name</em>) y el departamento al que pertenece (campo <em>Department</em>).
Los campos que controlan la configuración de la visualización son los mostrados en la siguiente imagen:
Tras crear una instancia de la visualización, arrastremos el campo <em>Full Name</em> (nombre del empleado) al campo de la visualización <em>Entity</em>, y los campos <em>Start</em> y <em>End</em> de nuestro modelo de datos a los campos <em>Start Date</em> y <em>End Date</em> de la visualización, respectivamente. La visualización muestra el siguiente aspecto:
Es decir, con un par de clics ya tenemos una representación temporal de las asignaciones a los empleados en cuestión.
Es posible añadir una dimensión adicional que nos permita clasificar nuestros "recursos" (empleados en este ejemplo) utilizando el campo de la visualización <em>Category</em>. Llevemos a este campo el campo <em>Department</em> de nuestra tabla de datos, campo que contiene el departamento al que pertenece cada empleado. Téngase en cuenta que cada empleado pertenece a un único departamento:
Vemos que se ha añadido la "categoría" a las etiquetas de los empleados. Esto es configurable en <em>Formato > Behavior > Stacked</em> (véase siguiente imagen). Por otro lado, al mover el cursor encima de una de las barras horizontales asociadas a un empleado se muestra la información asociada:
Sin embargo, si la "categoría" añadida no es única para cada empleado, el comportamiento de la visualización cambia. Supongamos que nuestro empleados van a trabajar en el proyecto tanto como beta-testers como desarrolladores, y que cada una de las asignaciones (periodos de tiempo) los van a asociar a uno de los dos roles. Activemos la opción <em>Stacked</em> que hemos visto en <em>Formato > Behavior</em> y llevemos al campo <em>Category</em> de la visualización el campo <em>Role</em> de nuestra tabla:
Ahora la visualización está mostrando una fila para cada una de las combinaciones de empleado y role. Si desactivamos la opción <em>Stacked</em>, las filas correspondientes a cada empleado se muestran solapadas:
Podemos llevar al campo <em>Overlay</em> campos (uno o más) que queramos que se muestren sobre las barras. Por ejemplo, si llevamos el identificador del empleado, el resultado es el siguiente:
Estas etiquetas que se muestran son configurables en <em>Formato > Overlay text options</em>. El orden en el que se muestran dentro de una barra, sin embargo, es automático (no coincide con el orden en el que llevamos los campos de nuestro modelo de datos al campo de la visualización)
Las selecciones no tienen un comportamiento especialmente lógico: un clic en uno de los nombres de los empleados (cabeceras de filas) no filtra la tabla de empleados ni el resto de visualizaciones que haya en nuestro informe (de hecho la visualización se reordena de forma un tanto inexplicable al hacer clic en una de estas cabeceras). Pero un clic en una de las barras horizontales sí lo hace. Un segundo clic en la misma barra debería deseleccionar al empleado en cuestión, pero no ocurre así: Hay que hacer clic en alguna de las etiquetas de la leyenda, por ejemplo, para que esto ocurra. Hay ciertas opciones para configurar las selecciones en <em>Formato > Multiselect</em>.
Por otro lado, la selección de uno de los recursos en otra visualización sí va a filtrar el <em>As Timeline</em>.
Una limitación de la visualización tiene que ver con el período siendo mostrado: si incluimos asignaciones de períodos lejanos, se muestran todos, con independencia de la escala que haya que aplicar. Por ejemplo, si una de las asignaciones de los datos con los que estamos trabajando se ha retrasado un año, la visualización muestra el siguiente aspecto:
La opción más conveniente es recurrir a una segmentación temporal adicional.
Otro factor a considerar es que el campo a llevar a <em>End Date</em> no es la última fecha en la que el recurso en cuestión está asignado, sino el primer día en el que ya no lo está. Por ejemplo, si un recurso está asignado solo un día, el 5/7/2019, habría que llevar a <em>Start Date</em> el valor 5/7/2019 y a End Date el valor 6/7/2019. De otra forma no se mostraría en la gráfica.
Aun con algunas limitaciones, se trata de una visualización muy práctica y recomendable.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterMetaData is deprecated in Drupal\Core\Database\Query\Select->addMetaData() (line 178 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addMetaData('entity_type', 'file') (Line: 115)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', '7574caa1-499e-42f8-8c74-1f14336b6047') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('La visualización <strong>As Timeline</strong> nos permite llevar a una línea de tiempo diferentes elementos caracterizados por una fecha de arranque y otra de finalización. La configuración es, además, muy sencilla e intuitiva.
Los datos con que queremos representar son los siguientes:
El campo <em>Employee Id</em> está asociado a una tabla de empleados en la que se incluyen, entre otros datos, el nombre del empleado (campo <em>Full Name</em>) y el departamento al que pertenece (campo <em>Department</em>).
Los campos que controlan la configuración de la visualización son los mostrados en la siguiente imagen:
Tras crear una instancia de la visualización, arrastremos el campo <em>Full Name</em> (nombre del empleado) al campo de la visualización <em>Entity</em>, y los campos <em>Start</em> y <em>End</em> de nuestro modelo de datos a los campos <em>Start Date</em> y <em>End Date</em> de la visualización, respectivamente. La visualización muestra el siguiente aspecto:
Es decir, con un par de clics ya tenemos una representación temporal de las asignaciones a los empleados en cuestión.
Es posible añadir una dimensión adicional que nos permita clasificar nuestros "recursos" (empleados en este ejemplo) utilizando el campo de la visualización <em>Category</em>. Llevemos a este campo el campo <em>Department</em> de nuestra tabla de datos, campo que contiene el departamento al que pertenece cada empleado. Téngase en cuenta que cada empleado pertenece a un único departamento:
Vemos que se ha añadido la "categoría" a las etiquetas de los empleados. Esto es configurable en <em>Formato > Behavior > Stacked</em> (véase siguiente imagen). Por otro lado, al mover el cursor encima de una de las barras horizontales asociadas a un empleado se muestra la información asociada:
Sin embargo, si la "categoría" añadida no es única para cada empleado, el comportamiento de la visualización cambia. Supongamos que nuestro empleados van a trabajar en el proyecto tanto como beta-testers como desarrolladores, y que cada una de las asignaciones (periodos de tiempo) los van a asociar a uno de los dos roles. Activemos la opción <em>Stacked</em> que hemos visto en <em>Formato > Behavior</em> y llevemos al campo <em>Category</em> de la visualización el campo <em>Role</em> de nuestra tabla:
Ahora la visualización está mostrando una fila para cada una de las combinaciones de empleado y role. Si desactivamos la opción <em>Stacked</em>, las filas correspondientes a cada empleado se muestran solapadas:
Podemos llevar al campo <em>Overlay</em> campos (uno o más) que queramos que se muestren sobre las barras. Por ejemplo, si llevamos el identificador del empleado, el resultado es el siguiente:
Estas etiquetas que se muestran son configurables en <em>Formato > Overlay text options</em>. El orden en el que se muestran dentro de una barra, sin embargo, es automático (no coincide con el orden en el que llevamos los campos de nuestro modelo de datos al campo de la visualización)
Las selecciones no tienen un comportamiento especialmente lógico: un clic en uno de los nombres de los empleados (cabeceras de filas) no filtra la tabla de empleados ni el resto de visualizaciones que haya en nuestro informe (de hecho la visualización se reordena de forma un tanto inexplicable al hacer clic en una de estas cabeceras). Pero un clic en una de las barras horizontales sí lo hace. Un segundo clic en la misma barra debería deseleccionar al empleado en cuestión, pero no ocurre así: Hay que hacer clic en alguna de las etiquetas de la leyenda, por ejemplo, para que esto ocurra. Hay ciertas opciones para configurar las selecciones en <em>Formato > Multiselect</em>.
Por otro lado, la selección de uno de los recursos en otra visualización sí va a filtrar el <em>As Timeline</em>.
Una limitación de la visualización tiene que ver con el período siendo mostrado: si incluimos asignaciones de períodos lejanos, se muestran todos, con independencia de la escala que haya que aplicar. Por ejemplo, si una de las asignaciones de los datos con los que estamos trabajando se ha retrasado un año, la visualización muestra el siguiente aspecto:
La opción más conveniente es recurrir a una segmentación temporal adicional.
Otro factor a considerar es que el campo a llevar a <em>End Date</em> no es la última fecha en la que el recurso en cuestión está asignado, sino el primer día en el que ya no lo está. Por ejemplo, si un recurso está asignado solo un día, el 5/7/2019, habría que llevar a <em>Start Date</em> el valor 5/7/2019 y a End Date el valor 6/7/2019. De otra forma no se mostraría en la gráfica.
Aun con algunas limitaciones, se trata de una visualización muy práctica y recomendable.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterTags is deprecated in Drupal\Core\Database\Query\Select->addTag() (line 149 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addTag('entity_query') (Line: 147)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', '7574caa1-499e-42f8-8c74-1f14336b6047') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('La visualización <strong>As Timeline</strong> nos permite llevar a una línea de tiempo diferentes elementos caracterizados por una fecha de arranque y otra de finalización. La configuración es, además, muy sencilla e intuitiva.
Los datos con que queremos representar son los siguientes:
El campo <em>Employee Id</em> está asociado a una tabla de empleados en la que se incluyen, entre otros datos, el nombre del empleado (campo <em>Full Name</em>) y el departamento al que pertenece (campo <em>Department</em>).
Los campos que controlan la configuración de la visualización son los mostrados en la siguiente imagen:
Tras crear una instancia de la visualización, arrastremos el campo <em>Full Name</em> (nombre del empleado) al campo de la visualización <em>Entity</em>, y los campos <em>Start</em> y <em>End</em> de nuestro modelo de datos a los campos <em>Start Date</em> y <em>End Date</em> de la visualización, respectivamente. La visualización muestra el siguiente aspecto:
Es decir, con un par de clics ya tenemos una representación temporal de las asignaciones a los empleados en cuestión.
Es posible añadir una dimensión adicional que nos permita clasificar nuestros "recursos" (empleados en este ejemplo) utilizando el campo de la visualización <em>Category</em>. Llevemos a este campo el campo <em>Department</em> de nuestra tabla de datos, campo que contiene el departamento al que pertenece cada empleado. Téngase en cuenta que cada empleado pertenece a un único departamento:
Vemos que se ha añadido la "categoría" a las etiquetas de los empleados. Esto es configurable en <em>Formato > Behavior > Stacked</em> (véase siguiente imagen). Por otro lado, al mover el cursor encima de una de las barras horizontales asociadas a un empleado se muestra la información asociada:
Sin embargo, si la "categoría" añadida no es única para cada empleado, el comportamiento de la visualización cambia. Supongamos que nuestro empleados van a trabajar en el proyecto tanto como beta-testers como desarrolladores, y que cada una de las asignaciones (periodos de tiempo) los van a asociar a uno de los dos roles. Activemos la opción <em>Stacked</em> que hemos visto en <em>Formato > Behavior</em> y llevemos al campo <em>Category</em> de la visualización el campo <em>Role</em> de nuestra tabla:
Ahora la visualización está mostrando una fila para cada una de las combinaciones de empleado y role. Si desactivamos la opción <em>Stacked</em>, las filas correspondientes a cada empleado se muestran solapadas:
Podemos llevar al campo <em>Overlay</em> campos (uno o más) que queramos que se muestren sobre las barras. Por ejemplo, si llevamos el identificador del empleado, el resultado es el siguiente:
Estas etiquetas que se muestran son configurables en <em>Formato > Overlay text options</em>. El orden en el que se muestran dentro de una barra, sin embargo, es automático (no coincide con el orden en el que llevamos los campos de nuestro modelo de datos al campo de la visualización)
Las selecciones no tienen un comportamiento especialmente lógico: un clic en uno de los nombres de los empleados (cabeceras de filas) no filtra la tabla de empleados ni el resto de visualizaciones que haya en nuestro informe (de hecho la visualización se reordena de forma un tanto inexplicable al hacer clic en una de estas cabeceras). Pero un clic en una de las barras horizontales sí lo hace. Un segundo clic en la misma barra debería deseleccionar al empleado en cuestión, pero no ocurre así: Hay que hacer clic en alguna de las etiquetas de la leyenda, por ejemplo, para que esto ocurra. Hay ciertas opciones para configurar las selecciones en <em>Formato > Multiselect</em>.
Por otro lado, la selección de uno de los recursos en otra visualización sí va a filtrar el <em>As Timeline</em>.
Una limitación de la visualización tiene que ver con el período siendo mostrado: si incluimos asignaciones de períodos lejanos, se muestran todos, con independencia de la escala que haya que aplicar. Por ejemplo, si una de las asignaciones de los datos con los que estamos trabajando se ha retrasado un año, la visualización muestra el siguiente aspecto:
La opción más conveniente es recurrir a una segmentación temporal adicional.
Otro factor a considerar es que el campo a llevar a <em>End Date</em> no es la última fecha en la que el recurso en cuestión está asignado, sino el primer día en el que ya no lo está. Por ejemplo, si un recurso está asignado solo un día, el 5/7/2019, habría que llevar a <em>Start Date</em> el valor 5/7/2019 y a End Date el valor 6/7/2019. De otra forma no se mostraría en la gráfica.
Aun con algunas limitaciones, se trata de una visualización muy práctica y recomendable.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterTags is deprecated in Drupal\Core\Database\Query\Select->addTag() (line 149 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addTag('file_load_multiple') (Line: 696)
Drupal\Core\Entity\Sql\SqlContentEntityStorage->buildQuery(Array) (Line: 422)
Drupal\Core\Entity\Sql\SqlContentEntityStorage->getFromStorage(Array) (Line: 393)
Drupal\Core\Entity\Sql\SqlContentEntityStorage->doLoadMultiple(Array) (Line: 346)
Drupal\Core\Entity\EntityStorageBase->loadMultiple(Array) (Line: 641)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', '7574caa1-499e-42f8-8c74-1f14336b6047') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('La visualización <strong>As Timeline</strong> nos permite llevar a una línea de tiempo diferentes elementos caracterizados por una fecha de arranque y otra de finalización. La configuración es, además, muy sencilla e intuitiva.
Los datos con que queremos representar son los siguientes:
El campo <em>Employee Id</em> está asociado a una tabla de empleados en la que se incluyen, entre otros datos, el nombre del empleado (campo <em>Full Name</em>) y el departamento al que pertenece (campo <em>Department</em>).
Los campos que controlan la configuración de la visualización son los mostrados en la siguiente imagen:
Tras crear una instancia de la visualización, arrastremos el campo <em>Full Name</em> (nombre del empleado) al campo de la visualización <em>Entity</em>, y los campos <em>Start</em> y <em>End</em> de nuestro modelo de datos a los campos <em>Start Date</em> y <em>End Date</em> de la visualización, respectivamente. La visualización muestra el siguiente aspecto:
Es decir, con un par de clics ya tenemos una representación temporal de las asignaciones a los empleados en cuestión.
Es posible añadir una dimensión adicional que nos permita clasificar nuestros "recursos" (empleados en este ejemplo) utilizando el campo de la visualización <em>Category</em>. Llevemos a este campo el campo <em>Department</em> de nuestra tabla de datos, campo que contiene el departamento al que pertenece cada empleado. Téngase en cuenta que cada empleado pertenece a un único departamento:
Vemos que se ha añadido la "categoría" a las etiquetas de los empleados. Esto es configurable en <em>Formato > Behavior > Stacked</em> (véase siguiente imagen). Por otro lado, al mover el cursor encima de una de las barras horizontales asociadas a un empleado se muestra la información asociada:
Sin embargo, si la "categoría" añadida no es única para cada empleado, el comportamiento de la visualización cambia. Supongamos que nuestro empleados van a trabajar en el proyecto tanto como beta-testers como desarrolladores, y que cada una de las asignaciones (periodos de tiempo) los van a asociar a uno de los dos roles. Activemos la opción <em>Stacked</em> que hemos visto en <em>Formato > Behavior</em> y llevemos al campo <em>Category</em> de la visualización el campo <em>Role</em> de nuestra tabla:
Ahora la visualización está mostrando una fila para cada una de las combinaciones de empleado y role. Si desactivamos la opción <em>Stacked</em>, las filas correspondientes a cada empleado se muestran solapadas:
Podemos llevar al campo <em>Overlay</em> campos (uno o más) que queramos que se muestren sobre las barras. Por ejemplo, si llevamos el identificador del empleado, el resultado es el siguiente:
Estas etiquetas que se muestran son configurables en <em>Formato > Overlay text options</em>. El orden en el que se muestran dentro de una barra, sin embargo, es automático (no coincide con el orden en el que llevamos los campos de nuestro modelo de datos al campo de la visualización)
Las selecciones no tienen un comportamiento especialmente lógico: un clic en uno de los nombres de los empleados (cabeceras de filas) no filtra la tabla de empleados ni el resto de visualizaciones que haya en nuestro informe (de hecho la visualización se reordena de forma un tanto inexplicable al hacer clic en una de estas cabeceras). Pero un clic en una de las barras horizontales sí lo hace. Un segundo clic en la misma barra debería deseleccionar al empleado en cuestión, pero no ocurre así: Hay que hacer clic en alguna de las etiquetas de la leyenda, por ejemplo, para que esto ocurra. Hay ciertas opciones para configurar las selecciones en <em>Formato > Multiselect</em>.
Por otro lado, la selección de uno de los recursos en otra visualización sí va a filtrar el <em>As Timeline</em>.
Una limitación de la visualización tiene que ver con el período siendo mostrado: si incluimos asignaciones de períodos lejanos, se muestran todos, con independencia de la escala que haya que aplicar. Por ejemplo, si una de las asignaciones de los datos con los que estamos trabajando se ha retrasado un año, la visualización muestra el siguiente aspecto:
La opción más conveniente es recurrir a una segmentación temporal adicional.
Otro factor a considerar es que el campo a llevar a <em>End Date</em> no es la última fecha en la que el recurso en cuestión está asignado, sino el primer día en el que ya no lo está. Por ejemplo, si un recurso está asignado solo un día, el 5/7/2019, habría que llevar a <em>Start Date</em> el valor 5/7/2019 y a End Date el valor 6/7/2019. De otra forma no se mostraría en la gráfica.
Aun con algunas limitaciones, se trata de una visualización muy práctica y recomendable.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterMetaData is deprecated in Drupal\Core\Database\Query\Select->addMetaData() (line 178 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addMetaData('entity_type', 'file') (Line: 115)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', '7574caa1-499e-42f8-8c74-1f14336b6047') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('La visualización <strong>As Timeline</strong> nos permite llevar a una línea de tiempo diferentes elementos caracterizados por una fecha de arranque y otra de finalización. La configuración es, además, muy sencilla e intuitiva.
Los datos con que queremos representar son los siguientes:
El campo <em>Employee Id</em> está asociado a una tabla de empleados en la que se incluyen, entre otros datos, el nombre del empleado (campo <em>Full Name</em>) y el departamento al que pertenece (campo <em>Department</em>).
Los campos que controlan la configuración de la visualización son los mostrados en la siguiente imagen:
Tras crear una instancia de la visualización, arrastremos el campo <em>Full Name</em> (nombre del empleado) al campo de la visualización <em>Entity</em>, y los campos <em>Start</em> y <em>End</em> de nuestro modelo de datos a los campos <em>Start Date</em> y <em>End Date</em> de la visualización, respectivamente. La visualización muestra el siguiente aspecto:
Es decir, con un par de clics ya tenemos una representación temporal de las asignaciones a los empleados en cuestión.
Es posible añadir una dimensión adicional que nos permita clasificar nuestros "recursos" (empleados en este ejemplo) utilizando el campo de la visualización <em>Category</em>. Llevemos a este campo el campo <em>Department</em> de nuestra tabla de datos, campo que contiene el departamento al que pertenece cada empleado. Téngase en cuenta que cada empleado pertenece a un único departamento:
Vemos que se ha añadido la "categoría" a las etiquetas de los empleados. Esto es configurable en <em>Formato > Behavior > Stacked</em> (véase siguiente imagen). Por otro lado, al mover el cursor encima de una de las barras horizontales asociadas a un empleado se muestra la información asociada:
Sin embargo, si la "categoría" añadida no es única para cada empleado, el comportamiento de la visualización cambia. Supongamos que nuestro empleados van a trabajar en el proyecto tanto como beta-testers como desarrolladores, y que cada una de las asignaciones (periodos de tiempo) los van a asociar a uno de los dos roles. Activemos la opción <em>Stacked</em> que hemos visto en <em>Formato > Behavior</em> y llevemos al campo <em>Category</em> de la visualización el campo <em>Role</em> de nuestra tabla:
Ahora la visualización está mostrando una fila para cada una de las combinaciones de empleado y role. Si desactivamos la opción <em>Stacked</em>, las filas correspondientes a cada empleado se muestran solapadas:
Podemos llevar al campo <em>Overlay</em> campos (uno o más) que queramos que se muestren sobre las barras. Por ejemplo, si llevamos el identificador del empleado, el resultado es el siguiente:
Estas etiquetas que se muestran son configurables en <em>Formato > Overlay text options</em>. El orden en el que se muestran dentro de una barra, sin embargo, es automático (no coincide con el orden en el que llevamos los campos de nuestro modelo de datos al campo de la visualización)
Las selecciones no tienen un comportamiento especialmente lógico: un clic en uno de los nombres de los empleados (cabeceras de filas) no filtra la tabla de empleados ni el resto de visualizaciones que haya en nuestro informe (de hecho la visualización se reordena de forma un tanto inexplicable al hacer clic en una de estas cabeceras). Pero un clic en una de las barras horizontales sí lo hace. Un segundo clic en la misma barra debería deseleccionar al empleado en cuestión, pero no ocurre así: Hay que hacer clic en alguna de las etiquetas de la leyenda, por ejemplo, para que esto ocurra. Hay ciertas opciones para configurar las selecciones en <em>Formato > Multiselect</em>.
Por otro lado, la selección de uno de los recursos en otra visualización sí va a filtrar el <em>As Timeline</em>.
Una limitación de la visualización tiene que ver con el período siendo mostrado: si incluimos asignaciones de períodos lejanos, se muestran todos, con independencia de la escala que haya que aplicar. Por ejemplo, si una de las asignaciones de los datos con los que estamos trabajando se ha retrasado un año, la visualización muestra el siguiente aspecto:
La opción más conveniente es recurrir a una segmentación temporal adicional.
Otro factor a considerar es que el campo a llevar a <em>End Date</em> no es la última fecha en la que el recurso en cuestión está asignado, sino el primer día en el que ya no lo está. Por ejemplo, si un recurso está asignado solo un día, el 5/7/2019, habría que llevar a <em>Start Date</em> el valor 5/7/2019 y a End Date el valor 6/7/2019. De otra forma no se mostraría en la gráfica.
Aun con algunas limitaciones, se trata de una visualización muy práctica y recomendable.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterTags is deprecated in Drupal\Core\Database\Query\Select->addTag() (line 149 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addTag('entity_query') (Line: 147)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', '7574caa1-499e-42f8-8c74-1f14336b6047') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('La visualización <strong>As Timeline</strong> nos permite llevar a una línea de tiempo diferentes elementos caracterizados por una fecha de arranque y otra de finalización. La configuración es, además, muy sencilla e intuitiva.
Los datos con que queremos representar son los siguientes:
El campo <em>Employee Id</em> está asociado a una tabla de empleados en la que se incluyen, entre otros datos, el nombre del empleado (campo <em>Full Name</em>) y el departamento al que pertenece (campo <em>Department</em>).
Los campos que controlan la configuración de la visualización son los mostrados en la siguiente imagen:
Tras crear una instancia de la visualización, arrastremos el campo <em>Full Name</em> (nombre del empleado) al campo de la visualización <em>Entity</em>, y los campos <em>Start</em> y <em>End</em> de nuestro modelo de datos a los campos <em>Start Date</em> y <em>End Date</em> de la visualización, respectivamente. La visualización muestra el siguiente aspecto:
Es decir, con un par de clics ya tenemos una representación temporal de las asignaciones a los empleados en cuestión.
Es posible añadir una dimensión adicional que nos permita clasificar nuestros "recursos" (empleados en este ejemplo) utilizando el campo de la visualización <em>Category</em>. Llevemos a este campo el campo <em>Department</em> de nuestra tabla de datos, campo que contiene el departamento al que pertenece cada empleado. Téngase en cuenta que cada empleado pertenece a un único departamento:
Vemos que se ha añadido la "categoría" a las etiquetas de los empleados. Esto es configurable en <em>Formato > Behavior > Stacked</em> (véase siguiente imagen). Por otro lado, al mover el cursor encima de una de las barras horizontales asociadas a un empleado se muestra la información asociada:
Sin embargo, si la "categoría" añadida no es única para cada empleado, el comportamiento de la visualización cambia. Supongamos que nuestro empleados van a trabajar en el proyecto tanto como beta-testers como desarrolladores, y que cada una de las asignaciones (periodos de tiempo) los van a asociar a uno de los dos roles. Activemos la opción <em>Stacked</em> que hemos visto en <em>Formato > Behavior</em> y llevemos al campo <em>Category</em> de la visualización el campo <em>Role</em> de nuestra tabla:
Ahora la visualización está mostrando una fila para cada una de las combinaciones de empleado y role. Si desactivamos la opción <em>Stacked</em>, las filas correspondientes a cada empleado se muestran solapadas:
Podemos llevar al campo <em>Overlay</em> campos (uno o más) que queramos que se muestren sobre las barras. Por ejemplo, si llevamos el identificador del empleado, el resultado es el siguiente:
Estas etiquetas que se muestran son configurables en <em>Formato > Overlay text options</em>. El orden en el que se muestran dentro de una barra, sin embargo, es automático (no coincide con el orden en el que llevamos los campos de nuestro modelo de datos al campo de la visualización)
Las selecciones no tienen un comportamiento especialmente lógico: un clic en uno de los nombres de los empleados (cabeceras de filas) no filtra la tabla de empleados ni el resto de visualizaciones que haya en nuestro informe (de hecho la visualización se reordena de forma un tanto inexplicable al hacer clic en una de estas cabeceras). Pero un clic en una de las barras horizontales sí lo hace. Un segundo clic en la misma barra debería deseleccionar al empleado en cuestión, pero no ocurre así: Hay que hacer clic en alguna de las etiquetas de la leyenda, por ejemplo, para que esto ocurra. Hay ciertas opciones para configurar las selecciones en <em>Formato > Multiselect</em>.
Por otro lado, la selección de uno de los recursos en otra visualización sí va a filtrar el <em>As Timeline</em>.
Una limitación de la visualización tiene que ver con el período siendo mostrado: si incluimos asignaciones de períodos lejanos, se muestran todos, con independencia de la escala que haya que aplicar. Por ejemplo, si una de las asignaciones de los datos con los que estamos trabajando se ha retrasado un año, la visualización muestra el siguiente aspecto:
La opción más conveniente es recurrir a una segmentación temporal adicional.
Otro factor a considerar es que el campo a llevar a <em>End Date</em> no es la última fecha en la que el recurso en cuestión está asignado, sino el primer día en el que ya no lo está. Por ejemplo, si un recurso está asignado solo un día, el 5/7/2019, habría que llevar a <em>Start Date</em> el valor 5/7/2019 y a End Date el valor 6/7/2019. De otra forma no se mostraría en la gráfica.
Aun con algunas limitaciones, se trata de una visualización muy práctica y recomendable.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Return type of Drupal\google_analytics\Component\Render\GoogleAnalyticsJavaScriptSnippet::jsonSerialize() should either be compatible with JsonSerializable::jsonSerialize(): mixed, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in include() (line 10 of modules/contrib/google_analytics/src/Component/Render/GoogleAnalyticsJavaScriptSnippet.php).
include('/var/www/vhosts/interactivechaos.ovh/httpdocs/modules/contrib/google_analytics/src/Component/Render/GoogleAnalyticsJavaScriptSnippet.php') (Line: 578)
Composer\Autoload\ClassLoader::Composer\Autoload\{closure}('/var/www/vhosts/interactivechaos.ovh/httpdocs/modules/contrib/google_analytics/src/Component/Render/GoogleAnalyticsJavaScriptSnippet.php') (Line: 432)
Composer\Autoload\ClassLoader->loadClass('Drupal\google_analytics\Component\Render\GoogleAnalyticsJavaScriptSnippet') (Line: 372)
google_analytics_page_attachments(Array) (Line: 313)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}(Object, 'google_analytics') (Line: 405)
Drupal\Core\Extension\ModuleHandler->invokeAllWith('page_attachments', Object) (Line: 310)
Drupal\Core\Render\MainContent\HtmlRenderer->invokePageAttachmentHooks(Array) (Line: 288)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Use of "static" in callables is deprecated in Drupal\user\Entity\Role::postLoad() (line 172 of core/modules/user/src/Entity/Role.php).
Drupal\user\Entity\Role::postLoad(Object, Array) (Line: 423)
Drupal\Core\Entity\EntityStorageBase->postLoad(Array) (Line: 353)
Drupal\Core\Entity\EntityStorageBase->loadMultiple() (Line: 126)
eu_cookie_compliance_page_attachments(Array) (Line: 313)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}(Object, 'eu_cookie_compliance') (Line: 405)
Drupal\Core\Extension\ModuleHandler->invokeAllWith('page_attachments', Object) (Line: 310)
Drupal\Core\Render\MainContent\HtmlRenderer->invokePageAttachmentHooks(Array) (Line: 288)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\views\ManyToOneHelper::$handler is deprecated in Drupal\views\ManyToOneHelper->__construct() (line 24 of core/modules/views/src/ManyToOneHelper.php).
Drupal\views\ManyToOneHelper->__construct(Object) (Line: 51)
Drupal\views\Plugin\views\filter\ManyToOne->defineOptions() (Line: 117)
Drupal\taxonomy\Plugin\views\filter\TaxonomyIndexTid->defineOptions() (Line: 141)
Drupal\views\Plugin\views\PluginBase->init(Object, Object, Array) (Line: 104)
Drupal\views\Plugin\views\HandlerBase->init(Object, Object, Array) (Line: 95)
Drupal\views\Plugin\views\filter\FilterPluginBase->init(Object, Object, Array) (Line: 44)
Drupal\views\Plugin\views\filter\InOperator->init(Object, Object, Array) (Line: 36)
Drupal\views\Plugin\views\filter\ManyToOne->init(Object, Object, Array) (Line: 98)
Drupal\taxonomy\Plugin\views\filter\TaxonomyIndexTid->init(Object, Object, Array) (Line: 894)
Drupal\views\Plugin\views\display\DisplayPluginBase->getHandlers('filter') (Line: 1045)
Drupal\views\ViewExecutable->_initHandler('filter', Array) (Line: 903)
Drupal\views\ViewExecutable->initHandlers() (Line: 2633)
Drupal\views\Plugin\views\display\DisplayPluginBase->viewExposedFormBlocks() (Line: 35)
Drupal\views\Plugin\Block\ViewsExposedFilterBlock->build() (Line: 171)
Drupal\block\BlockViewBuilder::preRender(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, 1) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, 1) (Line: 160)
Drupal\Core\Render\Renderer->Drupal\Core\Render\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 159)
Drupal\Core\Render\Renderer->renderPlain(Array) (Line: 175)
Drupal\Core\Render\Renderer->renderPlaceholder('', Array) (Line: 665)
Drupal\Core\Render\Renderer->replacePlaceholders(Array) (Line: 550)
Drupal\Core\Render\Renderer->doRender(Array, 1) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, 1) (Line: 148)
Drupal\Core\Render\Renderer->Drupal\Core\Render\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 147)
Drupal\Core\Render\Renderer->renderRoot(Array) (Line: 279)
Drupal\Core\Render\HtmlResponseAttachmentsProcessor->renderPlaceholders(Object) (Line: 71)
Drupal\big_pipe\Render\BigPipeResponseAttachmentsProcessor->processAttachments(Object) (Line: 45)
Drupal\Core\EventSubscriber\HtmlResponseSubscriber->onRespond(Object, 'kernel.response', Object)
call_user_func(Array, Object, 'kernel.response', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.response') (Line: 202)
Symfony\Component\HttpKernel\HttpKernel->filterResponse(Object, Object, 1) (Line: 190)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\views\ManyToOneHelper::$handler is deprecated in Drupal\views\ManyToOneHelper->__construct() (line 24 of core/modules/views/src/ManyToOneHelper.php).
Drupal\views\ManyToOneHelper->__construct(Object) (Line: 51)
Drupal\views\Plugin\views\filter\ManyToOne->defineOptions() (Line: 117)
Drupal\taxonomy\Plugin\views\filter\TaxonomyIndexTid->defineOptions() (Line: 228)
Drupal\views\Plugin\views\PluginBase->unpackOptions(Array, Array) (Line: 144)
Drupal\views\Plugin\views\PluginBase->init(Object, Object, Array) (Line: 104)
Drupal\views\Plugin\views\HandlerBase->init(Object, Object, Array) (Line: 95)
Drupal\views\Plugin\views\filter\FilterPluginBase->init(Object, Object, Array) (Line: 44)
Drupal\views\Plugin\views\filter\InOperator->init(Object, Object, Array) (Line: 36)
Drupal\views\Plugin\views\filter\ManyToOne->init(Object, Object, Array) (Line: 98)
Drupal\taxonomy\Plugin\views\filter\TaxonomyIndexTid->init(Object, Object, Array) (Line: 894)
Drupal\views\Plugin\views\display\DisplayPluginBase->getHandlers('filter') (Line: 1045)
Drupal\views\ViewExecutable->_initHandler('filter', Array) (Line: 903)
Drupal\views\ViewExecutable->initHandlers() (Line: 2633)
Drupal\views\Plugin\views\display\DisplayPluginBase->viewExposedFormBlocks() (Line: 35)
Drupal\views\Plugin\Block\ViewsExposedFilterBlock->build() (Line: 171)
Drupal\block\BlockViewBuilder::preRender(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, 1) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, 1) (Line: 160)
Drupal\Core\Render\Renderer->Drupal\Core\Render\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 159)
Drupal\Core\Render\Renderer->renderPlain(Array) (Line: 175)
Drupal\Core\Render\Renderer->renderPlaceholder('', Array) (Line: 665)
Drupal\Core\Render\Renderer->replacePlaceholders(Array) (Line: 550)
Drupal\Core\Render\Renderer->doRender(Array, 1) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, 1) (Line: 148)
Drupal\Core\Render\Renderer->Drupal\Core\Render\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 147)
Drupal\Core\Render\Renderer->renderRoot(Array) (Line: 279)
Drupal\Core\Render\HtmlResponseAttachmentsProcessor->renderPlaceholders(Object) (Line: 71)
Drupal\big_pipe\Render\BigPipeResponseAttachmentsProcessor->processAttachments(Object) (Line: 45)
Drupal\Core\EventSubscriber\HtmlResponseSubscriber->onRespond(Object, 'kernel.response', Object)
call_user_func(Array, Object, 'kernel.response', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.response') (Line: 202)
Symfony\Component\HttpKernel\HttpKernel->filterResponse(Object, Object, 1) (Line: 190)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\views\ManyToOneHelper::$handler is deprecated in Drupal\views\ManyToOneHelper->__construct() (line 24 of core/modules/views/src/ManyToOneHelper.php).
Drupal\views\ManyToOneHelper->__construct(Object) (Line: 51)
Drupal\views\Plugin\views\filter\ManyToOne->defineOptions() (Line: 117)
Drupal\taxonomy\Plugin\views\filter\TaxonomyIndexTid->defineOptions() (Line: 228)
Drupal\views\Plugin\views\PluginBase->unpackOptions(Array, Array) (Line: 110)
Drupal\views\Plugin\views\HandlerBase->init(Object, Object, Array) (Line: 95)
Drupal\views\Plugin\views\filter\FilterPluginBase->init(Object, Object, Array) (Line: 44)
Drupal\views\Plugin\views\filter\InOperator->init(Object, Object, Array) (Line: 36)
Drupal\views\Plugin\views\filter\ManyToOne->init(Object, Object, Array) (Line: 98)
Drupal\taxonomy\Plugin\views\filter\TaxonomyIndexTid->init(Object, Object, Array) (Line: 894)
Drupal\views\Plugin\views\display\DisplayPluginBase->getHandlers('filter') (Line: 1045)
Drupal\views\ViewExecutable->_initHandler('filter', Array) (Line: 903)
Drupal\views\ViewExecutable->initHandlers() (Line: 2633)
Drupal\views\Plugin\views\display\DisplayPluginBase->viewExposedFormBlocks() (Line: 35)
Drupal\views\Plugin\Block\ViewsExposedFilterBlock->build() (Line: 171)
Drupal\block\BlockViewBuilder::preRender(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, 1) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, 1) (Line: 160)
Drupal\Core\Render\Renderer->Drupal\Core\Render\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 159)
Drupal\Core\Render\Renderer->renderPlain(Array) (Line: 175)
Drupal\Core\Render\Renderer->renderPlaceholder('', Array) (Line: 665)
Drupal\Core\Render\Renderer->replacePlaceholders(Array) (Line: 550)
Drupal\Core\Render\Renderer->doRender(Array, 1) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, 1) (Line: 148)
Drupal\Core\Render\Renderer->Drupal\Core\Render\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 147)
Drupal\Core\Render\Renderer->renderRoot(Array) (Line: 279)
Drupal\Core\Render\HtmlResponseAttachmentsProcessor->renderPlaceholders(Object) (Line: 71)
Drupal\big_pipe\Render\BigPipeResponseAttachmentsProcessor->processAttachments(Object) (Line: 45)
Drupal\Core\EventSubscriber\HtmlResponseSubscriber->onRespond(Object, 'kernel.response', Object)
call_user_func(Array, Object, 'kernel.response', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.response') (Line: 202)
Symfony\Component\HttpKernel\HttpKernel->filterResponse(Object, Object, 1) (Line: 190)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\views\ManyToOneHelper::$handler is deprecated in Drupal\views\ManyToOneHelper->__construct() (line 24 of core/modules/views/src/ManyToOneHelper.php).
Drupal\views\ManyToOneHelper->__construct(Object) (Line: 38)
Drupal\views\Plugin\views\filter\ManyToOne->init(Object, Object, Array) (Line: 98)
Drupal\taxonomy\Plugin\views\filter\TaxonomyIndexTid->init(Object, Object, Array) (Line: 894)
Drupal\views\Plugin\views\display\DisplayPluginBase->getHandlers('filter') (Line: 1045)
Drupal\views\ViewExecutable->_initHandler('filter', Array) (Line: 903)
Drupal\views\ViewExecutable->initHandlers() (Line: 2633)
Drupal\views\Plugin\views\display\DisplayPluginBase->viewExposedFormBlocks() (Line: 35)
Drupal\views\Plugin\Block\ViewsExposedFilterBlock->build() (Line: 171)
Drupal\block\BlockViewBuilder::preRender(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, 1) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, 1) (Line: 160)
Drupal\Core\Render\Renderer->Drupal\Core\Render\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 159)
Drupal\Core\Render\Renderer->renderPlain(Array) (Line: 175)
Drupal\Core\Render\Renderer->renderPlaceholder('', Array) (Line: 665)
Drupal\Core\Render\Renderer->replacePlaceholders(Array) (Line: 550)
Drupal\Core\Render\Renderer->doRender(Array, 1) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, 1) (Line: 148)
Drupal\Core\Render\Renderer->Drupal\Core\Render\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 147)
Drupal\Core\Render\Renderer->renderRoot(Array) (Line: 279)
Drupal\Core\Render\HtmlResponseAttachmentsProcessor->renderPlaceholders(Object) (Line: 71)
Drupal\big_pipe\Render\BigPipeResponseAttachmentsProcessor->processAttachments(Object) (Line: 45)
Drupal\Core\EventSubscriber\HtmlResponseSubscriber->onRespond(Object, 'kernel.response', Object)
call_user_func(Array, Object, 'kernel.response', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.response') (Line: 202)
Symfony\Component\HttpKernel\HttpKernel->filterResponse(Object, Object, 1) (Line: 190)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\views\ManyToOneHelper::$handler is deprecated in Drupal\views\ManyToOneHelper->__construct() (line 24 of core/modules/views/src/ManyToOneHelper.php).
Drupal\views\ManyToOneHelper->__construct(Object) (Line: 51)
Drupal\views\Plugin\views\filter\ManyToOne->defineOptions() (Line: 117)
Drupal\taxonomy\Plugin\views\filter\TaxonomyIndexTid->defineOptions() (Line: 141)
Drupal\views\Plugin\views\PluginBase->init(Object, Object, Array) (Line: 104)
Drupal\views\Plugin\views\HandlerBase->init(Object, Object, Array) (Line: 95)
Drupal\views\Plugin\views\filter\FilterPluginBase->init(Object, Object, Array) (Line: 44)
Drupal\views\Plugin\views\filter\InOperator->init(Object, Object, Array) (Line: 36)
Drupal\views\Plugin\views\filter\ManyToOne->init(Object, Object, Array) (Line: 98)
Drupal\taxonomy\Plugin\views\filter\TaxonomyIndexTid->init(Object, Object, Array) (Line: 894)
Drupal\views\Plugin\views\display\DisplayPluginBase->getHandlers('filter') (Line: 1045)
Drupal\views\ViewExecutable->_initHandler('filter', Array) (Line: 903)
Drupal\views\ViewExecutable->initHandlers() (Line: 2633)
Drupal\views\Plugin\views\display\DisplayPluginBase->viewExposedFormBlocks() (Line: 35)
Drupal\views\Plugin\Block\ViewsExposedFilterBlock->build() (Line: 171)
Drupal\block\BlockViewBuilder::preRender(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, 1) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, 1) (Line: 160)
Drupal\Core\Render\Renderer->Drupal\Core\Render\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 159)
Drupal\Core\Render\Renderer->renderPlain(Array) (Line: 175)
Drupal\Core\Render\Renderer->renderPlaceholder('', Array) (Line: 665)
Drupal\Core\Render\Renderer->replacePlaceholders(Array) (Line: 550)
Drupal\Core\Render\Renderer->doRender(Array, 1) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, 1) (Line: 148)
Drupal\Core\Render\Renderer->Drupal\Core\Render\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 147)
Drupal\Core\Render\Renderer->renderRoot(Array) (Line: 279)
Drupal\Core\Render\HtmlResponseAttachmentsProcessor->renderPlaceholders(Object) (Line: 71)
Drupal\big_pipe\Render\BigPipeResponseAttachmentsProcessor->processAttachments(Object) (Line: 45)
Drupal\Core\EventSubscriber\HtmlResponseSubscriber->onRespond(Object, 'kernel.response', Object)
call_user_func(Array, Object, 'kernel.response', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.response') (Line: 202)
Symfony\Component\HttpKernel\HttpKernel->filterResponse(Object, Object, 1) (Line: 190)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\views\ManyToOneHelper::$handler is deprecated in Drupal\views\ManyToOneHelper->__construct() (line 24 of core/modules/views/src/ManyToOneHelper.php).
Drupal\views\ManyToOneHelper->__construct(Object) (Line: 51)
Drupal\views\Plugin\views\filter\ManyToOne->defineOptions() (Line: 117)
Drupal\taxonomy\Plugin\views\filter\TaxonomyIndexTid->defineOptions() (Line: 228)
Drupal\views\Plugin\views\PluginBase->unpackOptions(Array, Array) (Line: 144)
Drupal\views\Plugin\views\PluginBase->init(Object, Object, Array) (Line: 104)
Drupal\views\Plugin\views\HandlerBase->init(Object, Object, Array) (Line: 95)
Drupal\views\Plugin\views\filter\FilterPluginBase->init(Object, Object, Array) (Line: 44)
Drupal\views\Plugin\views\filter\InOperator->init(Object, Object, Array) (Line: 36)
Drupal\views\Plugin\views\filter\ManyToOne->init(Object, Object, Array) (Line: 98)
Drupal\taxonomy\Plugin\views\filter\TaxonomyIndexTid->init(Object, Object, Array) (Line: 894)
Drupal\views\Plugin\views\display\DisplayPluginBase->getHandlers('filter') (Line: 1045)
Drupal\views\ViewExecutable->_initHandler('filter', Array) (Line: 903)
Drupal\views\ViewExecutable->initHandlers() (Line: 2633)
Drupal\views\Plugin\views\display\DisplayPluginBase->viewExposedFormBlocks() (Line: 35)
Drupal\views\Plugin\Block\ViewsExposedFilterBlock->build() (Line: 171)
Drupal\block\BlockViewBuilder::preRender(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, 1) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, 1) (Line: 160)
Drupal\Core\Render\Renderer->Drupal\Core\Render\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 159)
Drupal\Core\Render\Renderer->renderPlain(Array) (Line: 175)
Drupal\Core\Render\Renderer->renderPlaceholder('', Array) (Line: 665)
Drupal\Core\Render\Renderer->replacePlaceholders(Array) (Line: 550)
Drupal\Core\Render\Renderer->doRender(Array, 1) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, 1) (Line: 148)
Drupal\Core\Render\Renderer->Drupal\Core\Render\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 147)
Drupal\Core\Render\Renderer->renderRoot(Array) (Line: 279)
Drupal\Core\Render\HtmlResponseAttachmentsProcessor->renderPlaceholders(Object) (Line: 71)
Drupal\big_pipe\Render\BigPipeResponseAttachmentsProcessor->processAttachments(Object) (Line: 45)
Drupal\Core\EventSubscriber\HtmlResponseSubscriber->onRespond(Object, 'kernel.response', Object)
call_user_func(Array, Object, 'kernel.response', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.response') (Line: 202)
Symfony\Component\HttpKernel\HttpKernel->filterResponse(Object, Object, 1) (Line: 190)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\views\ManyToOneHelper::$handler is deprecated in Drupal\views\ManyToOneHelper->__construct() (line 24 of core/modules/views/src/ManyToOneHelper.php).
Drupal\views\ManyToOneHelper->__construct(Object) (Line: 51)
Drupal\views\Plugin\views\filter\ManyToOne->defineOptions() (Line: 117)
Drupal\taxonomy\Plugin\views\filter\TaxonomyIndexTid->defineOptions() (Line: 228)
Drupal\views\Plugin\views\PluginBase->unpackOptions(Array, Array) (Line: 110)
Drupal\views\Plugin\views\HandlerBase->init(Object, Object, Array) (Line: 95)
Drupal\views\Plugin\views\filter\FilterPluginBase->init(Object, Object, Array) (Line: 44)
Drupal\views\Plugin\views\filter\InOperator->init(Object, Object, Array) (Line: 36)
Drupal\views\Plugin\views\filter\ManyToOne->init(Object, Object, Array) (Line: 98)
Drupal\taxonomy\Plugin\views\filter\TaxonomyIndexTid->init(Object, Object, Array) (Line: 894)
Drupal\views\Plugin\views\display\DisplayPluginBase->getHandlers('filter') (Line: 1045)
Drupal\views\ViewExecutable->_initHandler('filter', Array) (Line: 903)
Drupal\views\ViewExecutable->initHandlers() (Line: 2633)
Drupal\views\Plugin\views\display\DisplayPluginBase->viewExposedFormBlocks() (Line: 35)
Drupal\views\Plugin\Block\ViewsExposedFilterBlock->build() (Line: 171)
Drupal\block\BlockViewBuilder::preRender(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, 1) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, 1) (Line: 160)
Drupal\Core\Render\Renderer->Drupal\Core\Render\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 159)
Drupal\Core\Render\Renderer->renderPlain(Array) (Line: 175)
Drupal\Core\Render\Renderer->renderPlaceholder('', Array) (Line: 665)
Drupal\Core\Render\Renderer->replacePlaceholders(Array) (Line: 550)
Drupal\Core\Render\Renderer->doRender(Array, 1) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, 1) (Line: 148)
Drupal\Core\Render\Renderer->Drupal\Core\Render\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 147)
Drupal\Core\Render\Renderer->renderRoot(Array) (Line: 279)
Drupal\Core\Render\HtmlResponseAttachmentsProcessor->renderPlaceholders(Object) (Line: 71)
Drupal\big_pipe\Render\BigPipeResponseAttachmentsProcessor->processAttachments(Object) (Line: 45)
Drupal\Core\EventSubscriber\HtmlResponseSubscriber->onRespond(Object, 'kernel.response', Object)
call_user_func(Array, Object, 'kernel.response', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.response') (Line: 202)
Symfony\Component\HttpKernel\HttpKernel->filterResponse(Object, Object, 1) (Line: 190)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\views\ManyToOneHelper::$handler is deprecated in Drupal\views\ManyToOneHelper->__construct() (line 24 of core/modules/views/src/ManyToOneHelper.php).
Drupal\views\ManyToOneHelper->__construct(Object) (Line: 38)
Drupal\views\Plugin\views\filter\ManyToOne->init(Object, Object, Array) (Line: 98)
Drupal\taxonomy\Plugin\views\filter\TaxonomyIndexTid->init(Object, Object, Array) (Line: 894)
Drupal\views\Plugin\views\display\DisplayPluginBase->getHandlers('filter') (Line: 1045)
Drupal\views\ViewExecutable->_initHandler('filter', Array) (Line: 903)
Drupal\views\ViewExecutable->initHandlers() (Line: 2633)
Drupal\views\Plugin\views\display\DisplayPluginBase->viewExposedFormBlocks() (Line: 35)
Drupal\views\Plugin\Block\ViewsExposedFilterBlock->build() (Line: 171)
Drupal\block\BlockViewBuilder::preRender(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, 1) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, 1) (Line: 160)
Drupal\Core\Render\Renderer->Drupal\Core\Render\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 159)
Drupal\Core\Render\Renderer->renderPlain(Array) (Line: 175)
Drupal\Core\Render\Renderer->renderPlaceholder('', Array) (Line: 665)
Drupal\Core\Render\Renderer->replacePlaceholders(Array) (Line: 550)
Drupal\Core\Render\Renderer->doRender(Array, 1) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, 1) (Line: 148)
Drupal\Core\Render\Renderer->Drupal\Core\Render\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 147)
Drupal\Core\Render\Renderer->renderRoot(Array) (Line: 279)
Drupal\Core\Render\HtmlResponseAttachmentsProcessor->renderPlaceholders(Object) (Line: 71)
Drupal\big_pipe\Render\BigPipeResponseAttachmentsProcessor->processAttachments(Object) (Line: 45)
Drupal\Core\EventSubscriber\HtmlResponseSubscriber->onRespond(Object, 'kernel.response', Object)
call_user_func(Array, Object, 'kernel.response', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.response') (Line: 202)
Symfony\Component\HttpKernel\HttpKernel->filterResponse(Object, Object, 1) (Line: 190)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterMetaData is deprecated in Drupal\Core\Database\Query\Select->addMetaData() (line 178 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addMetaData('entity_type', 'taxonomy_term') (Line: 115)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 228)
Drupal\taxonomy\Plugin\views\filter\TaxonomyIndexTid->valueForm(Array, Object) (Line: 941)
Drupal\views\Plugin\views\filter\FilterPluginBase->buildExposedForm(Array, Object) (Line: 111)
Drupal\views\Form\ViewsExposedForm->buildForm(Array, Object)
call_user_func_array(Array, Array) (Line: 534)
Drupal\Core\Form\FormBuilder->retrieveForm('views_exposed_form', Object) (Line: 281)
Drupal\Core\Form\FormBuilder->buildForm('\Drupal\views\Form\ViewsExposedForm', Object) (Line: 134)
Drupal\views\Plugin\views\exposed_form\ExposedFormPluginBase->renderExposedForm(1) (Line: 2638)
Drupal\views\Plugin\views\display\DisplayPluginBase->viewExposedFormBlocks() (Line: 35)
Drupal\views\Plugin\Block\ViewsExposedFilterBlock->build() (Line: 171)
Drupal\block\BlockViewBuilder::preRender(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, 1) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, 1) (Line: 160)
Drupal\Core\Render\Renderer->Drupal\Core\Render\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 159)
Drupal\Core\Render\Renderer->renderPlain(Array) (Line: 175)
Drupal\Core\Render\Renderer->renderPlaceholder('', Array) (Line: 665)
Drupal\Core\Render\Renderer->replacePlaceholders(Array) (Line: 550)
Drupal\Core\Render\Renderer->doRender(Array, 1) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, 1) (Line: 148)
Drupal\Core\Render\Renderer->Drupal\Core\Render\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 147)
Drupal\Core\Render\Renderer->renderRoot(Array) (Line: 279)
Drupal\Core\Render\HtmlResponseAttachmentsProcessor->renderPlaceholders(Object) (Line: 71)
Drupal\big_pipe\Render\BigPipeResponseAttachmentsProcessor->processAttachments(Object) (Line: 45)
Drupal\Core\EventSubscriber\HtmlResponseSubscriber->onRespond(Object, 'kernel.response', Object)
call_user_func(Array, Object, 'kernel.response', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.response') (Line: 202)
Symfony\Component\HttpKernel\HttpKernel->filterResponse(Object, Object, 1) (Line: 190)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterTags is deprecated in Drupal\Core\Database\Query\Select->addTag() (line 149 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addTag('taxonomy_term_access') (Line: 145)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 228)
Drupal\taxonomy\Plugin\views\filter\TaxonomyIndexTid->valueForm(Array, Object) (Line: 941)
Drupal\views\Plugin\views\filter\FilterPluginBase->buildExposedForm(Array, Object) (Line: 111)
Drupal\views\Form\ViewsExposedForm->buildForm(Array, Object)
call_user_func_array(Array, Array) (Line: 534)
Drupal\Core\Form\FormBuilder->retrieveForm('views_exposed_form', Object) (Line: 281)
Drupal\Core\Form\FormBuilder->buildForm('\Drupal\views\Form\ViewsExposedForm', Object) (Line: 134)
Drupal\views\Plugin\views\exposed_form\ExposedFormPluginBase->renderExposedForm(1) (Line: 2638)
Drupal\views\Plugin\views\display\DisplayPluginBase->viewExposedFormBlocks() (Line: 35)
Drupal\views\Plugin\Block\ViewsExposedFilterBlock->build() (Line: 171)
Drupal\block\BlockViewBuilder::preRender(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, 1) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, 1) (Line: 160)
Drupal\Core\Render\Renderer->Drupal\Core\Render\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 159)
Drupal\Core\Render\Renderer->renderPlain(Array) (Line: 175)
Drupal\Core\Render\Renderer->renderPlaceholder('', Array) (Line: 665)
Drupal\Core\Render\Renderer->replacePlaceholders(Array) (Line: 550)
Drupal\Core\Render\Renderer->doRender(Array, 1) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, 1) (Line: 148)
Drupal\Core\Render\Renderer->Drupal\Core\Render\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 147)
Drupal\Core\Render\Renderer->renderRoot(Array) (Line: 279)
Drupal\Core\Render\HtmlResponseAttachmentsProcessor->renderPlaceholders(Object) (Line: 71)
Drupal\big_pipe\Render\BigPipeResponseAttachmentsProcessor->processAttachments(Object) (Line: 45)
Drupal\Core\EventSubscriber\HtmlResponseSubscriber->onRespond(Object, 'kernel.response', Object)
call_user_func(Array, Object, 'kernel.response', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.response') (Line: 202)
Symfony\Component\HttpKernel\HttpKernel->filterResponse(Object, Object, 1) (Line: 190)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterMetaData is deprecated in Drupal\Core\Database\Query\Select->addMetaData() (line 178 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addMetaData('entity_type', 'taxonomy_term') (Line: 115)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 228)
Drupal\taxonomy\Plugin\views\filter\TaxonomyIndexTid->valueForm(Array, Object) (Line: 941)
Drupal\views\Plugin\views\filter\FilterPluginBase->buildExposedForm(Array, Object) (Line: 111)
Drupal\views\Form\ViewsExposedForm->buildForm(Array, Object)
call_user_func_array(Array, Array) (Line: 534)
Drupal\Core\Form\FormBuilder->retrieveForm('views_exposed_form', Object) (Line: 281)
Drupal\Core\Form\FormBuilder->buildForm('\Drupal\views\Form\ViewsExposedForm', Object) (Line: 134)
Drupal\views\Plugin\views\exposed_form\ExposedFormPluginBase->renderExposedForm(1) (Line: 2638)
Drupal\views\Plugin\views\display\DisplayPluginBase->viewExposedFormBlocks() (Line: 35)
Drupal\views\Plugin\Block\ViewsExposedFilterBlock->build() (Line: 171)
Drupal\block\BlockViewBuilder::preRender(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, 1) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, 1) (Line: 160)
Drupal\Core\Render\Renderer->Drupal\Core\Render\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 159)
Drupal\Core\Render\Renderer->renderPlain(Array) (Line: 175)
Drupal\Core\Render\Renderer->renderPlaceholder('', Array) (Line: 665)
Drupal\Core\Render\Renderer->replacePlaceholders(Array) (Line: 550)
Drupal\Core\Render\Renderer->doRender(Array, 1) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, 1) (Line: 148)
Drupal\Core\Render\Renderer->Drupal\Core\Render\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 147)
Drupal\Core\Render\Renderer->renderRoot(Array) (Line: 279)
Drupal\Core\Render\HtmlResponseAttachmentsProcessor->renderPlaceholders(Object) (Line: 71)
Drupal\big_pipe\Render\BigPipeResponseAttachmentsProcessor->processAttachments(Object) (Line: 45)
Drupal\Core\EventSubscriber\HtmlResponseSubscriber->onRespond(Object, 'kernel.response', Object)
call_user_func(Array, Object, 'kernel.response', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.response') (Line: 202)
Symfony\Component\HttpKernel\HttpKernel->filterResponse(Object, Object, 1) (Line: 190)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterTags is deprecated in Drupal\Core\Database\Query\Select->addTag() (line 149 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addTag('taxonomy_term_access') (Line: 145)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 228)
Drupal\taxonomy\Plugin\views\filter\TaxonomyIndexTid->valueForm(Array, Object) (Line: 941)
Drupal\views\Plugin\views\filter\FilterPluginBase->buildExposedForm(Array, Object) (Line: 111)
Drupal\views\Form\ViewsExposedForm->buildForm(Array, Object)
call_user_func_array(Array, Array) (Line: 534)
Drupal\Core\Form\FormBuilder->retrieveForm('views_exposed_form', Object) (Line: 281)
Drupal\Core\Form\FormBuilder->buildForm('\Drupal\views\Form\ViewsExposedForm', Object) (Line: 134)
Drupal\views\Plugin\views\exposed_form\ExposedFormPluginBase->renderExposedForm(1) (Line: 2638)
Drupal\views\Plugin\views\display\DisplayPluginBase->viewExposedFormBlocks() (Line: 35)
Drupal\views\Plugin\Block\ViewsExposedFilterBlock->build() (Line: 171)
Drupal\block\BlockViewBuilder::preRender(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, 1) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, 1) (Line: 160)
Drupal\Core\Render\Renderer->Drupal\Core\Render\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 159)
Drupal\Core\Render\Renderer->renderPlain(Array) (Line: 175)
Drupal\Core\Render\Renderer->renderPlaceholder('', Array) (Line: 665)
Drupal\Core\Render\Renderer->replacePlaceholders(Array) (Line: 550)
Drupal\Core\Render\Renderer->doRender(Array, 1) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, 1) (Line: 148)
Drupal\Core\Render\Renderer->Drupal\Core\Render\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 147)
Drupal\Core\Render\Renderer->renderRoot(Array) (Line: 279)
Drupal\Core\Render\HtmlResponseAttachmentsProcessor->renderPlaceholders(Object) (Line: 71)
Drupal\big_pipe\Render\BigPipeResponseAttachmentsProcessor->processAttachments(Object) (Line: 45)
Drupal\Core\EventSubscriber\HtmlResponseSubscriber->onRespond(Object, 'kernel.response', Object)
call_user_func(Array, Object, 'kernel.response', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.response') (Line: 202)
Symfony\Component\HttpKernel\HttpKernel->filterResponse(Object, Object, 1) (Line: 190)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)