Los componentes privados son similares a los componentes de HTML y twig que se encuentran en las plantillas, la única diferencia es que el código no puede ser libremente modificado (es un código privado dentro de Tiendanube sin acceso desde un FTP), pero si permiten diferentes parámetros.
De esta manera el uso de componentes privados garantiza menos riesgo al editar los archivos de una plantilla, así como también continúa recibiendo actualizaciones más allá de si la tienda tiene FTP abierto o no.
Debajo se listan todos los componentes privados disponibles hoy en Tiendanube, qué parámetros aceptan y un ejemplo de como incluirlos.
Algo importante antes de avanzar. Algunos componentes privados pueden depender de Javascript que se encuentra del lado de la tienda, así como otros no. En cada ejemplo se aclara las dependencias de cada uno.
Por otro lado ningún componente necesita sumar traducciones del lado de la plantilla, ya las trae incorporadas.
Cuotas
Este componente se usa para mostrar las cuotas en el item del listado, en el detalle del producto y en el carrito.
Ejemplo de cómo incluirlo
{{ component('installments', {'location' : 'product_detail', container_classes: { installment: "product-detail-installments text-center text-md-left mb-2" }}) }}
Parámetros
Parámetro | Valores | Descripción |
---|---|---|
location | cart, product_item, product_detail | Es un string usado para definir el lugar donde se incluye el componente |
Wording | short_wording | Es un booleano para definir si el wording usado va a ser corto o largo. Ej: "12x $100 sin interés" vs "12 cuotas sin interés de $100". No aplica a tiendas de Brasil. |
CSS classes | container_classes.installment | Usado para pasarle clases al container principal |
Dependencias
Del lado de JS, tiene dependencias de la función changeVariant que está en el archivo store.js.tpl. Es decir que el JS de ese archivo se mantiene funcional.
Medios de pago
Este componente se usa para mostrar el detalle de los medios de pago en el detalle del producto
Ejemplo de cómo incluirlo
{{ component('payments/payments-details', { text_classes: { text_accent: "label label-accent ml-1", subtitles: "mb-3", text_big: "font-big", text_small: "font-small", align_right: "text-right" }, spacing_classes: { top_1x: "mt-1", top_2x: "mt-2", top_3x: "mt-3", right_1x: "mr-1", right_2x: "mr-2", right_3x: "mr-3", bottom_1x: "mb-1", bottom_2x: "mb-2", bottom_3x: "mb-3", left_3x: "ml-3", }, container_classes : { payment_method: "card p-3" } }) }}
Parámetros
CSS
Parámetro | Descripción | |
---|---|---|
text_classes.text_accent | Usado para las clases de los textos que requieren acento como los descuentos | |
text_classes.subtitles | Usado para las clases de los subtítulos | |
text_classes.text_big | Usado para las clases de los textos con tamaño superior al estándar | |
text_classes.text_small | Usado para las clases de los textos con tamaño inferior al estándar | |
spacing_classes.right_2x | Usado para las clases de espaciado a la derecha en 2x | |
spacing_classes.bottom_1x |
| |
spacing_classes.bottom_3x | Usado para las clases de espaciado hacia abajo en 3x | |
container_classes.payment_method | Usado para las clases del contenedor de cada medio de pago |
Otros
empty_placeholder_url: Usado para reemplazar la URL de la imagen placeholder que se carga mientras se hace lazyload de todas las banderas del componente.
Dependencias
Del lado de JS, tiene dependencias de la función changeVariant y del componente de modal (si es que se va a mostrar en un modal) que está en el archivo store.js.tpl. Es decir que el JS de ese archivo se mantiene funcional.
Para el componente de tabs no es necesario JS.
Logos de pagos y envíos
Este componente se usa para mostrar los logos de pagos y envíos, especialmente en el footer.
Ejemplo de cómo incluirlo
{{ component('payment-shipping-logos', {'type' : 'payments'}) }}
Parámetros
empty_placeholder_url: Usado para reemplazar la URL de la imagen placeholder que se carga mientras se hace lazyload de todas las banderas del componente.
Dependencias
No tiene dependencias de JS
Filtros
Este componente se usa para mostrar los filtros tanto por categorías como por propiedades
Ejemplo de cómo incluirlo
{{ component( 'filters/filters',{ accordion: true, parent_category_link: false, applied_filters_badge: true, container_classes: { filters_container: "visible-when-content-ready", }, accordion_classes: { title_container: "row no-gutters align-items-center", title_col: "col my-1 pr-3 d-flex align-items-center", title: "h6 font-body font-weight-bold mb-0", actions_col: "col-auto my-1", title_icon: "icon-inline svg-icon-text font-big mr-1" }, filter_classes: { list: "list-unstyled my-3", list_item: "mb-2", list_link: "font-small", badge: "h6 font-small ml-1", show_more_link: "d-inline-block btn-link font-small mt-1", checkbox_last: "m-0", price_group: 'price-filter-container filter-accordion', price_title: 'h6 font-weight-bold mb-4', price_submit: 'btn btn-default d-inline-block', applying_feedback_message: 'h5 mr-2', applying_feedback_icon: 'icon-inline h5 icon-spin svg-icon-text' }, accordion_show_svg_id: 'plus', accordion_hide_svg_id: 'minus', applying_feedback_svg_id: 'spinner-third' }) }}
Parámetros
Parámetro | Descripción |
---|---|
category_filters | Booleano usado para sólo incluir los filtros de categorías |
property_filters | Booleano usado para sólo incluir los filtros de propiedades |
accordion | Booleano usado para mostrar los filtros dentro de un acordeón |
applied_filters_badge | Booleano usado para mostrar un número de cantidad de filtros aplicados al usar el acordeón |
parent_category_link | Usado para mostrar el link que lleva a la categoría padre en el filtro de categorías |
svg_sprites | Booleano que determina si se usan SVG sprites |
accordion_show_svg_id/accordion_hide_svg_id | Usado para pasarle el ID del SVG sprite que se usa para el ícono de mostrar y ocultar. |
applying_feedback_svg_id | Usado para el ID del SVG sprite al mostrar feedback de "aplicando filtro" en celulares |
parent_category_link_svg_id | Usado para el ícono en el link de volver a la categoría padre |
CSS
Parámetro | Descripción |
---|---|
filter_classes.group | Usado para el container de cada grupo de filtros. Ej: El grupo de "colores" |
filter_classes.list_title | Usado para el título de cada grupo de filtros |
filter_classes.checkbox_container | Usado para el container del checkbox de cada filtro |
filter_classes.checkbox_last | Usado para el container del último checkbox en un grupo de filtros |
filter_classes.checkbox_icon | Usado para el ícono del checkbox de cada filtro |
filter_classes.checkbox_text | Usado para el texto del checkbox de cada filtro |
filter_classes.checkbox_color | Usado para los filtros de colores |
filter_classes.show_more_link | Usado para el link de "ver más" cuando hay muchos filtros |
filter_classes.parent_category_link | Usado para el link para volver a la categoría anterior |
filter_classes.badge | Usado para el ícono que muestra los filtros aplicados (se usarse esta funcionalidad) |
accordion_classes.title_container | Usado para el título de los filtros en formato de acordeón |
accordion_classes.title_col | Usado para la columna que contiene título de los filtros en formato de acordeón |
accordion_classes.title | Usado para el título de los filtros en formato de acordeón |
accordion_classes.actions_col | Usado para la columna que contiene el link que abre o cierra el acordeón de los filtros |
accordion_classes.title_icon | Usado para el ícono del título en los filtros en formato de acordeón |
accordion_classes.toggle_link | Usado para el link que abre o cierra el acordeón en los filtros en ese formato si no se usa un ícono |
filter_classes.price_group | Usado para el container del filtro de precios |
filter_classes.price_title | Usado para el título del filtro de precios |
filter_classes.price_submit | Usado para el submit del filtro de precios |
Dependencias
Dependiendo de la plantilla podrías llegar a necesitar mantener el JS relacionado al componente de acordeón
Ordenar productos
Este componente se usa para ordenar los productos bajo un criterio. Ej: De menor a mayor precio.
Ejemplo de cómo incluirlo
{{ component( 'sort-by',{ accordion: true, list: true, accordion_classes: { title_container: "row no-gutters align-items-center", title_col: "col my-1 pr-3 d-flex align-items-center", title: "h1 font-huge mb-0", actions_col: "col-auto my-1", title_icon: "icon-inline svg-icon-text icon-xs mr-1" }, sort_by_classes: { group: 'filter-accordion', list: 'radio-button-container list-unstyled my-3', list_item: 'radio-button-item', radio_button: "radio-button", radio_button_content: "radio-button-content", radio_button_icons_container: "radio-button-icons-container", radio_button_icon: "radio-button-icon", radio_button_label: "radio-button-label", applying_feedback_message: 'font-big mr-2', applying_feedback_icon: 'icon-inline font-big icon-spin svg-icon-text', }, accordion_show_svg_id: 'chevron', accordion_hide_svg_id: 'chevron-down', applying_feedback_svg_id: 'spinner-third', }) }}
Parámetros
Parámetro | Descripción |
---|---|
accordion | Booleano usado para mostrar el sort by dentro de un acordeón |
list | Booleano usado para mostrar el sort en formato de listado, en lugar de un dropdown |
svg_sprites | Booleano que determina si se usan SVG sprites |
accordion_show_svg_id/accordion_hide_svg_id | Usado para pasarle el ID del SVG sprite que se usa para el ícono de mostrar y ocultar. |
applying_feedback_svg_id | Usado para el ID del SVG sprite al mostrar feedback de "Ordenando productos" en celulares |
CSS
Parámetro | Descripción |
---|---|
sort_by_classes.group | Usado para el grupo que contiene el sort by. |
sort_by_classes.container | Usado para el container que contiene el sort by. |
sort_by_classes.list_title | Usado para el título si el formato es de tipo lista |
sort_by_classes.list | Usado para el listado en el formato de tipo lista |
sort_by_classes.list_item | Usado para el item del listado en el formato de tipo lista |
sort_by_classes.radio_button | Usado para radio button de cada opción dentro del formato lista |
sort_by_classes.radio_button_content | Usado para el container del contenido en cada radio button |
sort_by_classes.radio_button_icons_container | Usado para el container de los íconos en cada radio button |
sort_by_classes.radio_button_icon | Usado para cada ícono dentro de los radio buttons |
sort_by_classes.radio_button_label | Usado para texto de los radio buttons |
sort_by_classes.select_group | Usado para el container del sort by en formato tipo dropdown |
sort_by_classes.select_label | Usado para el texto del sort by en formato tipo dropdown |
sort_by_classes.select | Usado para el select del sort by en formato tipo dropdown |
sort_by_classes.select_svg | Usado para el ícono del select en formato tipo dropdown |
sort_by_classes.applying_feedback_container | Usado para el container del feedback mientras se ordenan los productos en mobile |
sort_by_classes.applying_feedback_message | Usado para el texto del feedback mientras se ordenan los productos en mobile |
sort_by_classes.applying_feedback_icon | Usado para el ícono del feedback mientras se ordenan los productos en mobile |
accordion_classes.title_container | Usado para el contenedor del título del sort by en formato de acordeón |
accordion_classes.title_col | Usado para la columna que contiene título del sort by en formato de acordeón |
accordion_classes.title | Usado para el título del sort by en formato de acordeón |
accordion_classes.actions_col | Usado para la columna que contiene el link que abre o cierra el acordeón |
accordion_classes.title_icon | Usado para el ícono del título en formato de acordeón |
accordion_classes.toggle_link | Usado para el link que abre o cierra el acordeón en ese formato si no se usa un ícono |
Dependencias
Dependiendo de la plantilla podrías llegar a necesitar mantener el JS relacionado al componente de acordeón
Búsqueda
Este componente se usa para el formulario de búsqueda de productos (incluídas las sugerencias).
Ejemplo de cómo incluirlo
{{ component('search/search-form', { form_classes: { input_group: 'm-0', input: 'input-class', submit: 'submit-class', delete_content: 'delete-class', search_suggestions_container: 'container-class'} }) }}
Parámetros
Parámetro | Descripción |
---|---|
placeholder_text | Usado para sobreescribir el texto por defecto que usa el placeholder del campo de búsqueda. |
use_submit_text | Booleano usado mostrar un texto en el botón de submit del formulario de búsqueda. Por defecto está prendido. |
submit_text | Usado para sobreescribir el texto por defecto que usa el botón para enviar la búsqueda. |
use_delete_btn | Booleano para mostrar en celulares un botón que borra lo escrito en el campo de búsqueda. Por defecto está encendido |
CSS
Parámetro | Descripción |
---|---|
form_classes.form | Usado para el formulario de búsqueda |
form_classes.input_group | Usado para el contenedor del campo de búsqueda |
form_classes.input | Usado para el campo de búsqueda |
form_classes.submit | Usado para el botón que envía el formulario de búsqueda |
form_classes.delete_content | Usado para el botón que borra lo escrito en celulares |
form_classes.search_suggestions_container | Usado para el contenedor de las sugerencias de búsqueda |
Dependencias
Dependiendo de la plantilla podrías llegar a necesitar mantener el JS relacionado a la búsqueda usando la función LS.search
Logo
Este componente se usa para mostrar el logo de la tienda
Ejemplo de cómo incluirlo
{{ component('logos/logo', {logo_thumbnail: logo_size_thumbnail, logo_img_classes: 'transition-soft ' ~ logo_size_class, logo_text_classes: 'h3 m-0'}) }}
Parámetros
Tipo de componente
Parámetro | Descripción |
---|---|
logo_thumbnail | Usado para elegir que thumbnail del logo usar. Por defecto es la "medium". |
CSS
Parámetro | Descripción |
---|---|
container_classes.logo_img_container | Usado para el contenedor del logo |
logo_img_classes | Usado para la imagen del logo |
logo_text_classes | Usado para el texto del logo cuando no existe una imagen |
Dependencias
No tiene ningún tipo de dependencia
Logo para encabezado transparente
Este componente se usa para mostrar el logo de la tienda que permite la funcionalidad de un logo específico cuando el encabezado tiene fondo transparente.
Ejemplo de cómo incluirlo
{{ component('logos/logo-transparent-header', {logo_thumbnail: 'medium', logo_img_name: 'logo-transparent.jpg', logo_img_classes: 'transition-soft'}) }}Parámetros
Parámetro | Descripción |
---|---|
logo_thumbnail | Usado para elegir que thumbnail del logo usar. Por defecto es la "medium". |
logo_img_name | Usado para conectar la ruta de la imagen con la setting definida en settings.txt |
CSS
Parámetro | Descripción |
---|---|
container_classes.logo_img_container | Usado para el contenedor del logo |
logo_img_classes | Usado para la imagen del logo |
Dependencias
Depende de si la plantilla tiene o no una configuración para encabezado transparente.
Formularios de login y registro
Estos componentes se usan mostrar el formulario de login y registro de un usuario
Ejemplo de cómo incluirlos
Login
{{ component('forms/account/login' , { validation_classes: { link: 'btn-link font-small ml-1', text_align: 'text-center', text_size: 'font-small', }, spacing_classes: { top_2x: 'mt-2', bottom_2x: 'mb-2', bottom_3x: 'mb-3', bottom_4x: 'mb-4', }, form_classes: { password_toggle: 'btn', input_help_align: 'text-right', input_help_link: 'btn-link font-small mb-2 mr-1', help_align: 'text-center', help_text_size: 'font-small', help_link: 'btn-link btn-link font-small mb-2 ml-1', submit: 'btn btn-primary btn-big btn-block mb-3', submit_spinner: 'icon-inline icon-spin svg-icon-mask ml-2' }}) }}
Registro
{{ component('forms/account/register' , { validation_classes: { link: 'btn-link font-small ml-1', text_align: 'text-center', text_size: 'font-small', }, spacing_classes: { top_2x: 'mt-2', bottom_2x: 'mb-2', bottom_3x: 'mb-3', }, form_classes: { password_toggle: 'btn', input_help_align: 'text-right', input_help_link: 'btn-link btn-link font-small mb-2 mr-1', help_align: 'text-center', help_text_size: 'font-small', help_link: 'btn-link font-small mb-2 ml-1', submit: 'btn btn-primary btn-big btn-block mb-3', submit_spinner: 'icon-inline icon-spin svg-icon-mask ml-2', input_error: 'notification-left', }}) }}
Parámetros
CSS
Parámetro | Descripción |
---|---|
form_classes.form | Usado para el formulario |
form_classes.input_group | Usado para el container de cada campo |
form_classes.input_label | Usado para los textos de cada campo |
form_classes.input | Usado para de cada campo |
form_classes.input_error | Usado para el mensaje de error de cada campo |
form_classes.input_help_align | Usado para la alineación del texto de ayuda en el campo de contraseña |
form_classes.input_help_link | Usado para el link dentro del texto de ayuda para el campo de contraseña |
form_classes.password_toggle | Usado para el botón que muestra/oculta la contraseña en el campo de contraseña |
form_classes.submit | Usado para el botón que envía el formulario |
form_classes.submit_spinner | Usado para el spinner del botón que envía el formulario. Visible al enviarlo. |
form_classes.help_info_align | Usado para alinear la información de ayuda general del formulario |
form_classes.help_info_text_size | Usado para el tamaño del texto en la información de ayuda general del formulario |
form_classes.help_link | Usado para el link de ayuda en la información de ayuda general del formulario |
spacing_classes.top_3x | Usado para las clases de espaciado hacia arriba en 3x |
spacing_classes.top_2x | Usado para las clases de espaciado hacia arriba en 2x |
spacing_classes.bottom_4x | Usado para las clases de espaciado hacia abajo en 4x |
spacing_classes.bottom_3x | Usado para las clases de espaciado hacia abajo en 3x |
spacing_classes.bottom_2x | Usado para las clases de espaciado hacia abajo en 2x |
validation_classes.title_size | Usado para los títulos dentro de lo mensajes de validación de la cuenta |
validation_classes.text_align | Usado para la alineación de los textos dentro de lo mensajes de validación de la cuenta |
validation_classes.text_size | Usado para el tamaño de los textos dentro de lo mensajes de validación de la cuenta |
Dependencias
Dependiendo de la plantilla podrías llegar a necesitar mantener el JS relacionado al componente de toggle para la contraseña
Información meta para redes sociales
Este componente se usa para cargar la información meta de redes sociales de la tienda. Incluye información sobre Facebook y Twitter dentro de la etiqueta "head" de HTML.
Ejemplo de cómo incluirlo
{{ component('social-meta') }}
Dependencias
Este componente no tiene dependencias
Información estructurada
Este componente se usa para cargar la información estructurada de la tienda para Google. Se puede incluir en la etiqueta "head" de HTML o en cada producto del listado.
Ejemplo de cómo incluirlo
{{ component('structured-data') }}
Parámetro | Descripción |
---|---|
item | Booleano usado al incluir la información estructurada dentro del item de producto |
Dependencias
Este componente no tiene dependencias
Links para reclamos
Este componente se usa para mostrar los links de "Defensa al consumidor" y "Botón de arrepentimiento" en las tiendas de Argentina.
Ejemplo de cómo incluirlo
{{ component('claim-info', { container_classes: 'font-small', divider_classes: "mx-1", text_classes: {text_consumer_defense: 'd-inline-block mb-1'}, link_classes: { link_consumer_defense: "btn-link font-small", link_order_cancellation: "btn-link font-small", }, })
Clases de CSS
Parámetro | Descripción |
---|---|
container_classes | Usado para el contenedor de los mensajes y links |
text_classes.text_consumer_defense | Usado para el texto del mensaje para Defensa al consumidor |
link_classes.link_consumer_defense | Usado para el link dentro del mensaje de Defensa al consumidor |
divider_classes | Usado para el divisor entre la información de Defensa al consumidor y el Botón de arrepentimiento |
link_order_cancellation | Usado para el link del Botón de arrepentimiento |
Dependencias
Este componente sólo comienza el flujo de Botón de arrepentimiento. Para poder terminarlo es necesario hacer cambios dentro del formulario de contacto. Para más información ver este tutorial
Sección de productos
Este componente se usa para mostrar una sección de productos, que pueden ser desde destacados en la página de inicio hasta los relacionados en el detalle del producto
Ejemplo de cómo incluirlo
Productos relacionados
{# Section classes #} {% set section_class = 'section-products-related my-3' %} {% set container_class = 'container' %} {% set title_class = 'h3 text-center' %} {% set products_container_class = 'position-relative swiper-container-horizontal' %} {% set slider_container_class = 'swiper-container' %} {% set swiper_wrapper_class = 'swiper-wrapper' %} {% set slider_control_pagination_class = 'swiper-pagination' %} {% set slider_control_class = 'icon-inline icon-w-8 icon-2x svg-icon-text' %} {% set slider_control_prev_class = 'swiper-button-prev' %} {% set slider_control_next_class = 'swiper-button-next' %} {% set control_prev = include ('snipplets/svg/chevron-left.tpl', {svg_custom_class: slider_control_class}) %} {% set control_next = include ('snipplets/svg/chevron-right.tpl', {svg_custom_class: slider_control_class}) %} {{ component( 'products-section',{ title: settings.products_related_title, id: 'related-products', products_amount: related_products | length, products_array: related_products, product_template_path: 'snipplets/grid/item.tpl', product_template_params: {'slide_item': true}, slider_controls_position: 'bottom', slider_pagination: true, svg_sprites: false, section_classes: { section: 'js-related-products ' ~ section_class, container: container_class, title: title_class, products_container: products_container_class, slider_container: 'js-swiper-related ' ~ slider_container_class, slider_wrapper: swiper_wrapper_class, slider_control_pagination: 'js-swiper-related-pagination ' ~ slider_control_pagination_class, slider_control_prev_container: 'js-swiper-related-prev ' ~ slider_control_prev_class, slider_control_prev: 'icon-flip-horizontal', slider_control_next_container: 'js-swiper-related-next ' ~ slider_control_next_class, }, custom_control_prev: control_prev, custom_control_next: control_next, }) }}
Parámetro | Descripción |
---|---|
id | Usado para el ID de la sección |
products_amount | Usado opcionalmente para un atributo data con la cantidad de productos |
slider | Booleano que activa el HTML para usar el formato de slider (en nuestros diseños usamos el plugin Swiper.js) |
slider_pagination | Booleano que activa el HTML para el paginador del slider |
svg_sprites | Booleano que determina si se usan SVG sprites |
control_prev_svg_id/control_next_svg_id | Usado para pasarle el ID del SVG sprite que se usa para el ícono de siguiente y anterior en el slider. |
custom_control_prev/custom_control_next | Usado en caso de no implementar SVG sprites, para aplicar HTML personalizado en los controles de siguiente y anterior en el slider. |
slider_controls_container | Booleano para englobar los controles del slider en un contenedor. |
slider_direction_controls_container | Booleano usado para englobar sólo los controles de dirección del slider en un contenedor separado al paginado. |
slider_controls_position | Define la posición de los controles del slider con 2 valores: 'below' se ubican debajo del carrusel y 'with-section-title' se ubican como un hermano del título de la sección. |
title | Es usado para el título de la sección. |
products_array | Es el array de productos a mostrar. Por ejemplo en productos relacionados puede ser "related_products" y en productos destacados "sections.primary.products" |
product_template_path | Es la ruta del tpl que representa al item de producto en el listado. |
product_template_params | Son los parámetros opcionales que puede tener el tpl del item. Por ejemplo {'slide_item': true} |
CSS
Parámetro | Descripción |
---|---|
section_classes.section | Usado para la sección |
section_classes.container | Usado para el contenedor general |
section_classes.title_container | Usado para el contenedor del título |
section_classes.title | Usado para el título |
section_classes.products_container | Usado para el contendor del grupo de productos |
section_classes.slider_container | Usado para el contenedor del slider |
section_classes.slider_wrapper | Usado para el "wrapper" del slider, necesario en Swiper.js |
section_classes.slider_controls_container | Usado para el contenedor de los controles del slider |
section_classes.slider_control_pagination | Usado para el paginado del slider |
section_classes.slider_control | Usado para cada control de "siguiente" y "anterior" en el slider |
section_classes.slider_direction_controls_container | Usado para el contenedor de los controles de "siguiente" y "anterior" en el slider, en caso de que el booleano slider_direction_controls_container sea true |
section_classes.slider_control_prev_container | Usado para el contenedor del control de "anterior" en el slider |
section_classes.slider_control_next_container | Usado para el contenedor del control de "siguiente" en el slider |
section_classes.slider_control_prev | Usado para el control de "anterior" en el slider |
section_classes.slider_control_next | Usado para el control de "siguiente" en el slider |
Dependencias
Para que el slider funcione es necesario agregar el JS en la tienda. En el caso de nuestros diseños usamos Swiper.js que está cargado en el archivo external-no-dependencies.js.tpl y el slider es creado en el archivo store.js.tpl