{"id":4242,"date":"2017-02-23T09:28:49","date_gmt":"2017-02-23T07:28:49","guid":{"rendered":"https:\/\/www.hiberus.com\/blog\/?p=4242"},"modified":"2023-12-13T11:59:23","modified_gmt":"2023-12-13T10:59:23","slug":"trabajo-en-equipo-con-features-drupal","status":"publish","type":"post","link":"https:\/\/www.hiberus.com\/crecemos-contigo\/trabajo-en-equipo-con-features-drupal\/","title":{"rendered":"Trabajo en equipo con Features en Drupal: agrupar y exportar funcionalidad"},"content":{"rendered":"<p>Dependiendo de la envergadura de los proyectos web construidos con Drupal, en ocasiones los departamentos de CMS empleamos mucho tiempo y esfuerzo en desarrollar m\u00f3dulos de funcionalidad para nuestros portales. Dichas funcionalidades pueden ser comunes a varios proyectos, por ejemplo un blog o una galer\u00eda de im\u00e1genes, por lo que lo ideal es que podamos reutilizar el trabajo realizado de un proyecto a otro.<\/p>\n<p>Por otro lado, al disponer de varios entornos por proyecto (desarrollo, validaci\u00f3n y producci\u00f3n) tambi\u00e9n necesitamos agilidad y control a la hora de hacer despliegues para causar el menor trastorno posible al cliente que trabaja en el sitio en producci\u00f3n.<\/p>\n<p>Para solucionar esto, Drupal dispone del m\u00f3dulo Features que permite<strong> encapsular funcionalidades que hemos desarrollado para despu\u00e9s poderlas reutilizar y realizar pases de unos entornos a otros de una forma m\u00e1s \u00e1gil y sencilla<\/strong>. Las features se pueden activar y desactivar de la misma manera que cualquier m\u00f3dulo de Drupal. Pero no todo va a ser tan f\u00e1cil, trabajar en equipo con features puede llegar a ser complicado si no tenemos claros sus conceptos b\u00e1sicos y c\u00f3mo trabajar con ellas.<\/p>\n<p>En este primer art\u00edculo definiremos qu\u00e9 es una feature, su estructura y los pasos a seguir para crear una desde cero. Para comenzar, vamos con la parte f\u00e1cil:<\/p>\n<h2>C\u00f3mo crear nuestra primera feature en Drupal<\/h2>\n<p>En primer lugar, debemos tener en cuenta:<\/p>\n<h3>\u00bfQu\u00e9 puedo exportar como Features?<\/h3>\n<p>Podemos exportar configuraci\u00f3n, nunca contenido. Por ejemplo, podemos guardar la configuraci\u00f3n de men\u00fas y vocabularios pero no sus enlaces y t\u00e9rminos de taxonom\u00eda respectivamente. Se pueden a\u00f1adir componentes de distintos tipos: campos, tipos de contenido, rules, permisos, taxonom\u00edas, vistas, etc.<\/p>\n<h3>\u00bfQu\u00e9 funcionalidad voy a agrupar en ella?<\/h3>\n<p>Antes de crear una feature tenemos que analizar qu\u00e9 conjunto de configuraciones vamos a incluir y cu\u00e1l ser\u00e1 su estructura para hacerlo de la forma m\u00e1s l\u00f3gica y ordenada. Por ejemplo, un m\u00f3dulo de funcionalidad que podr\u00edamos exportar en una sola feature ser\u00eda un blog (con su tipo de contenido para crear art\u00edculos, roles espec\u00edficos, reglas para la publicaci\u00f3n de art\u00edculos o avisos a usuarios, etc). Es importante pensar primero en la estructura para as\u00ed evitar tener configuraciones del mismo m\u00f3dulo de funcionalidad dispersas en varias features que generen dependencias innecesarias y nos sea muy complicado exportar.<\/p>\n<h2>C\u00f3mo crear una feature desde cero<\/h2>\n<p>Para crear una nueva feature iremos a admin\/structure\/features\/create<\/p>\n<p>Aparecer\u00e1 una pantalla en la que podremos ir a\u00f1adiendo los componentes que queramos incluir (ej.: tipos de contenido, campos, permisos, etc).<\/p>\n<p><a href=\"https:\/\/www.hiberus.com\/crecemos-contigo\/wp-content\/uploads\/2017\/02\/festures1.jpg\" data-rel=\"lightbox-image-0\" data-rl_title=\"\" data-rl_caption=\"\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-4421 size-large\" title=\"\" src=\"https:\/\/www.hiberus.com\/crecemos-contigo\/wp-content\/uploads\/2017\/02\/festures1-1024x465.jpg\" alt=\"crear feature drupal\" width=\"620\" height=\"282\" srcset=\"https:\/\/www.hiberus.com\/crecemos-contigo\/wp-content\/uploads\/2017\/02\/festures1-1024x465.jpg 1024w, https:\/\/www.hiberus.com\/crecemos-contigo\/wp-content\/uploads\/2017\/02\/festures1-300x136.jpg 300w, https:\/\/www.hiberus.com\/crecemos-contigo\/wp-content\/uploads\/2017\/02\/festures1-768x349.jpg 768w, https:\/\/www.hiberus.com\/crecemos-contigo\/wp-content\/uploads\/2017\/02\/festures1-360x163.jpg 360w, https:\/\/www.hiberus.com\/crecemos-contigo\/wp-content\/uploads\/2017\/02\/festures1.jpg 1428w\" sizes=\"auto, (max-width: 620px) 100vw, 620px\" \/><\/a><\/p>\n<h3>Autodetecci\u00f3n<\/h3>\n<p>Seg\u00fan vamos seleccionando componentes de forma manual, el sistema de autodetecci\u00f3n nos va a\u00f1adiendo autom\u00e1ticamente los que nos falten. Por ejemplo, si a\u00f1adimos un tipo de contenido nuevo, el sistema detectar\u00e1 todos los campos del mismo y los a\u00f1adir\u00e1 de forma autom\u00e1tica. Es muy \u00fatil para evitar dejarnos componentes por el camino pero tambi\u00e9n conviene revisar que no haya a\u00f1adido componentes indeseados. Esta opci\u00f3n se puede desactivar desde \u201copciones avanzadas\u201d.<\/p>\n<p>En la imagen anterior podemos ver los componentes a\u00f1adidos por autodetecci\u00f3n sombreados en azul.<\/p>\n<h3>Dependencias<\/h3>\n<p>Si no indicamos lo contrario, el sistema de autodetecci\u00f3n nos a\u00f1adir\u00e1 los m\u00f3dulos u otras features de las que depender\u00e1 nuestra nueva feature. Esto implica que esos m\u00f3dulos o features tendr\u00e1n que estar activados para poder activarla. Es muy importante revisar esta parte para no a\u00f1adir dependencias innecesarias. Si no lo hacemos, nos puede ocurrir que entremos en un bucle de dependencias\u00a0 y no podamos activar correctamente la funcionalidad de nuestra feature.<\/p>\n<p>Una vez que hemos dado nombre a nuestra feature, indicado la versi\u00f3n y a\u00f1adidos los componentes podemos descargar el c\u00f3digo o bien generarlo en una carpeta de nuestra instalaci\u00f3n de Drupal. Por lo general, esta carpeta deber\u00e1 estar dentro del repositorio de c\u00f3digo para poder tener un control de los cambios.<\/p>\n<p>La estructura de la carpeta de la feature ser\u00e1 igual que la de cualquier m\u00f3dulo de Drupal, se crear\u00e1n como m\u00ednimo, los archivos .info y .module. Despu\u00e9s de generar o descargar el c\u00f3digo, tendremos la feature disponible para poderla exportar y activar en otros entornos o proyectos.<\/p>\n<p>En este punto, ya conocemos los pasos para crear una nueva feature y podemos comprobar que es una tarea relativamente sencilla cuando definimos bien qu\u00e9 funcionalidades vamos a agrupar. En el siguiente art\u00edculo veremos qu\u00e9 ocurre cuando sobrescribimos la configuraci\u00f3n de las features y c\u00f3mo debemos trabajar cuando el desarrollo involucra a varios miembros del equipo.<\/p>\n<p>&nbsp;<\/p>\n<p>En Hiberus contamos con un departamento de\u00a0<strong>m\u00e1s de 60 desarrolladores Drupal<\/strong>. Nuestros m\u00e1s de 10 a\u00f1os de experiencia nos ha hecho trabajar en los principales <a href=\"https:\/\/www.hiberus.com\/crecemos-contigo\/casos-de-exito-de-drupal\/\">casos de \u00e9xito Drupal<\/a> a nivel nacional. Cu\u00e9ntanos tu proyecto y conoce a nuestro equipo <a href=\"https:\/\/www.hiberus.com\/dxp\/drupal\">experto en Drupal<\/a>.<\/p>\n<p>&nbsp;<\/p>\n<p><a href=\"https:\/\/www.hiberus.com\/guias\/drupal11\" target=\"_blank\" rel=\"noopener\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-29020\" src=\"https:\/\/www.hiberus.com\/crecemos-contigo\/wp-content\/uploads\/2023\/04\/Drupal10-horizntal-1024x535.jpg\" alt=\"\" width=\"678\" height=\"354\" srcset=\"https:\/\/www.hiberus.com\/crecemos-contigo\/wp-content\/uploads\/2023\/04\/Drupal10-horizntal-1024x535.jpg 1024w, https:\/\/www.hiberus.com\/crecemos-contigo\/wp-content\/uploads\/2023\/04\/Drupal10-horizntal-300x157.jpg 300w, https:\/\/www.hiberus.com\/crecemos-contigo\/wp-content\/uploads\/2023\/04\/Drupal10-horizntal-768x401.jpg 768w, https:\/\/www.hiberus.com\/crecemos-contigo\/wp-content\/uploads\/2023\/04\/Drupal10-horizntal-360x188.jpg 360w, https:\/\/www.hiberus.com\/crecemos-contigo\/wp-content\/uploads\/2023\/04\/Drupal10-horizntal.jpg 1200w\" sizes=\"auto, (max-width: 678px) 100vw, 678px\" \/><\/a><\/p>\n<p>&nbsp;<\/p>\n        <div class=\"row\">\n            <div class=\"block-cta-form\" style=\"background-color: #003664;\">\n                <div class=\"content-cta-form\">\n                    <div class=\"text-cta-form\">\n                        <p class=\"title-cta-form\">\u00bfQuieres m\u00e1s informaci\u00f3n sobre nuestros servicios de Drupal?<\/p>\n                        <p>Contacta con nuestro equipo de Drupal<\/p>\n                    <\/div>\n                    <div class=\"form-fields\">\n                        \n<div class=\"wpcf7 no-js\" id=\"wpcf7-f33973-o1\" lang=\"es-ES\" dir=\"ltr\" data-wpcf7-id=\"33973\">\n<div class=\"screen-reader-response\"><p role=\"status\" aria-live=\"polite\" aria-atomic=\"true\"><\/p> <ul><\/ul><\/div>\n<form action=\"\/crecemos-contigo\/wp-json\/wp\/v2\/posts\/4242#wpcf7-f33973-o1\" method=\"post\" class=\"wpcf7-form init\" aria-label=\"Formulario de contacto\" novalidate=\"novalidate\" data-status=\"init\">\n<fieldset class=\"hidden-fields-container\"><input type=\"hidden\" name=\"_wpcf7\" value=\"33973\" \/><input type=\"hidden\" name=\"_wpcf7_version\" value=\"6.1.5\" \/><input type=\"hidden\" name=\"_wpcf7_locale\" value=\"es_ES\" \/><input type=\"hidden\" name=\"_wpcf7_unit_tag\" value=\"wpcf7-f33973-o1\" \/><input type=\"hidden\" name=\"_wpcf7_container_post\" value=\"0\" \/><input type=\"hidden\" name=\"_wpcf7_posted_data_hash\" value=\"\" \/><input type=\"hidden\" name=\"_wpcf7_recaptcha_response\" value=\"\" \/>\n<\/fieldset>\n<div id=\"responsive-form\" class=\"clearfix\">\n\t<div class=\"form-row\">\n\t\t<div class=\"column-half\">\n\t\t\t<p><span class=\"wpcf7-form-control-wrap\" data-name=\"nombre\"><input size=\"40\" maxlength=\"400\" class=\"wpcf7-form-control wpcf7-text wpcf7-validates-as-required\" aria-required=\"true\" aria-invalid=\"false\" placeholder=\"Nombre *\" value=\"\" type=\"text\" name=\"nombre\" \/><\/span>\n\t\t\t<\/p>\n\t\t<\/div>\n\t\t<div class=\"column-half\">\n\t\t\t<p><span class=\"wpcf7-form-control-wrap\" data-name=\"apellido\"><input size=\"40\" maxlength=\"400\" class=\"wpcf7-form-control wpcf7-text wpcf7-validates-as-required\" aria-required=\"true\" aria-invalid=\"false\" placeholder=\"Apellido *\" value=\"\" type=\"text\" name=\"apellido\" \/><\/span>\n\t\t\t<\/p>\n\t\t<\/div>\n\t<\/div>\n\t<div class=\"form-row\">\n\t\t<div class=\"column-half\">\n\t\t\t<p><span class=\"wpcf7-form-control-wrap\" data-name=\"correo\"><input size=\"40\" maxlength=\"400\" class=\"wpcf7-form-control wpcf7-email wpcf7-validates-as-required wpcf7-text wpcf7-validates-as-email\" aria-required=\"true\" aria-invalid=\"false\" placeholder=\"Correo corporativo *\" value=\"\" type=\"email\" name=\"correo\" \/><\/span>\n\t\t\t<\/p>\n\t\t<\/div>\n\t\t<div class=\"column-half\">\n\t\t\t<p><span class=\"wpcf7-form-control-wrap\" data-name=\"telf-contacto\"><input size=\"40\" maxlength=\"400\" class=\"wpcf7-form-control wpcf7-tel wpcf7-validates-as-required wpcf7-text wpcf7-validates-as-tel\" aria-required=\"true\" aria-invalid=\"false\" placeholder=\"Tel\u00e9fono *\" value=\"\" type=\"tel\" name=\"telf-contacto\" \/><\/span>\n\t\t\t<\/p>\n\t\t<\/div>\n\t<\/div>\n\t<div class=\"form-row\">\n\t\t<div class=\"column-half\">\n\t\t\t<p><span class=\"wpcf7-form-control-wrap\" data-name=\"compania\"><input size=\"40\" maxlength=\"400\" class=\"wpcf7-form-control wpcf7-text wpcf7-validates-as-required\" aria-required=\"true\" aria-invalid=\"false\" placeholder=\"Compa\u00f1ia *\" value=\"\" type=\"text\" name=\"compania\" \/><\/span>\n\t\t\t<\/p>\n\t\t<\/div>\n\t<\/div>\n\t<div class=\"form-row\">\n\t\t<div class=\"column-full\">\n\t\t\t<p><span class=\"wpcf7-form-control-wrap\" data-name=\"mensaje\"><textarea cols=\"40\" rows=\"10\" maxlength=\"2000\" class=\"wpcf7-form-control wpcf7-textarea wpcf7-validates-as-required\" aria-required=\"true\" aria-invalid=\"false\" placeholder=\"Mensaje *\" name=\"mensaje\"><\/textarea><\/span>\n\t\t\t<\/p>\n\t\t<\/div>\n\t<\/div>\n\t<div class=\"form-row\">\n\t\t<div class=\"column-full color-acceptance\">\n\t\t\t<p><span class=\"wpcf7-form-control-wrap\" data-name=\"politica\"><span class=\"wpcf7-form-control wpcf7-acceptance\"><span class=\"wpcf7-list-item\"><label><input type=\"checkbox\" name=\"politica\" value=\"1\" aria-invalid=\"false\" \/><span class=\"wpcf7-list-item-label\">He le\u00eddo y acepto la <a href=\"https:\/\/www.hiberus.com\/politica\" target=\"_blank\"><u>Pol\u00edtica de privacidad<\/u><\/a><\/span><\/label><\/span><\/span><\/span>\n\t\t\t<\/p>\n\t\t<\/div>\n\t<\/div>\n\t<div class=\"form-row\">\n\t\t<div class=\"column-full color-acceptance\">\n\t\t\t<p><span class=\"wpcf7-form-control-wrap\" data-name=\"marketing\"><span class=\"wpcf7-form-control wpcf7-acceptance optional\"><span class=\"wpcf7-list-item\"><label><input type=\"checkbox\" name=\"marketing\" value=\"1\" aria-invalid=\"false\" \/><span class=\"wpcf7-list-item-label\">Me gustar\u00eda recibir comunicaciones de marketing de Hiberus y sobre sus productos, servicios y eventos.<\/span><\/label><\/span><\/span><\/span>\n\t\t\t<\/p>\n\t\t<\/div>\n\t<\/div>\n\t<div class=\"form-row\">\n\t\t<div class=\"column-half\">\n\t\t\t<p><input class=\"wpcf7-form-control wpcf7-submit has-spinner\" type=\"submit\" value=\"Contacta con nosotros\" \/>\n\t\t\t<\/p>\n\t\t<\/div>\n\t<\/div>\n\t<div class=\"form-row\">\n\t\t<div id=\"campos_ocultos\" class=\"hidden\">\n\t\t\t<p><span class=\"wpcf7-form-control-wrap\" data-name=\"oculto_analitica_new1\"><input size=\"40\" maxlength=\"400\" class=\"wpcf7-form-control wpcf7-text\" id=\"oculto_analitica_new1\" aria-invalid=\"false\" value=\"\" type=\"text\" name=\"oculto_analitica_new1\" \/><\/span><br \/>\n<span class=\"wpcf7-form-control-wrap\" data-name=\"oculto_analitica_new2\"><input size=\"40\" maxlength=\"400\" class=\"wpcf7-form-control wpcf7-text\" id=\"oculto_analitica_new2\" aria-invalid=\"false\" value=\"\" type=\"text\" name=\"oculto_analitica_new2\" \/><\/span><br \/>\n<span class=\"wpcf7-form-control-wrap\" data-name=\"oculto_analitica_new3\"><input size=\"40\" maxlength=\"400\" class=\"wpcf7-form-control wpcf7-text\" id=\"oculto_analitica_new3\" aria-invalid=\"false\" value=\"\" type=\"text\" name=\"oculto_analitica_new3\" \/><\/span><br \/>\n<span class=\"wpcf7-form-control-wrap\" data-name=\"oculto_analitica_new4\"><input size=\"40\" maxlength=\"400\" class=\"wpcf7-form-control wpcf7-text\" id=\"oculto_analitica_new4\" aria-invalid=\"false\" value=\"\" type=\"text\" name=\"oculto_analitica_new4\" \/><\/span><br \/>\n<span class=\"wpcf7-form-control-wrap\" data-name=\"oculto_analitica_new_p\"><input size=\"40\" maxlength=\"400\" class=\"wpcf7-form-control wpcf7-text\" id=\"oculto_analitica_new_p\" aria-invalid=\"false\" value=\"\" type=\"text\" name=\"oculto_analitica_new_p\" \/><\/span>\n\t\t\t<\/p>\n\t\t<\/div>\n\t<\/div>\n<\/div>\n\n<!--end responsive-form--><div class=\"wpcf7-response-output\" aria-hidden=\"true\"><\/div>\n<\/form>\n<\/div>\n                    <\/div>\n                <\/div>\n            <\/div>\n        <\/div>\n        \n","protected":false},"excerpt":{"rendered":"<p>Dependiendo de la envergadura de los proyectos web construidos con Drupal, en ocasiones los departamentos de CMS empleamos mucho tiempo y esfuerzo&#8230;<\/p>\n","protected":false},"author":71,"featured_media":4431,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"_ayudawp_aiss_exclude":false,"footnotes":""},"categories":[3,232],"tags":[32],"class_list":{"0":"post-4242","1":"post","2":"type-post","3":"status-publish","4":"format-standard","5":"has-post-thumbnail","7":"category-negocio-electronico","8":"category-portales-dxp","9":"tag-drupal"},"acf":[],"_links":{"self":[{"href":"https:\/\/www.hiberus.com\/crecemos-contigo\/wp-json\/wp\/v2\/posts\/4242","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.hiberus.com\/crecemos-contigo\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.hiberus.com\/crecemos-contigo\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.hiberus.com\/crecemos-contigo\/wp-json\/wp\/v2\/users\/71"}],"replies":[{"embeddable":true,"href":"https:\/\/www.hiberus.com\/crecemos-contigo\/wp-json\/wp\/v2\/comments?post=4242"}],"version-history":[{"count":6,"href":"https:\/\/www.hiberus.com\/crecemos-contigo\/wp-json\/wp\/v2\/posts\/4242\/revisions"}],"predecessor-version":[{"id":38799,"href":"https:\/\/www.hiberus.com\/crecemos-contigo\/wp-json\/wp\/v2\/posts\/4242\/revisions\/38799"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.hiberus.com\/crecemos-contigo\/wp-json\/wp\/v2\/media\/4431"}],"wp:attachment":[{"href":"https:\/\/www.hiberus.com\/crecemos-contigo\/wp-json\/wp\/v2\/media?parent=4242"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.hiberus.com\/crecemos-contigo\/wp-json\/wp\/v2\/categories?post=4242"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.hiberus.com\/crecemos-contigo\/wp-json\/wp\/v2\/tags?post=4242"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}