<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom" xmlns:media="http://search.yahoo.com/mrss/">
    <title>ProyectoWebs</title>
    <link href="https://gabrielgenri.github.io/ProyectoWebs/feed.xml" rel="self" />
    <link href="https://gabrielgenri.github.io/ProyectoWebs" />
    <updated>2025-02-05T03:39:37-03:00</updated>
    <author>
        <name>Gabriel Genri</name>
    </author>
    <id>https://gabrielgenri.github.io/ProyectoWebs</id>

    <entry>
        <title>Configuraciones recomendadas del servidor con Publii</title>
        <author>
            <name>Gabriel Genri</name>
        </author>
        <link href="https://gabrielgenri.github.io/ProyectoWebs/configuraciones-recomendadas-del-servidor-con-publii.html"/>
        <id>https://gabrielgenri.github.io/ProyectoWebs/configuraciones-recomendadas-del-servidor-con-publii.html</id>
        <media:content url="https://gabrielgenri.github.io/ProyectoWebs/media/posts/76/Store-header.jpg" medium="image" />
            <category term="Publii"/>

        <updated>2024-12-07T20:30:34-03:00</updated>
            <summary>
                <![CDATA[
                        <img src="https://gabrielgenri.github.io/ProyectoWebs/media/posts/76/Store-header.jpg" alt="" />
                    Los sitios web basados en Publii no requieren mucho para funcionar correctamente; de hecho, cualquier servidor que pueda alojar archivos&hellip;
                ]]>
            </summary>
        <content type="html">
            <![CDATA[
                    <p><img src="https://gabrielgenri.github.io/ProyectoWebs/media/posts/76/Store-header.jpg" class="type:primaryImage" alt="" /></p>
                <header>
<p><strong>Los sitios web basados en Publii no requieren mucho para funcionar correctamente; de hecho, cualquier servidor que pueda alojar archivos HTML manejará los fundamentos.</strong> Sin embargo, para proporcionar a sus visitantes una experiencia de sitio segura y fácil de usar, algunos factores son esenciales tener en cuenta al decidir qué tipo de servidor desea utilizar para alojar su sitio.</p>
<div class="post__toc">
<h3>Tabla de contenidos</h3>
<ul>
<li><a href="#keyconsiderationsforhostingapubliiwebsite">Consideraciones clave para albergar un sitio web de Publii</a></li>
<li><a href="#protectingthefilespubliijsonfile">Protegiendo los archivos.publii.json Archivo</a>
<ul>
<li><a href="#whyhideorprotectthisfile">Por qué esconde o protege este archivo?</a></li>
</ul>
</li>
</ul>
</div>
</header>
<div class="post__entry">
<h2 id="keyconsiderationsforhostingapubliiwebsite">Consideraciones clave para albergar un sitio web de Publii</h2>
<ol>
<li>No todos los servidores se configurarán para manejar directorios, lo que hace que no puedan mostrar el archivo <strong>index.html</strong> inmediatamente en carga. Para protegerse de este problema, recomendamos habilitar la opción <strong>Always add index.html</strong> en la sección <strong>URLs</strong> de la <strong>configuración</strong> del <strong>sitio</strong>, que están disponibles a través del menú principal en la barra izquierda de la interfaz de Publii.</li>
<li>El protocolo FTP puede ser fácil de usar y sin duda es compatible con Publii, pero generalmente se recomienda evitar el uso de este protocolo ya que envía datos sin cifrado, abriendo más oportunidades para que los hackers tengan acceso a su servidor. En cambio, al mínimo recomendamos usar el protocolo <strong>FTPS</strong>, que funciona exactamente igual que FTP regular, pero también cifra los datos de acceso del servidor para una protección adicional. Los usuarios deben ir un paso más y utilizar el protocolo <strong>SFTP</strong>, que cifra todo el tráfico (conexión, transferencia de archivos) al servidor para la máxima protección.</li>
<li>Publii no genera archivos vacías index.html para directorios, ya que esto a menudo llevaría a que varios archivos adicionales se cargan en el servidor. Por lo tanto, recomendamos utilizar un alojamiento (método de despliegue) que incluye una opción para desactivar la lista de directorios o, alternativamente, permite a los usuarios desactivarlo manualmente, por ejemplo, a través de la <strong>.htaccess</strong> Archivo.
<p>La siguiente tabla muestra cómo los diferentes métodos de implementación manejan la lista de directorios.</p>
<table class="table-bordered" border="1">
<tbody>
<tr>
<td><strong>Método de despliegue</strong></td>
<td><strong>Opción de entrada construida</strong></td>
</tr>
<tr>
<td>FTP</td>
<td>depende de la configuración del servidor <em><small>(puede desactivarse a través del archivo .htaccess)</small></em></td>
</tr>
<tr>
<td>SFTP</td>
<td>depende de la configuración del servidor <em><small>(puede desactivarse a través del archivo .htaccess)</small></em></td>
</tr>
<tr>
<td>GitHub</td>
<td>desactivados por defecto - devuelve 404 página de error</td>
</tr>
<tr>
<td>GitLab</td>
<td>desactivados por defecto - devuelve 404 página de error</td>
</tr>
<tr>
<td>Netlify</td>
<td>desactivados por defecto - devuelve 404 página de error</td>
</tr>
<tr>
<td>Google Cloud</td>
<td>- -</td>
</tr>
<tr>
<td>Amazon S3</td>
<td>necesaria para crear una política de cubos</td>
</tr>
<tr>
<td>Despliegue manual</td>
<td>depende de la configuración disponible del servidor de destino</td>
</tr>
</tbody>
</table>
</li>
<li>Para mejorar la experiencia del sitio para sus visitantes y garantizar su seguridad, recomendamos encarecidamente el uso de SSL (Secure Sockets Layer) en su sitio web, que cifrará el tráfico entre el navegador web del visitante y el servidor de su sitio. Esto también tendrá un beneficio secundario para el tráfico de su sitio, ya que algunos navegadores bloquean páginas sin un certificado SSL y advierte a los visitantes que su sitio puede ser peligroso, independientemente del contenido real del sitio.</li>
</ol>
<p>Con estos puntos en mente, puede estar seguro de que sus datos y los de sus visitantes serán más seguros que antes.</p>
<h2 id="protectingthefilespubliijsonfile">Protegiendo los archivos.publii.json Archivo</h2>
<p>A partir de <a href="https://getpublii.com/blog/release-046.html">Publii</a> 0.46, el proceso de sincronización se ha mejorado con un nuevo enfoque que utiliza controles individuales para cada archivo en su sitio, almacenado en el <code>files.publii.json</code>Archivo. Este cambio mejora la precisión de la detección de archivos modificados y simplifica el proceso de sincronización.</p>
<p>Anteriormente, se generó un solo checksum para todo el sitio, lo que podría resultar en cargas de archivos innecesarias durante la sincronización si incluso un archivo cambió. El nuevo método garantiza un flujo de trabajo más eficiente mediante:</p>
<ul>
<li><strong>Seguimiento de cada archivo por separado:</strong> El <code>files.publii.json</code>file ahora contiene una lista completa de todos los archivos del sitio, cada uno emparejado con su comprobación única. Esto permite la identificación precisa de qué archivos se han actualizado.</li>
<li><strong>Reducción de tiempos de carga:</strong> Al comparar las rondas en las versiones local y de servidores de la <code>files.publii.json</code>Archivo, Publii sólo suba archivos que realmente han sido modificados, ahorrando tiempo y recursos.</li>
<li><strong>Aumento de la confiabilidad:</strong> El paso de un solo sitio de cheques a controles por archivo reduce los errores durante la sincronización y mejora la consistencia general en las implementaciones.</li>
</ul>
<h3 id="whyhideorprotectthisfile">Por qué esconde o protege este archivo?</h3>
<p>El <code>files.publii.json</code>El archivo contiene información sobre todos los archivos cargados en su sitio utilizando Publii. Generalmente, estos archivos ya son de acceso público, ya que forman el contenido visible de su sitio web. Sin embargo, si prefiere no exponer la estructura o los metadatos detallados de los archivos de su sitio por cualquier motivo, puede tomar medidas para restringir el acceso a este archivo.</p>
<p>Puedes lograrlo con:</p>
<ol>
<li>
<p><strong>Redirección de acceso</strong><br>Establecer una redir tipo de redirier para que cualquier petición a <code>files.publii.json</code>es redirigido a otra página, como su página de inicio.</p>
<p>Ejemplo (Apache):</p>
<div class="code-toolbar">
<pre class="language-apacheconf" tabindex="0"><code>Redirect 301 /files.publii.json /
</code></pre>
</div>
</li>
<li>
<p><strong>Bloqueo de acceso Directamente</strong><br>Evite el acceso al archivo por completo mediante la configuración de las reglas del servidor, por ejemplo con <code>.htaccess</code>directivas.</p>
<p>Ejemplo (Apache):</p>
<div class="code-toolbar">
<pre class="language-apacheconf" tabindex="0"><code>&lt;Files "files.publii.json"&gt;
    Require all denied
&lt;/Files&gt;</code></pre>
</div>
</li>
</ol>
<p>Al tomar estas medidas, usted puede asegurarse de que el <code>files.publii.json</code>El archivo permanece protegido mientras se beneficia aún del sistema de sincronización mejorado de Publii.</p>
<p class="msg msg--info"><strong>Importante:</strong> Cuando el nuevo sistema de verificación está habilitado por primera vez, todos los archivos serán recargados durante la sincronización inicial. Esta es una ocurrencia única; las sincronizaciones futuras solo suben archivos cambiados.</p>
</div>
            ]]>
        </content>
    </entry>
    <entry>
        <title>OFERTA TRES</title>
        <author>
            <name>Gabriel Genri</name>
        </author>
        <link href="https://gabrielgenri.github.io/ProyectoWebs/oferta-tres.html"/>
        <id>https://gabrielgenri.github.io/ProyectoWebs/oferta-tres.html</id>
        <media:content url="https://gabrielgenri.github.io/ProyectoWebs/media/posts/71/WebsiteFeature-Image.jpg" medium="image" />

        <updated>2024-12-07T16:39:08-03:00</updated>
            <summary>
                <![CDATA[
                        <img src="https://gabrielgenri.github.io/ProyectoWebs/media/posts/71/WebsiteFeature-Image.jpg" alt="" />
                    Esta es una oferta. Aquí va su descripción y se etiqueta como Oferta con imagen destacada en formato 9:16. 
                ]]>
            </summary>
        <content type="html">
            <![CDATA[
                    <p><img src="https://gabrielgenri.github.io/ProyectoWebs/media/posts/71/WebsiteFeature-Image.jpg" class="type:primaryImage" alt="" /></p>
                <p>Esta es una oferta. Aquí va su descripción y se etiqueta como Oferta con imagen destacada en formato 9:16. </p>
            ]]>
        </content>
    </entry>
    <entry>
        <title>OFERTA DOS</title>
        <author>
            <name>Gabriel Genri</name>
        </author>
        <link href="https://gabrielgenri.github.io/ProyectoWebs/oferta-dos.html"/>
        <id>https://gabrielgenri.github.io/ProyectoWebs/oferta-dos.html</id>
        <media:content url="https://gabrielgenri.github.io/ProyectoWebs/media/posts/70/Stone-Featured.jpg" medium="image" />

        <updated>2024-12-07T16:38:42-03:00</updated>
            <summary>
                <![CDATA[
                        <img src="https://gabrielgenri.github.io/ProyectoWebs/media/posts/70/Stone-Featured.jpg" alt="" />
                    Esta es una oferta. Aquí va su descripción y se etiqueta como Oferta con imagen destacada en formato 9:16. 
                ]]>
            </summary>
        <content type="html">
            <![CDATA[
                    <p><img src="https://gabrielgenri.github.io/ProyectoWebs/media/posts/70/Stone-Featured.jpg" class="type:primaryImage" alt="" /></p>
                <p>Esta es una oferta. Aquí va su descripción y se etiqueta como Oferta con imagen destacada en formato 9:16. </p>
            ]]>
        </content>
    </entry>
    <entry>
        <title>OFERTA UNO</title>
        <author>
            <name>Gabriel Genri</name>
        </author>
        <link href="https://gabrielgenri.github.io/ProyectoWebs/oferta-uno.html"/>
        <id>https://gabrielgenri.github.io/ProyectoWebs/oferta-uno.html</id>
        <media:content url="https://gabrielgenri.github.io/ProyectoWebs/media/posts/69/Arch-Featured.jpg" medium="image" />

        <updated>2024-12-07T16:38:18-03:00</updated>
            <summary>
                <![CDATA[
                        <img src="https://gabrielgenri.github.io/ProyectoWebs/media/posts/69/Arch-Featured.jpg" alt="" />
                    Esta es una oferta. Aquí va su descripción y se etiqueta como Oferta con imagen destacada en formato 9:16. 
                ]]>
            </summary>
        <content type="html">
            <![CDATA[
                    <p><img src="https://gabrielgenri.github.io/ProyectoWebs/media/posts/69/Arch-Featured.jpg" class="type:primaryImage" alt="" /></p>
                <p>Esta es una oferta. Aquí va su descripción y se etiqueta como Oferta con imagen destacada en formato 9:16. </p>
            ]]>
        </content>
    </entry>
    <entry>
        <title>API de configuración de temas</title>
        <author>
            <name>Gabriel Genri</name>
        </author>
        <link href="https://gabrielgenri.github.io/ProyectoWebs/api-de-configuracion-de-temas.html"/>
        <id>https://gabrielgenri.github.io/ProyectoWebs/api-de-configuracion-de-temas.html</id>
        <media:content url="https://gabrielgenri.github.io/ProyectoWebs/media/posts/67/11.jpg" medium="image" />
            <category term="Publii"/>

        <updated>2024-12-06T21:27:03-03:00</updated>
            <summary>
                <![CDATA[
                        <img src="https://gabrielgenri.github.io/ProyectoWebs/media/posts/67/11.jpg" alt="" />
                    Casi todos los temas necesitan opciones configurables para satisfacer las necesidades de los usuarios. Publii te permite crear opciones relacionadas&hellip;
                ]]>
            </summary>
        <content type="html">
            <![CDATA[
                    <p><img src="https://gabrielgenri.github.io/ProyectoWebs/media/posts/67/11.jpg" class="type:primaryImage" alt="" /></p>
                <header>
<p class="post__title"><span style="color: var(--text-primary-color); font-family: var(--editor-font-family); font-size: inherit; font-weight: var(--font-weight-normal);">Casi todos los temas necesitan opciones configurables para satisfacer las necesidades de los usuarios. Publii te permite crear opciones relacionadas con el tema y las publicaciones que permiten a los usuarios personalizar el diseño del tema y las publicaciones.</span></p>
</header>
<div class="post__entry">
<h2 id="wheretofindthemesettings">¿Dónde encontrar la configuración del tema?</h2>
<p>Los ajustes de tema están disponibles en el elemento de menú "Tema" de la barra lateral de Publii. En esta vista, encontrará las áreas "Ajustes básicos" y "Ajustes personalizados".</p>
<p>El área de configuración básica está definida por Publii y no se puede modificar por tema. El área de configuración personalizada es totalmente configurable por el desarrollador del tema. Todas las configuraciones personalizadas se agruparán en pestañas con opciones.</p>
<figure class="is-loaded"><img  src="https://getpublii.com/dev/media/posts/108/custom-settings.svg" alt="API de configuración de temas" width="748" height="207" loading="lazy" data-is-external-image="true"></figure>
<h2 id="wheretofindpostsettings">¿Dónde encontrar la configuración de las publicaciones?</h2>
<p>Las configuraciones de las publicaciones (si están disponibles en el tema) se ubican como una última pestaña en las configuraciones personalizadas en la vista de configuraciones del tema. En esta pestaña llamada "Opciones de publicaciones", el usuario puede definir valores globales para las configuraciones de las publicaciones a fin de evitar modificaciones innecesarias de cada publicación para lograr una configuración específica.</p>
<p>Por ejemplo, si el usuario desea desactivar la visualización de la fecha de creación para todas las publicaciones, puede hacerlo en la pestaña "Opciones de publicación". Pero si algunas publicaciones necesitan tener una fecha de creación, es posible habilitarla en el editor de publicaciones en la pestaña "Otras opciones" de la barra lateral del editor de publicaciones.</p>
<p>Cada opción en esa pestaña normalmente tiene tres valores:</p>
<ul>
<li>Utilizar configuración global</li>
<li>Desactivado</li>
<li>Activado</li>
</ul>
<p>El uso de la configuración global es la configuración predeterminada.</p>
<h2 id="howtocreatethemesettings">¿Cómo crear configuraciones de tema?</h2>
<p>La configuración del tema se puede definir en el archivo <a href="https://getpublii.com/dev/theme-configjson-file/" target="_blank" rel="noopener noreferrer">config.json</a> en el campo <strong>customConfig</strong> .</p>
<p>La configuración del tema le permite utilizar los siguientes campos:</p>
<ul>
<li><a href="https://getpublii.com/dev/text-input/">Campo de entrada de texto</a></li>
<li><a href="https://getpublii.com/dev/textarea/">Campo de área de texto</a></li>
<li><a href="https://getpublii.com/dev/dropdown/">Campo desplegable</a></li>
<li><a href="https://getpublii.com/dev/wysiwyg/">Campo WYSIWYG</a></li>
<li><a href="https://getpublii.com/dev/color-picker/">Campo selector de color</a></li>
<li><a href="https://getpublii.com/dev/image-upload/">Campo de carga de imagen</a></li>
<li><a href="https://getpublii.com/dev/small-image-upload/">Campo de carga de imagen pequeño</a></li>
<li><a href="https://getpublii.com/dev/radio-buttons/">Botones de radio</a></li>
<li><a href="https://getpublii.com/dev/switcher/">Campo conmutador</a></li>
<li><a href="https://getpublii.com/dev/range-slider/">Campo deslizante de rango</a></li>
<li><a href="https://getpublii.com/dev/separator/">Campo separador</a></li>
<li><a href="https://getpublii.com/dev/posts-dropdown/">Campo desplegable de publicaciones</a></li>
<li><a href="https://getpublii.com/dev/tags-dropdown/">Campo desplegable de etiquetas</a></li>
<li><a href="https://getpublii.com/dev/authors-dropdown/">Campo desplegable de autores</a></li>
</ul>
<h2 id="howtocreatepostsettings">¿Cómo crear configuraciones de publicaciones?</h2>
<p>Las configuraciones de las publicaciones se pueden definir de la misma manera que las configuraciones del tema, pero deben ubicarse en el campo <strong>postConfig</strong> . </p>
<p>En este momento la configuración de publicaciones le permite utilizar los siguientes campos:</p>
<ul>
<li><a href="https://getpublii.com/dev/dropdown/">Campo desplegable</a></li>
<li><a href="https://getpublii.com/dev/text-input/">Campo de entrada de texto</a></li>
<li><a href="https://getpublii.com/dev/textarea/">Campo de área de texto</a></li>
<li><a href="https://getpublii.com/dev/color-picker/">Campo selector de color</a></li>
</ul>
<p>Los campos de configuración de publicaciones en este momento no admiten el parámetro <strong>de grupo</strong> que se utiliza para crear pestañas para las configuraciones personalizadas del tema.</p>
<h2 id="howlooksastructureofthefieldunderconfigjsonfile">¿Cómo se ve la estructura del campo en el archivo config.json?</h2>
<p>Todos los campos utilizan una estructura común de definición de campo:</p>
<ul>
<li><strong>nombre</strong> : nombre del campo utilizado para recuperar un valor del campo</li>
<li><strong>Etiqueta</strong> : etiqueta utilizada para reconocer fácilmente un campo en la interfaz de usuario de Publii.</li>
<li><strong>grupo</strong> : campo utilizado para agrupar campos (solo para los campos de configuración del tema). Todos los campos con el mismo valor se colocarán en las mismas pestañas; ese valor también es una etiqueta de pestaña.</li>
<li><strong>Nota</strong> : utilice este campo para agregar información adicional para el usuario. Le permite utilizar el código HTML como valor.</li>
<li><strong>valor</strong> : valor predeterminado del campo</li>
<li><strong>tipo</strong> : tipo del campo</li>
<li><strong>dependencias</strong> : matriz de reglas utilizadas para especificar si el campo debe mostrarse o no</li>
<li><strong>customCssClasses</strong> : define uno o más nombres de clases CSS personalizados que se aplicarán al campo</li>
<li><strong>[other]</strong> : otros campos relacionados con el campo: lea la documentación de un campo específico para obtener más detalles al respecto</li>
</ul>
<p>A continuación se muestra un ejemplo del campo utilizado para los efectos de carga diferida en nuestros temas:</p>
<div class="code-toolbar">
<pre class="language-json" tabindex="0"><code>  {
      "name": "lazyLoadEffect",
      "label": "Lazy load effects",
      "group": "Additional",
      "note": "This option works only if the 'Media lazy load' option is enabled in the Website Speed tab under Site Settings",
      "value": "fadein",
      "type": "select",
      "options": [
          {
              "label": "Fade in",
              "value": "fadein"
          },
          {
              "label": "None",
              "value": "none"
          }
      ]
  }</code></pre>
<div class="toolbar">
<div class="toolbar-item"><a>Copiar</a></div>
</div>
</div>
<p>El campo anterior estará disponible bajo el tema:</p>
<div class="code-toolbar">
<pre class="language-handlebars" tabindex="0"><code>{{ @config.custom.lazyLoadEffect }}</code></pre>
<div class="toolbar">
<div class="toolbar-item"><a>Copiar</a></div>
</div>
</div>
<p>Ese campo se mostrará en la configuración del tema en la pestaña "Adicional" como un campo desplegable con tres opciones:</p>
<ul>
<li>Encadenar</li>
<li>Desenfocar</li>
<li>Sin LQIP</li>
</ul>
<p>El valor predeterminado será "Aparición gradual". Debajo del campo, el usuario verá una nota adicional con un enlace a la documentación externa.</p>
<p>Ese campo se mostrará en la interfaz de usuario solo si la opción <strong>lazyLoad</strong> se establece como verdadera.</p>
<div class="post__entry">
<h2 id="howtoaccessoptionvaluesofthethemesettingsinthetheme">¿Cómo acceder a los valores de las opciones de configuración del tema en el tema?</h2>
<p>Se puede acceder fácilmente a cada valor de opción de tema a través de la variable global <a href="https://getpublii.com/dev/config-global-variable/">@config</a> . Esa variable contiene el campo <strong>personalizado , que es un objeto donde la clave es el campo </strong><strong>de nombre</strong>  utilizado en la definición de la opción.</p>
<p>Por ejemplo, si desea acceder a un valor de la opción que utiliza como nombre el valor <strong>headerColor</strong> , debe escribir en su tema:</p>
<div class="code-toolbar">
<pre class="language-handlebars" tabindex="0"><code>{{ @config.custom.headerColor }}</code></pre>
<div class="toolbar">
<div class="toolbar-item"><a>Copiar</a></div>
</div>
</div>
<p>El código anterior generará el valor de la opción <strong>headerColor</strong> .</p>
<h2 id="howtoaccessoptionvaluesofthepostsettingsinthetheme">¿Cómo acceder a los valores de las opciones de configuración de la publicación en el tema?</h2>
<p>Las opciones de configuración de la publicación son accesibles de dos maneras:</p>
<ul>
<li>a través de la sintaxis <strong>@config.post.*</strong> que funciona de la misma manera que la sintaxis <strong>@config.custom.*</strong> para la opción de tema</li>
<li>a través  del objeto <strong>postViewConfig</strong> en el <a href="https://getpublii.com/dev/post-tags/">elemento de publicación</a> . </li>
</ul>
<p class="msg msg--warning">¡Atención! La sintaxis <strong>@config.post.*</strong> solo funciona con plantillas de publicaciones individuales. En las páginas con listas de publicaciones, debe utilizar el objeto <strong>postViewConfig</strong> .</p>
<p>Por ejemplo, para obtener el valor de la opción de publicación definida con el nombre <strong>headerColor,</strong> puede utilizar en el archivo <strong>post.hbs</strong> (y también en cualquier <a href="https://getpublii.com/dev/how-to-create-custom-templates/">plantilla de publicación personalizada</a> ) la siguiente sintaxis:</p>
<div class="code-toolbar">
<pre class="language-handlebars" tabindex="0"><code>{{ @config.post.headerColor }}</code></pre>
<div class="toolbar">
<div class="toolbar-item"><a>Copiar</a></div>
</div>
</div>
<p>Si desea obtener el mismo valor en la lista de publicaciones (por ejemplo, en la página de inicio), debe utilizar:</p>
<div class="code-toolbar">
<pre class="language-handlebars" tabindex="0"><code>{{ postViewConfig.headerColor }}</code></pre>
<div class="toolbar">
<div class="toolbar-item"><a>Copiar</a></div>
</div>
</div>
<p>Dentro del contexto del artículo de publicación:</p>
<div class="code-toolbar">
<pre class="language-handlebars" tabindex="0"><code>{{#each posts}}
    &lt;h2 style="color: {{ postViewConfig.headercolor }};"&gt;
        {{ title }}
    &lt;/h2&gt;
{{/each}}</code></pre>
<div class="toolbar">
<div class="toolbar-item"><a>Copiar</a></div>
</div>
</div>
<p>El código anterior mostrará la lista de publicaciones con el uso del color de texto especificado por publicación.</p>
<h2 id="howtocreateposttemplaterelatedpostsettings">¿Cómo crear configuraciones de publicaciones relacionadas con plantillas de publicaciones?</h2>
<p>Es posible crear opciones de publicación que se mostrarán solo si se utiliza la plantilla de publicación específica (si las plantillas de publicación están disponibles en su tema).</p>
<p>Debes utilizar el parámetro <strong>postTemplates</strong> . Puede definirse como un nombre de plantilla de publicación único:</p>
<div class="code-toolbar">
<pre class="language-json" tabindex="0"><code> 
{
     "name": "displayAuthor",
     "label": "Display author name",
     "value": 1,
     "type": "select",
     "postTemplates": "alternative",
     "options": [
          {
              "label": "Enabled",
              "value": 1
          },
          {
              "label": "Disabled",
              "value": 0
          }
    ]
}  </code></pre>
<div class="toolbar">
<div class="toolbar-item"><a>Copiar</a></div>
</div>
</div>
<p>o como nombres de plantillas de publicaciones múltiples (separados por coma):</p>
<div class="code-toolbar">
<pre class="language-json" tabindex="0"><code>...
"postTemplates": "alternative,test,portfolio", 
...</code></pre>
<div class="toolbar">
<div class="toolbar-item"><a>Copiar</a></div>
</div>
</div>
<p>Si necesita ocultar opciones de publicación específicas para los nombres de plantillas de publicación indicados, anteponga el valor del parámetro postTemplates con un signo de exclamación:</p>
<div class="code-toolbar">
<pre class="language-json" tabindex="0"><code>...
"postTemplates": "!alternative,test,portfolio", 
...</code></pre>
<div class="toolbar">
<div class="toolbar-item"><a>Copiar</a></div>
</div>
</div>
<p>En el ejemplo anterior, la configuración de publicación especificada no se mostrará para las plantillas de publicaciones alternativas y de cartera.</p>
<h2 id="internallinkingbetweenoptions">Enlace interno entre opciones</h2>
<p>Es posible crear enlaces internos entre opciones utilizando campos de nota.</p>
<p>Para crear enlaces internos, cree enlaces con el atributo <strong>data-internal-link</strong> :</p>
<div class="code-toolbar">
<pre class="language-html" tabindex="0"><code>&lt;a href="#" data-internal-link="Fonts"&gt;Link A&lt;/a&gt;
&lt;a href="#" data-internal-link="Fonts#headings"&gt;Link B&lt;/a&gt;</code></pre>
<div class="toolbar">
<div class="toolbar-item"><a>Copiar</a></div>
</div>
</div>
<p><strong>El enlace A</strong> conducirá a un grupo llamado Fuentes, mientras que <strong>el enlace B</strong> conducirá a una opción que contiene un campo de anclaje configurado como "encabezados":</p>
<div class="code-toolbar">
<pre class="language-json" tabindex="0"><code>{
     "anchor": "headings",
     "name": "separator",
     "type": "separator",
     "label": "Headings",
     "group": "Fonts",
     "note": "Please note: not all of the font weights are working with the fonts listed above.",
     "size": "big"
}</code></pre>
<div class="toolbar">
<div class="toolbar-item"><a>Copiar</a></div>
</div>
</div>
<h2 id="customcssclassesforfields">Clases CSS personalizadas para campos</h2>
<p>Para mejorar la flexibilidad y la personalización de la interfaz de usuario de Publii, hemos introducido el <code>customCssClasses</code>atributo para campos dentro de complementos, temas y repetidores. Esta función permite a los desarrolladores asignar una o más clases CSS personalizadas a un campo específico, lo que proporciona un mayor control sobre el estilo de los componentes de la interfaz de usuario individuales.</p>
<h3 id="addingasinglecustomcssclass">Cómo agregar una única clase CSS personalizada</h3>
<p>Para agregar una sola clase CSS personalizada a un campo, use la <code>customCssClasses</code>propiedad en la configuración JSON del campo. Especifique el nombre de la clase como el valor de esta propiedad. Por ejemplo:</p>
<div class="code-toolbar">
<pre class="language-json" tabindex="0"><code>{
  "name": "exampleField",
  "label": "Example Field",
  "type": "text",
  "customCssClasses": "unique-class-name"
}
</code></pre>
<div class="toolbar">
<div class="toolbar-item"><a>Copiar</a></div>
</div>
</div>
<p>Esto aplicará la <code>unique-class-name</code>clase CSS al <code>exampleField</code>elemento en la interfaz de usuario de Publii.</p>
<h3 id="addingmultiplecustomcssclasses">Cómo agregar múltiples clases CSS personalizadas</h3>
<p>También puedes asignar varias clases CSS a un campo separando los nombres de clase con un espacio. Esto permite una personalización aún más detallada del estilo del campo. Por ejemplo:</p>
<div class="code-toolbar">
<pre class="language-json" tabindex="0"><code>{
  "name": "exampleField",
  "label": "Example Field",
  "type": "text",
  "customCssClasses": "unique1-class-name unique2-class-name unique3-class-name"
}
</code></pre>
<div class="toolbar">
<div class="toolbar-item"><a>Copiar</a></div>
</div>
</div>
<p>En este ejemplo, <code>exampleField</code>se aplicarán tres clases CSS independientes al elemento: <code>unique1-class-name</code>, <code>unique2-class-name</code>y <code>unique3-class-name</code>. Esto permite aplicar varias reglas de estilo al mismo campo para lograr efectos visuales más complejos y variados.</p>
<h3 id="usagenotes">Notas de uso</h3>
<ul>
<li>Asegúrate de que las clases CSS personalizadas que definas estén declaradas correctamente en los archivos CSS de tu tema o complemento. Las clases no definidas no afectarán la apariencia del campo.</li>
<li>El <code>customCssClasses</code>atributo se puede utilizar con cualquier tipo de campo, lo que proporciona una herramienta versátil para la personalización de la interfaz de usuario en todo su sitio Publii.</li>
<li>La combinación de varias clases permite un enfoque granular y en capas para el estilo, creando una interfaz más refinada y fácil de usar.</li>
</ul>
<p>Al aprovechar este <code>customCssClasses</code>atributo, los desarrolladores pueden mejorar significativamente la apariencia y la experiencia del usuario de la interfaz de configuración de temas de Publii. Este atributo permite agregar una o más clases CSS personalizadas a campos de configuración individuales, lo que proporciona un método directo para aplicar opciones de estilo específicas. Dicha personalización garantiza que la interfaz de configuración de temas se alinee perfectamente con la visión de diseño del desarrollador, lo que facilita una experiencia de configuración del usuario más intuitiva y visualmente coherente. Esta capacidad subraya la flexibilidad y adaptabilidad de Publii, lo que permite a los desarrolladores crear paneles de configuración de temas altamente personalizados y fáciles de usar.</p>
<h2 id="enhancingthemesettingsuiwithcustomcss">Mejorar la interfaz de usuario de configuración del tema con CSS personalizado</h2>
<p>Publii presenta una potente función que permite a los desarrolladores de temas personalizar aún más la apariencia de las opciones del tema mediante clases CSS personalizadas. Esta mejora no se limita únicamente a los temas, sino que se extiende a los complementos y repetidores, lo que garantiza una interfaz de usuario uniforme y visualmente atractiva.</p>
<p>Con la <code>customThemeOptionsCss</code>función habilitada en la configuración <a href="https://getpublii.com/dev/theme-supported-features/">supportedFeatures</a> , Publii ahora permite cargar un archivo theme-options.css directamente desde el directorio principal del tema. Este archivo CSS dedicado proporciona un enfoque centralizado para diseñar la configuración del tema, lo que facilita a los desarrolladores la gestión y actualización de la presentación visual de las opciones configurables de su tema.</p>
<p>El <code>theme-options.css</code>archivo debe colocarse en el directorio principal del tema, siguiendo esta ruta: </p>
<div class="code-toolbar">
<pre class="language-markdown" tabindex="0"><code>\Documents\Publii\sites\your-siteName\input\themes\your-theme-name\</code></pre>
<div class="toolbar">
<div class="toolbar-item"><a>Copiar</a></div>
</div>
</div>
<p>Por ejemplo, si su tema se llama <strong>Simple</strong> , la estructura se vería así:</p>
<div class="code-toolbar">
<pre class="language-markdown" tabindex="0"><code>- input
  |- themes
     |- simple
        |- theme-options.css
        |- index.hbs
        ...
</code></pre>
<div class="toolbar">
<div class="toolbar-item"><a>Copiar</a></div>
</div>
</div>
<p>Esta ruta de archivo garantiza que el <code>theme-options.css</code>archivo se cargue correctamente y se aplique a la configuración del tema en la interfaz de Publii. Para utilizar esta función, debe habilitarla explícitamente en la configuración de su tema. Incluya el siguiente código en <code>config.json</code>el archivo de su tema en la sección <a href="https://getpublii.com/dev/theme-supported-features/">supportedFeatures</a> :</p>
<div class="code-toolbar">
<pre class="language-json" tabindex="0"><code>"supportedFeatures": {
    "customThemeOptionsCss": true
}
</code></pre>
<div class="toolbar">
<div class="toolbar-item"><a>Copiar</a></div>
</div>
</div>
</div>
<footer>
<div class="post__footer-top">
<div class="post__meta"> </div>
<div><header>
<h1 class="post__title">Entrada de texto</h1>
</header>
<div class="post__entry">
<p>La entrada de texto es el tipo de campo predeterminado que se utiliza si el tipo de campo especificado no coincide con los demás campos disponibles. Se mostrará el campo de entrada estándar.</p>
<p>La sintaxis del campo de entrada de texto más sencilla es la siguiente:</p>
<div class="code-toolbar">
<pre class="language-json" tabindex="0"><code>{
    "name": "fieldName",
    "label": "Field name",
    "group": "Group name",
    "value": "default value",
    "type": "text",
    "disabled": false
}</code></pre>
<div class="toolbar">
<div class="toolbar-item"><a>Copiar</a></div>
</div>
</div>
<figure class="post__image"><figure class="is-loaded"><img  src="https://getpublii.com/dev/media/posts/110/text-input.svg" alt="Entrada de texto" width="748" height="124.043" loading="lazy" data-is-external-image="true"></figure></figure>
<p>Si utiliza un valor de tipo que no coincide con otros tipos de campos, ese valor se utilizará como un atributo de tipo en el elemento HTML de entrada representado.</p>
<p>Esto le permite crear campos como "número", "oculto", "correo electrónico", "www", etc.</p>
<h2 id="customparameters">Parámetros personalizados</h2>
<p>El campo de entrada de texto admite algunos otros parámetros compatibles con la sintaxis del elemento de entrada HTML:</p>
<ul>
<li>mín.</li>
<li>máximo</li>
<li>tamaño</li>
<li>paso</li>
<li>patrón</li>
<li>marcador de posición</li>
</ul>
<p>Además, hay disponible un parámetro adicional que permite crear una breve descripción del campo de entrada de texto:</p>
<ul>
<li>nota</li>
</ul>
<h4>Ejemplo:</h4>
<div class="code-toolbar">
<pre class="language-json" tabindex="0"><code>{
    "name": "pageWidth",
    "label": "Page width",
    "group": "Layout",
    "value": "63rem",
    "note": "Use of „rem” units recommended; also use others (px, vw)",
    "type": "text"
}</code></pre>
<div class="toolbar">
<div class="toolbar-item"><a>Copiar</a></div>
</div>
</div>
<figure class="post__image"><figure class="is-loaded"><img  src="https://getpublii.com/dev/media/posts/110/text.svg" alt="Entrada de texto" width="748" height="154" loading="lazy" data-is-external-image="true"></figure></figure>
</div>
<footer>
<div class="post__footer-top">
<div class="post__meta"><header>
<h1 class="post__title">Área de texto</h1>
</header>
<div class="post__entry">
<p>El campo de área de texto se puede utilizar cuando desea permitir que el usuario ingrese más de una línea de texto.</p>
<div class="code-toolbar">
<pre class="language-json" tabindex="0"><code>{
    "name": "copyrightNote",
    "label": "Copyright note",
    "group": "Footer",
    "value": "",
    "type": "textarea",
    "rows": 50,
    "cols": 100,
    "disabled": false
}</code></pre>
<div class="toolbar">
<div class="toolbar-item"><a>Copiar</a></div>
</div>
</div>
<p>El código anterior generará el campo disponible como <strong>@config.custom.copyrightNote</strong>  en la pestaña Pie de página de la configuración personalizada del tema. El elemento <strong>textarea</strong> generado tendrá los atributos <strong>rows</strong> y <strong>cols</strong> establecidos en los valores proporcionados.</p>
<figure class="post__image"><figure class="is-loaded"><img  src="https://getpublii.com/dev/media/posts/111/textarea.svg" alt="Área de texto" width="748" height="205.898" loading="lazy" data-is-external-image="true"></figure></figure>
</div>
<footer>
<div class="post__footer-top">
<div class="post__meta"> </div>
<div><header>
<h1 class="post__title">Menú desplegable</h1>
</header>
<div class="post__entry">
<p>Si desea permitir que un usuario seleccione un valor de la lista predefinida, puede utilizar la lista desplegable o los <a href="https://getpublii.com/dev/radio-buttons/">botones de opción</a> .</p>
<p>El campo desplegable tiene un parámetro especial para definir los valores de las opciones disponibles y sus etiquetas:</p>
<div class="code-toolbar">
<pre class="language-json" tabindex="0"><code>{
    "name": "layoutFrontpage",
    "label": "Frontpage layout",
    "group": "Layout",
    "value": "cols-3",
    "type": "select",
    "options": [
        {
            "label": "1 column",
            "value": "cols-1",
            "disabled": false
        },
        {
            "label": "2 columns",
            "value": "cols-2",
            "disabled": false         
        },
        {
            "label": "3 columns",
            "value": "cols-3",
            "disabled": false
        }
    ]
}</code></pre>
<div class="toolbar">
<div class="toolbar-item"><a>Copiar</a></div>
</div>
</div>
<p>El código anterior generará una lista de selección con tres opciones:</p>
<figure class="post__image"><figure class="is-loaded"><img  src="https://getpublii.com/dev/media/posts/123/dropdown.svg" alt="Menú desplegable - Lista de selección" width="748" height="124.109" loading="lazy" data-is-external-image="true"></figure></figure>
<p>Puedes hacer que algunas opciones no estén disponibles utilizando el campo <strong>deshabilitado para cada opción.</strong></p>
<p>También es posible agrupar campos utilizando el <code>&lt;optgroup&gt;</code>elemento: para lograrlo, simplemente use el <code>group</code>parámetro para opciones:</p>
<div class="code-toolbar">
<pre class="language-json" tabindex="0"><code>"options": [
        {
            "label": "1 column",
            "value": "cols-1",
            "group": "GROUP 1"
        },
        {
            "label": "2 columns",
            "value": "cols-2",
            "group": "GROUP 2"       
        },
        {
            "label": "3 columns",
            "value": "cols-3"
        }
]</code></pre>
<div class="toolbar">
<div class="toolbar-item"><a>Copiar</a></div>
</div>
</div>
<p>En el caso anterior, la primera opción estará en el GRUPO 1, la segunda opción estará en el GRUPO 2 y la tercera opción permanecerá sin agrupar.</p>
<p>Si necesita agregar más opciones al grupo indicado, simplemente use el mismo nombre de grupo para estas opciones. Las opciones usarán el mismo orden que en la estructura JSON.</p>
<p> </p>
</div>
</div>
</div>
</footer></div>
<div><header>
<h1 class="post__title">Selector de color</h1>
</header>
<div class="post__entry">
<p>El selector de color permite al usuario seleccionar fácilmente un valor de color en lugar de utilizar un color hexadecimal manualmente.</p>
<p>La sintaxis básica del selector de color es muy simple:</p>
<div class="code-toolbar">
<pre class="language-json" tabindex="0"><code>{
    "name": "primaryColor",
    "label": "Primary color",
    "group": "Colors",
    "value": "#E7AE12",
    "type": "colorpicker",
    "outputFormat": "HEX"
}</code></pre>
<div class="toolbar">
<div class="toolbar-item"><a>Copiar</a></div>
</div>
</div>
<p>Las opciones disponibles:</p>
<ul>
<li>RGBA o HEX <em>(predeterminado)</em></li>
<li>RGBA</li>
<li>HSLA</li>
</ul>
<p>Cuando se selecciona RGBA o HSLA, no se puede cambiar el formato en el control: siempre habrá entradas para RGBA o HSLA.</p>
<p>El código anterior generará una interfaz de usuario de selector de color con la etiqueta "Color primario" y el color predeterminado establecido en <strong>#E7AE12</strong></p>
<figure class="post__image"><figure class="is-loaded"><img  src="https://getpublii.com/dev/media/posts/113/color-picker.svg" alt="Selector de color" width="748" height="386" loading="lazy" data-is-external-image="true"></figure></figure>
</div>
<footer>
<div class="post__footer-top">
<div class="post__meta"> </div>
<div><header>
<h1 class="post__title">Carga de imagen</h1>
</header>
<div class="post__entry">
<p>Cuando desee permitir que sus usuarios carguen algunas imágenes adicionales, puede utilizar el campo de carga de imágenes.</p>
<p>Ese campo utiliza la sintaxis más simple posible:</p>
<div class="code-toolbar">
<pre class="language-json" tabindex="0"><code>{
    "name": "logo",
    "label": "Website logo",
    "value": "",
    "type": "upload"
}</code></pre>
<div class="toolbar">
<div class="toolbar-item"><a>Copiar</a></div>
</div>
</div>
<figure class="post__image"><figure class="is-loaded"><img  src="https://getpublii.com/dev/media/posts/114/image-uploader.svg" alt="Cargador de imágenes HTML" width="749" height="386" loading="lazy" data-is-external-image="true"></figure></figure>
<p>Si desea permitir que los usuarios carguen imágenes pequeñas utilizando una interfaz de usuario más pequeña, considere utilizar el <a href="https://getpublii.com/dev/small-image-upload/">campo de carga de imágenes pequeñas</a> .</p>
<p> </p>
</div>
</div>
<div><header>
<h1 class="post__title">Carga de imagen pequeña</h1>
</header>
<div class="post__entry">
<p>Cuando desee permitir que sus usuarios carguen algunas imágenes adicionales con el uso de la interfaz de carga de imágenes pequeñas, puede utilizar el campo de carga de imágenes pequeñas.</p>
<p>Ese campo utiliza la sintaxis más simple posible:</p>
<div class="code-toolbar">
<pre class="language-json" tabindex="0"><code>{
    "name": "favicon",
    "label": "Website favicon",
    "note": "The ideal size of a favicon is 16x16 pixels.",
    "value": "",
    "type": "smallupload"
}</code></pre>
<div class="toolbar">
<div class="toolbar-item"><a>Copiar</a></div>
</div>
</div>
<figure class="post__image"><figure class="is-loaded"><img  src="https://getpublii.com/dev/media/posts/115/small-file-uploader.svg" alt="Cargador de archivos pequeños" width="748" height="154" loading="lazy" data-is-external-image="true"></figure></figure>
<p>Si desea permitir que los usuarios carguen imágenes más grandes utilizando una interfaz de usuario más grande, considere utilizar el <a href="https://getpublii.com/dev/image-upload/">campo de carga de imágenes</a> .</p>
<header>
<h1 class="post__title">Botones de radio</h1>
</header>
<div class="post__entry">
<p>Si desea permitir que un usuario seleccione un valor de la lista predefinida, puede utilizar botones de opción o la <a href="https://getpublii.com/dev/dropdown/">lista desplegable</a> .</p>
<p>Los botones de opción tienen un parámetro especial para definir los valores de las opciones disponibles y sus etiquetas:</p>
<div class="code-toolbar">
<pre class="language-json" tabindex="0"><code>{
    "name": "layoutFrontpage",
    "label": "Frontpage layout",
    "group": "Layout",
    "value": "cols-3",
    "type": "radio",
    "options": [
        {
            "label": "1 column",
            "value": "cols-1",
            "disabled": false
        },
        {
            "label": "2 columns",
            "value": "cols-2",
            "disabled": false
        },
        {
            "label": "3 columns",
            "value": "cols-3",
            "disabled": false
        }
    ]
}</code></pre>
<div class="toolbar">
<div class="toolbar-item"><a>Copiar</a></div>
</div>
</div>
<p>El código anterior generará una lista de botones de opción con tres opciones:</p>
<figure class="post__image"><figure class="is-loaded"><img  src="https://getpublii.com/dev/media/posts/116/radio-buttons.svg" alt="Botones de radio" width="748" height="124.109" loading="lazy" data-is-external-image="true"></figure></figure>
<p>Puede deshabilitar algunas opciones utilizando el campo <strong>deshabilitado</strong> para cada opción.</p>
<header>
<h1 class="post__title">Conmutador</h1>
</header>
<div class="post__entry">
<p>Para situaciones en las que desea permitir a los usuarios simplemente habilitar o deshabilitar algunas opciones, puede considerar el campo conmutador que permite solo dos valores: <strong>verdadero</strong> o <strong>falso</strong> :</p>
<div class="code-toolbar">
<pre class="language-json" tabindex="0"><code>{
    "name": "lazyLoad",
    "label": "Lazyload",
    "group": "Additional",
    "note": "Enables lazyloading images that are currently not viewed, thus saving bandwidth.",
    "value": true,
    "type": "checkbox"
}</code></pre>
<div class="toolbar">
<div class="toolbar-item"><a>Copiar</a></div>
</div>
</div>
<figure class="post__image"><figure class="is-loaded"><img  src="https://getpublii.com/dev/media/posts/117/switcher.svg" alt="Conmutador HTML" width="748" height="156" loading="lazy" data-is-external-image="true"></figure></figure>
<p>Los campos del conmutador son excelentes para manejar la visualización condicional de otras opciones con el uso del parámetro <strong>de dependencias</strong> descrito en <a href="https://getpublii.com/dev/theme-settings-api/">la API de configuración del tema</a> .</p>
<p> </p>
</div>
</div>
</div>
</div>
</div>
</footer></div>
</div>
</footer></div>
<div><header>
<h1 class="post__title">Control deslizante de rango</h1>
</header>
<div class="post__entry">
<p>Si desea permitir que los usuarios especifiquen un valor que esté dentro de un rango específico, puede considerar el uso del campo deslizante de rango.</p>
<p>Gracias al uso de los parámetros <strong>min</strong> , <strong>max</strong> y <strong>step</strong> puedes limitar fácilmente los valores disponibles:</p>
<div class="code-toolbar">
<pre class="language-json" tabindex="0"><code>{
    "name": "fontSize",
    "label": "Font size",
    "group": "Fonts",
    "note": "The font-size of the root element in REM unit",
    "value": "1.1",
    "type": "range",
    "min": 1,
    "max": 3,
    "step": 0.05 
}</code></pre>
<div class="toolbar">
<div class="toolbar-item"><a>Copiar</a></div>
</div>
</div>
<p>El código anterior creará un control deslizante de rango que permite a los usuarios seleccionar un valor entre <strong>1</strong> y <strong>3</strong> con un paso mínimo igual a <strong>0,05</strong> .</p>
<figure class="post__image"><figure class="is-loaded"><img  src="https://getpublii.com/dev/media/posts/118/range-slider.svg" alt="Control deslizante de rango" width="748" height="133.927" loading="lazy" data-is-external-image="true"></figure></figure>
</div>
<footer>
<div class="post__footer-top">
<div class="post__meta"><header>
<h1 class="post__title">Reloj de repetición</h1>
</header>
<div class="post__entry">
<p>El campo Repetidor permite la adición dinámica de una lista de elementos, cada uno de los cuales consta de varios campos. Es especialmente útil en casos en los que se necesita una cantidad variable de entradas, cada una con la misma estructura. A continuación, se incluye una guía detallada sobre su configuración y sus capacidades.</p>
<h2 id="configuration">Configuración</h2>
<p>El campo Repetidor se define de la siguiente manera:</p>
<div class="code-toolbar">
<pre class="language-json" tabindex="0"><code>{
  "name": "test",
  "label": "Repeater Test",
  "group": "Global Changes",
  "type": "repeater",
  "value": [],
  "maxCount": 10,
  "translations": {
    "addItem": "Add Item",
    "duplicateItem": "Duplicate Item",
    "emptyState": "Click the button to add the first item",
    "removeItem": "Remove Item"
  },
  "hasEmptyState": true,
  "hideLabels": false,
  "structure": [
    {
      "name": "field1",
      "label": "Field 1",
      "type": "text",
      "placeholder": "Fill it",
      "spellcheck": true,
      "value": "",
      "width": 25,
      "dependencies": [
        {
          "field": "use_global_setting",
          "type": "pluginOption",
          "value": "yes"
        }
      ]
    },
    {
      "name": "field2",
      "label": "Field 2",
      "type": "number",
      "placeholder": "Fill it",
      "spellcheck": true,
      "value": 0,
      "width": 25
    },
    {
      "name": "field3",
      "label": "Field 3",
      "type": "textarea",
      "placeholder": "Fill it",
      "spellcheck": true,
      "value": "",
      "width": 50,
      "dependencies": [
        {
          "field": "field1",
          "type": "option",
          "value": "specific value"
        }
      ]
    }
  ]
}
</code></pre>
<div class="toolbar">
<div class="toolbar-item"><a>Copiar</a></div>
</div>
</div>
<h3 id="fieldproperties">Propiedades del campo</h3>
<p>A continuación, se incluye un desglose completo de las propiedades de campo disponibles en la configuración del repetidor. Estas propiedades son fundamentales para definir la estructura y el comportamiento de cada campo del repetidor. Abarcan todo, desde la configuración básica, como la asignación de nombres y el etiquetado de los campos, hasta configuraciones más avanzadas, como marcadores de posición de entrada, valores predeterminados y dependencias condicionales. </p>
<ul>
<li><strong>estructura</strong> : define la estructura de los campos dentro de cada elemento repetidor. Admite las siguientes propiedades:
<ul>
<li><strong>nombre</strong> : Nombre del campo.</li>
<li><strong>etiqueta</strong> : Etiqueta de campo para visualización.</li>
<li><strong>tipo</strong> : tipo de campo. Los tipos admitidos incluyen <code>text</code>, <code>number</code>, <code>textarea</code>, <code>dropdown</code>, <code>checkbox</code>, <code>radio</code>, <code>posts-dropdown</code>, <code>tags-dropdown</code>, <code>authors-dropdown</code>, <code>colorpicker</code>.</li>
<li><strong>opciones</strong> : Matriz de objetos <code>{ label: X, value: Y }</code>para <code>dropdown</code>o <code>radio</code>tipos.</li>
<li><strong>marcador de posición</strong> : marcador de texto para <code>text</code>, <code>number</code>, <code>email</code>, <code>url</code>, y <code>textarea</code>.</li>
<li><strong>corrector ortográfico</strong> : activa el corrector ortográfico.</li>
<li><strong>múltiple</strong> : permite selecciones múltiples para menús desplegables relacionados con publicaciones, etiquetas y autores.</li>
<li><strong>filas</strong> : Número de filas para <code>textarea</code>.</li>
<li><strong>min</strong> , <strong>max</strong> , <strong>step</strong> : Atributos para <code>number</code>y <code>range</code>tipos.</li>
<li><strong>allowed-post-status</strong> : filtra publicaciones por estado para <code>posts-dropdown</code>.</li>
<li><strong>ancho</strong> : Ancho del campo como porcentaje.</li>
<li><strong>outputFormat</strong> : Formato para el <code>colorpicker</code>.</li>
<li><strong>valor</strong> : valor predeterminado.</li>
</ul>
</li>
<li><strong>maxCount</strong> : cantidad máxima de elementos permitidos. El valor predeterminado es <code>-1</code>ilimitado.</li>
<li><strong>Traducciones</strong> : Traducciones personalizadas para elementos de la interfaz de usuario, como botones para agregar, duplicar y eliminar.</li>
<li><strong>hasEmptyState</strong> : muestra un mensaje de estado vacío cuando no hay elementos presentes.</li>
<li><strong>hideLabels</strong> : Opción para ocultar las etiquetas de campo para todos los elementos excepto la primera fila.</li>
</ul>
<h3 id="dependenciesinrepeaterfield">Dependencias en el campo repetidor</h3>
<p>El campo Repetidor admite dependencias, lo que permite la visualización o el ocultamiento dinámico de campos en función de los valores de otros campos dentro del mismo elemento repetidor o de las opciones de tema globales. Esta funcionalidad mejora la interactividad y la adaptabilidad de los elementos del formulario, lo que proporciona una experiencia de usuario personalizada en función de la entrada. Hay dos tipos de dependencias:</p>
<ol>
<li>
<p><strong>Dependencia de opción externa</strong> ( <code>externalOption</code>): este tipo de dependencia permite que un campo dentro de un repetidor dependa de un valor de opción externa. Si <code>pluginOption</code>se cumple la condición establecida por la dependencia, el campo se vuelve visible u oculto según la lógica especificada.</p>
</li>
<li>
<p><strong>Dependencia de opción</strong> : hace referencia a las dependencias entre campos dentro del mismo elemento repetidor. A diferencia del <code>externalOption</code>tipo, no especifica un tipo de dependencia, lo que implica que se trata de una dependencia entre repetidores. Permite mostrar u ocultar campos en función de los valores de otros campos dentro del mismo elemento.</p>
</li>
</ol>
<h4>Ejemplo de configuración</h4>
<p>Para ilustrarlo, considere el siguiente fragmento de configuración JSON que demuestra ambos tipos de dependencias:</p>
<div class="code-toolbar">
<pre class="language-json" tabindex="0"><code>{
  "name": "use_in_text",
  "label": "Use in post text",
  "type": "checkbox",
  "value": true,
  "width": 33,
  "dependencies": [
    {
      "field": "wrapper",
      "type": "externalOption",
      "value": "custom"
    }
  ]
},
{
  "name": "use_in_title",
  "label": "Use in post title",
  "type": "checkbox",
  "value": false,
  "width": 33,
  "dependencies": [
    {
      "field": "use_in_text",
      "type": "option",
      "value": "true"
    }
  ]
}
</code></pre>
<div class="toolbar">
<div class="toolbar-item"><a>Copiar</a></div>
</div>
</div>
<h4>Explicación de la lógica de dependencia</h4>
<ul>
<li>
<p><strong>Dependencia de opción externa</strong> : el campo <code>use_in_text</code>solo es visible si la opción externa <code>wrapper</code>está configurada en <code>custom</code>. Esto demuestra cómo un campo dentro de un repetidor puede depender de una configuración externa.</p>
</li>
<li>
<p><strong>Dependencia entre repetidores</strong> : la visibilidad de <code>use_in_title</code>depende de que la <code>use_in_text</code>casilla de verificación esté marcada ( <code>true</code>). Esto muestra la dependencia de un campo con otro dentro del mismo elemento repetidor.</p>
</li>
</ul>
<h2 id="implementingintheme">Implementando en el tema</h2>
<p>Después de configurar el campo repetidor en la configuración del tema, el siguiente paso es mostrar los elementos agregados en el sitio web. Esta sección explica cómo mostrar el contenido de un campo repetidor llamado "prueba" en un tema de Publii mediante la plantilla Handlebars.</p>
<h3 id="renderingrepeaterfieldcontent">Representación del contenido del campo repetidor</h3>
<p>Para mostrar cada elemento del repetidor en su tema, utilizará el <code>each</code>bucle Handlebars. Este método itera sobre los elementos del campo repetidor, lo que le permite acceder y representar los valores de los campos individuales.</p>
<p>A continuación se muestra un fragmento de código de muestra que demuestra cómo recorrer los elementos en el campo repetidor "prueba" y mostrar el contenido de <code>field1</code>, <code>field2</code>, y <code>field3</code>dentro de su tema, por ejemplo, en <code>index.hbs</code>el archivo:</p>
<div class="code-toolbar">
<pre class="language-handlebars" tabindex="0"><code>{{#each @config.custom.test}}
  &lt;div class="custom-repeater-item"&gt;
    &lt;div class="field"&gt;
      &lt;span class="label"&gt;Field 1:&lt;/span&gt;
      &lt;span class="value"&gt;{{field1}}&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class="field"&gt;
      &lt;span class="label"&gt;Field 2:&lt;/span&gt;
      &lt;span class="value"&gt;{{field2}}&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class="field"&gt;
      &lt;span class="label"&gt;Field 3:&lt;/span&gt;
      &lt;p class="value"&gt;{{field3}}&lt;/p&gt;
    &lt;/div&gt;
  &lt;/div&gt;
{{/each}}
</code></pre>
<div class="toolbar">
<div class="toolbar-item"><a>Copiar</a></div>
</div>
</div>
<h4>Puntos clave:</h4>
<ul>
<li><strong>Iteración</strong> : <code>{{#each @config.custom.test}}</code>itera sobre los elementos repetidores, lo que permite el acceso a los campos de cada elemento.</li>
<li><strong>Acceso al campo</strong> : Dentro del bucle, <code>{{field1}}</code>, <code>{{field2}}</code>, <code>{{field3}}</code>se utilizan para insertar los valores de los campos correspondientes.</li>
<li><strong>Estructura HTML</strong> : el ejemplo utiliza etiquetas <code>div</code>y <code>span</code>elementos para estructurar la salida, que se puede personalizar según los requisitos de diseño de su tema.</li>
</ul>
<header>
<h1 class="post__title">Separador</h1>
</header>
<div class="post__entry">
<p>El campo separador se puede utilizar para crear notas adicionales para grupos de opciones o se puede utilizar como separador entre grupos de configuraciones más pequeños.</p>
<div class="code-toolbar">
<pre class="language-json" tabindex="0"><code>{
    "name": "separator",
    "type": "separator",
    "label": "Separator label",
    "note": "Separator description text",
    "group": "Menu",
    "size": "small"
}</code></pre>
<div class="toolbar">
<div class="toolbar-item"><a>Copiar</a></div>
</div>
</div>
<figure class="post__image"><figure class="is-loaded"><img  src="https://getpublii.com/dev/media/posts/119/separator.svg" alt="Separadores" width="748" height="154" loading="lazy" data-is-external-image="true"></figure></figure>
<p>Los tamaños disponibles del campo separador:</p>
<ul>
<li>pequeño</li>
<li>medio</li>
<li>grande</li>
</ul>
<p> </p>
<div class="msg msg--highlight"><strong>Consejos y trucos:</strong>
<ol>
<li>En algunos casos, es posible que desee utilizar solo la línea de puntos; para lograr esto, deje el parámetro <strong>de etiqueta</strong>  vacío.</li>
<li>Los tres tipos de separadores vienen con márgenes superiores e inferiores; para eliminar estos espacios, deje el parámetro <strong>de tamaño</strong> vacío.</li>
</ol>
</div>
<p class="msg msg--info">Puede utilizar el mismo nombre para todos los separadores de su tema, ya que no se almacenan en el archivo de configuración del tema.</p>
<p> </p>
<header>
<h1 class="post__title">Menú desplegable de publicaciones</h1>
</header>
<div class="post__entry">
<p>El menú desplegable de publicaciones se puede utilizar en situaciones en las que desea permitir que los usuarios de su tema utilicen una relación específica con la publicación determinada.</p>
<p>Se puede utilizar, por ejemplo, para especificar la página de política de privacidad:</p>
<div class="code-toolbar">
<pre class="language-json" tabindex="0"><code> 
{
     "name": "privacyPolicyPage",
     "label": "Privacy Policy",
     "group": "GDPR",
     "value": "",
     "allowedPostStatus": ["any"],
     "type": "posts-dropdown",
     "multiple": false
}</code></pre>
<div class="toolbar">
<div class="toolbar-item"><a>Copiar</a></div>
</div>
</div>
<figure class="post__image"><figure class="is-loaded"><img  src="https://getpublii.com/dev/media/posts/120/posts-dropdown.svg" alt="Lista desplegable de publicaciones" width="748" height="262.879" loading="lazy" data-is-external-image="true"></figure></figure>
<p>El menú desplegable de publicaciones devuelve los ID de las publicaciones seleccionadas como un valor, por lo que debe conectarse con el uso del asistente <a href="https://getpublii.com/dev/getpost-helper/">getPost</a> o <a href="https://getpublii.com/dev/getposts-helper/">getPosts . Si la opción </a><strong>múltiple</strong> se establece en verdadero, se devuelve una cadena con los ID separados por comas.</p>
<p>El parámetro <strong>allowedPostStatus</strong> permite los siguientes valores:</p>
<ul>
<li>any</li>
<li>draft</li>
<li>hidden</li>
<li>featured</li>
<li>published</li>
<li>excluded</li>
</ul>
<p>El valor any significa cualquier otro estado de publicación, por lo que no es necesario especificar ningún otro estado en la matriz con valores de estados de publicación.</p>
<header>
<h1 class="post__title">Páginas desplegables</h1>
</header>
<div class="post__entry">
<p>El menú desplegable de páginas se puede utilizar en situaciones en las que desea permitir que los usuarios de su tema utilicen una relación específica con la página determinada.</p>
<p>Se puede utilizar, por ejemplo, para especificar la página de política de privacidad:</p>
<div class="code-toolbar">
<pre class="language-json" tabindex="0"><code> 
{
     "name": "privacyPolicyPage",
     "label": "Privacy Policy",
     "group": "GDPR",
     "value": "",
     "type": "pages-dropdown",
     "multiple": false
}</code></pre>
<div class="toolbar">
<div class="toolbar-item"><a>Copiar</a></div>
</div>
</div>
<p>El menú desplegable de páginas devuelve los ID de las páginas seleccionadas como valor, por lo que debe conectarse con el uso del asistente getPage o getPages. Si la opción <strong>múltiple</strong> se establece en verdadero, se devuelve una cadena con los ID separados por comas.</p>
<header>
<h1 class="post__title">Etiquetas desplegables</h1>
</header>
<div class="post__entry">
<p>El menú desplegable de etiquetas se puede utilizar en situaciones en las que desea permitir que los usuarios utilicen una relación específica con la etiqueta dada.</p>
<p>Se puede utilizar, por ejemplo, para especificar la etiqueta que se utilizará para crear una lista de publicaciones:</p>
<div class="code-toolbar">
<pre class="language-json" tabindex="0"><code> 
{
     "name": "listingTag",
     "label": "Post listing",
     "group": "Layout",
     "note": "Creates a list of posts with the selected tag",
     "value": "",
     "type": "tags-dropdown",
     "multiple": false
}</code></pre>
<div class="toolbar">
<div class="toolbar-item"><a>Copiar</a></div>
</div>
</div>
<figure class="post__image"><figure class="is-loaded"><img  src="https://getpublii.com/dev/media/posts/121/tags-dropdown.svg" alt="Lista desplegable de etiquetas" width="748" height="263" loading="lazy" data-is-external-image="true"></figure></figure>
<p>El menú desplegable de etiquetas devuelve el ID de la etiqueta seleccionada como un valor, por lo que debe conectarse con el uso de los asistentes  <a href="https://getpublii.com/dev/getpostsbytags-helper/">getPostsByTag</a>  o <a href="https://getpublii.com/dev/getpostbytags-helper/">getPostByTag . Si la opción </a><strong>múltiple</strong>  se establece en  <strong>true</strong> , se devuelve una cadena con los ID separados por comas.</p>
<header>
<h1 class="post__title">Menú desplegable de autores</h1>
</header>
<div class="post__entry">
<p>El menú desplegable de autores se puede utilizar en situaciones en las que desea permitir que los usuarios de su tema utilicen una relación específica con el autor determinado.</p>
<p>Se puede utilizar, por ejemplo, para especificar un autor que se utilizará para crear la lista de publicaciones:</p>
<div class="code-toolbar">
<pre class="language-json" tabindex="0"><code> 
{
     "name": "listingAuthor",
     "label": "Post listing",
     "group": "Layout",
     "note": "Creates a list of posts from the selected author",
     "value": "",
     "type": "authors-dropdown",
     "multiple": false
}</code></pre>
<div class="toolbar">
<div class="toolbar-item"><a>Copiar</a></div>
</div>
</div>
<figure class="post__image"><figure class="is-loaded"><img  src="https://getpublii.com/dev/media/posts/122/authors-dropdown.svg" alt="Lista desplegable de autores" width="748" height="297.25" loading="lazy" data-is-external-image="true"></figure></figure>
<p>El menú desplegable de autores devuelve el ID de la etiqueta seleccionada como valor. Si la opción <strong>múltiple</strong> se establece en <strong>true</strong> , se devuelve una cadena con los ID separados por comas.</p>
<p> </p>
</div>
</div>
</div>
<p> </p>
</div>
</div>
<p> </p>
</div>
</div>
<div> </div>
<div> </div>
</div>
</footer></div>
</div>
</footer></div>
            ]]>
        </content>
    </entry>
    <entry>
        <title>API del editor de publicaciones</title>
        <author>
            <name>Gabriel Genri</name>
        </author>
        <link href="https://gabrielgenri.github.io/ProyectoWebs/api-del-editor-de-publicaciones.html"/>
        <id>https://gabrielgenri.github.io/ProyectoWebs/api-del-editor-de-publicaciones.html</id>
        <media:content url="https://gabrielgenri.github.io/ProyectoWebs/media/posts/66/gallery13.jpg" medium="image" />
            <category term="Publii"/>

        <updated>2024-12-06T21:24:53-03:00</updated>
            <summary>
                <![CDATA[
                        <img src="https://gabrielgenri.github.io/ProyectoWebs/media/posts/66/gallery13.jpg" alt="" />
                    El editor de publicaciones de Publii se basa en el editor TinyMCE y le permite agregar algunas modificaciones según el tema&hellip;
                ]]>
            </summary>
        <content type="html">
            <![CDATA[
                    <p><img src="https://gabrielgenri.github.io/ProyectoWebs/media/posts/66/gallery13.jpg" class="type:primaryImage" alt="" /></p>
                <header>
<p class="post__title"><span style="color: var(--text-primary-color); font-family: var(--editor-font-family); font-size: inherit; font-weight: var(--font-weight-normal);">El editor de publicaciones de Publii se basa en el editor </span><a href="https://www.tiny.cloud/" target="_blank" rel="nofollow noopener noreferrer" style="font-family: var(--editor-font-family); font-size: inherit; font-weight: var(--font-weight-normal);">TinyMCE</a><span style="color: var(--text-primary-color); font-family: var(--editor-font-family); font-size: inherit; font-weight: var(--font-weight-normal);"> y le permite agregar algunas modificaciones según el tema utilizado o anulaciones de configuración.</span></p>
</header>
<div class="post__entry">
<h2 id="customposteditorcssstyles">Estilos CSS del editor de publicaciones personalizado</h2>
<p>Para brindar la mejor experiencia a los usuarios del tema, los desarrolladores del tema pueden querer agregar estilos CSS personalizados al editor de publicaciones. Si desea agregar estilos CSS personalizados, simplemente cree un </p>
<div>
<div><strong>El archivo assets/css/editor.css</strong> de tu tema. Ese archivo se cargará después del archivo CSS del editor de publicaciones predeterminado, por lo que podrás anular cualquier regla CSS predeterminada del editor de publicaciones.</div>
</div>
<h2 id="changingposteditordefaultconfiguration">Cambiar la configuración predeterminada del editor de publicaciones</h2>
<p>Siempre intentamos crear las mejores soluciones para la mayoría de los usuarios de Publii, pero entendemos que el editor de publicaciones es una herramienta compleja y que las necesidades de los usuarios pueden ser muy diferentes. Por eso, permitimos que los usuarios anulen la configuración predeterminada de TinyMCE mediante <a href="https://getpublii.com/dev/how-to-add-custom-config-or-js-for-post-editor/" target="_blank" rel="nofollow noopener noreferrer">un archivo de configuración personalizado o scripts JS personalizados</a> . </p>
<h2 id="customformats">Formatos personalizados</h2>
<p>Los desarrolladores de temas pueden agregar formatos personalizados que les permiten crear estructuras HTML personalizadas que se pueden insertar fácilmente en el editor de publicaciones. Estos formatos están disponibles en la lista desplegable "Formatos" de la interfaz de usuario del editor de publicaciones y también en la barra de herramientas en línea del editor de publicaciones en la lista desplegable "Seleccionar estilo".</p>
<p>Para agregar formatos personalizados a su tema, simplemente cree en el archivo config.json del tema un campo llamado "customElements".</p>
<p>Ejemplo de campo customElements que crea cuatro formatos personalizados: "Información", "Resaltado", "Éxito" y "Letra capital": </p>
<div class="code-toolbar">
<pre class="language-json" tabindex="0"><code>"customElements": [
    {
        "label": "Info",
        "cssClasses": "msg msg--info",
        "selector": "p"
    },
    {
        "label": "Highlight",
        "cssClasses": "msg msg--highlight ",
        "selector": "p"
    },
    {
        "label": "Success",
        "cssClasses": "msg msg--success",
        "selector": "p"
    },
    {
        "label": "Drop cap",
        "cssClasses": "dropcap",
        "selector": "p"
    }
] </code></pre>
<div class="toolbar">
<div class="toolbar-item"><a>Copiar</a></div>
</div>
</div>
<p>Como puede ver, cada elemento de formato personalizado está representado por un objeto que contiene tres campos:</p>
<ul>
<li><strong>etiqueta</strong> : es un nombre de formato que se muestra en las listas desplegables en el editor de publicaciones,</li>
<li><strong>cssClasses</strong> : es una lista de clases CSS utilizadas en el elemento inyectado; puede aplicarles estilo en el archivo editor.css personalizado descrito anteriormente.</li>
<li><strong>selector</strong> : es un nombre de etiqueta utilizado para envolver el contenido del formato personalizado.</li>
</ul>
<p>También es posible limitar la visibilidad de los formatos personalizados a editores específicos. </p>
<p>Publii utiliza el editor TinyMCE en dos lugares: en el editor de publicaciones y en la configuración del tema. Utiliza dos campos adicionales para las definiciones de formatos personalizados:</p>
<ul>
<li><strong>postEditor</strong> : si es verdadero, permitirá que el formato personalizado se muestre en el editor de publicaciones.</li>
<li><strong>themeSettings</strong> : si es verdadero, permitirá que el formato personalizado se muestre en los editores WYSIWYG de configuración del tema.</li>
</ul>
<p>Puedes especificar dónde se mostrarán:</p>
<div class="code-toolbar">
<pre class="language-json" tabindex="0"><code>"customElements": [
    {
        "label": "Info", 
        "cssClasses": "msg msg--info",
        "selector": "p",
        "postEditor": true, // will display under post editor
        "themeSettings": false // won't display under theme settings
    },
    {
        "label": "Highlight",
        "cssClasses": "msg msg--highlight ",
        "selector": "p",
        "postEditor": false, // won't display under post editor
        "themeSettings": true // will display under theme settings
    },
    {
        "label": "Success",
        "cssClasses": "msg msg--success",
        "selector": "p",
        "postEditor": false // won't display under post editor and theme settings
    },
    {
        "label": "Drop cap",
        "cssClasses": "dropcap",
        "selector": "p",
        "themeSettings": true // will display under post editor and theme settings as postEditor when not exists is treated as true
    }
]</code></pre>
<div class="toolbar">
<div class="toolbar-item"><a>Copiar</a></div>
</div>
</div>
<p>El valor predeterminado para el campo <strong>postEditor</strong> es <strong>true</strong> . Para el campo <strong>themeSettings</strong> , el valor predeterminado es <strong>false</strong> . Esto significa que los formatos personalizados sin estos valores definidos se mostrarán solo en el editor de publicaciones.</p>
</div>
            ]]>
        </content>
    </entry>
    <entry>
        <title>Creación de parciales personalizados</title>
        <author>
            <name>Gabriel Genri</name>
        </author>
        <link href="https://gabrielgenri.github.io/ProyectoWebs/creacion-de-parciales-personalizados.html"/>
        <id>https://gabrielgenri.github.io/ProyectoWebs/creacion-de-parciales-personalizados.html</id>
        <media:content url="https://gabrielgenri.github.io/ProyectoWebs/media/posts/65/daniela-diaz-u0lqnabx2he-unsplash.jpg" medium="image" />
            <category term="Publii"/>

        <updated>2024-12-06T21:19:18-03:00</updated>
            <summary>
                <![CDATA[
                        <img src="https://gabrielgenri.github.io/ProyectoWebs/media/posts/65/daniela-diaz-u0lqnabx2he-unsplash.jpg" alt="" />
                    Introducción - parciales Los parciales son fragmentos comunes de su sitio web que se colocan en archivos separados para facilitar&hellip;
                ]]>
            </summary>
        <content type="html">
            <![CDATA[
                    <p><img src="https://gabrielgenri.github.io/ProyectoWebs/media/posts/65/daniela-diaz-u0lqnabx2he-unsplash.jpg" class="type:primaryImage" alt="" /></p>
                <header><header>
<h1 class="post__title">Introducción - parciales</h1>
</header>
<div class="post__entry">
<p>Los parciales son fragmentos comunes de su sitio web que se colocan en archivos separados para facilitar su reutilización.</p>
<p>Se encuentran en el directorio <strong>de parciales</strong> de su tema.</p>
<p>Partial se carga utilizando la siguiente sintaxis:</p>
<div class="code-toolbar">
<pre class="language-handlebars" tabindex="0"><code>{{&gt; header}}
</code></pre>
<div class="toolbar">
<div class="toolbar-item"><a>Copiar</a></div>
</div>
</div>
<p>El código anterior carga el archivo <strong>partials/header.hbs</strong> .</p>
<p>Cada tema de Publii utiliza al menos 4 parciales:</p>
<ul>
<li><a href="https://getpublii.com/dev/headerhbs-partial/">header.hbs</a> - para el comienzo de cada página de su sitio web,</li>
<li><a href="https://getpublii.com/dev/footerhbs-partial/">footer.hbs</a> - para el final de cada página de su sitio web,</li>
<li><a href="https://getpublii.com/dev/menuhbs-partial/">menu.hbs</a> - para la estructura del menú,</li>
<li><a href="https://getpublii.com/dev/paginationhbs-partial/">pagination.hbs</a> - para la estructura de paginación</li>
</ul>
<p>Los <strong>archivos menu.hbs</strong> y <strong>pagination.hbs</strong> son opcionales para los temas tal como están definidos en Publii y estos archivos predeterminados se utilizan si estos archivos no existen en el tema.</p>
<p>También puedes definir <a href="https://getpublii.com/dev/creating-custom-partials/">tus parciales personalizados</a> : también deben colocarse en el directorio <strong>de parciales</strong> .</p>
</div>
<p class="post__title"><span style="color: var(--text-primary-color); font-family: var(--editor-font-family); font-size: inherit; font-weight: var(--font-weight-normal);">Los desarrolladores de temas pueden crear partes personalizadas en sus temas. Esto resulta útil si desea reutilizar su código en muchas vistas.</span></p>
</header>
<div class="post__entry">
<p>Para crear un elemento parcial personalizado, simplemente cree un archivo <strong>*.hbs</strong> en el directorio de elementos parciales del tema. El nombre del archivo parcial se utilizará en el código del tema.</p>
<p>Por ejemplo, si creas el archivo <strong>partials/cookiebar.hbs</strong>  en tu tema, podrás usarlo en otros archivos como:</p>
<div class="code-toolbar">
<pre class="language-handlebars" tabindex="0"><code>{{&gt; cookiebar}}</code></pre>
<div class="toolbar">
<div class="toolbar-item"><a>Copiar</a></div>
</div>
</div>
<p>También es posible crear parciales que tengan parámetros: esto es especialmente útil cuando tienes problemas con el contexto.</p>
<p>Analicemos la siguiente situación:</p>
<p>Tenemos el siguiente contexto para una vista:</p>
<div class="code-toolbar">
<pre class="language-json" tabindex="0"><code>{
    config: {
        optionValue: true 
    },
    pages: [
       { title: "Lorem" },
       { title: "Ipsum" }
    ]
}</code></pre>
<div class="toolbar">
<div class="toolbar-item"><a>Copiar</a></div>
</div>
</div>
<p>Y cargamos nuestro parcial en el archivo principal de la siguiente manera:</p>
<div class="code-toolbar">
<pre class="language-handlebars" tabindex="0"><code>{{#each pages}}
    {{&gt; page}}
{{/each}}</code></pre>
<div class="toolbar">
<div class="toolbar-item"><a>Copiar</a></div>
</div>
</div>
<p>Podemos acceder <code>{{title}}</code>en nuestro parcial, pero <code>{{config}}</code>no está disponible incluso si usamos <code>{{../config}}</code>.</p>
<p>La solución es crear un parámetro para nuestro parcial:</p>
<div class="code-toolbar">
<pre class="language-handlebars" tabindex="0"><code>{{#each pages}}
    {{&gt; page config=../config}}
{{/each}}</code></pre>
<div class="toolbar">
<div class="toolbar-item"><a>Copiar</a></div>
</div>
</div>
<p>En el ejemplo anterior podremos acceder <code>{{config}}</code>a nuestro parcial.</p>
<header>
<h1 class="post__title">pie de página.hbs parcial</h1>
</header>
<div class="post__entry">
<p>Esta parte se utiliza como final para los archivos *.hbs de su tema, en cada archivo que debe mostrar el pie de página de su sitio web:</p>
<div class="code-toolbar">
<pre class="language-handlebars" tabindex="0"><code>{{&gt; footer}}
</code></pre>
<div class="toolbar">
<div class="toolbar-item"><a>Copiar</a></div>
</div>
</div>
<header>
<h1 class="post__title">encabezado.hbs parcial</h1>
</header>
<div class="post__entry">
<p>Esta parte se utiliza como inicio de los archivos *.hbs de su tema en cada archivo que mostrará el encabezado de su sitio web:</p>
<div class="code-toolbar">
<pre class="language-handlebars" tabindex="0"><code>{{&gt; header}}
</code></pre>
<div class="toolbar">
<div class="toolbar-item"><a>Copiar</a></div>
</div>
</div>
<p>Con esta solución no necesitarás duplicar código ni aplicar cambios en varios archivos.</p>
<header>
<h1 class="post__title">menú.hbs parcial</h1>
</header>
<div class="post__entry">
<p>El menú parcial se utiliza para mostrar los menús en su sitio web.<br>Este parcial debe tener un parámetro con una estructura del menú que se va a mostrar:</p>
<div class="code-toolbar">
<pre class="line-numbers language-handlebars" tabindex="0"><code>{{&gt; menu menus.mainMenu}}</code></pre>
<div class="toolbar">
<div class="toolbar-item"><a>Copiar</a></div>
</div>
</div>
<p>El código anterior mostrará el menú principal del sitio web.</p>
<p>No has incluido partials/menu.hbs en tu tema. En este caso, Publii cargará el siguiente archivo menu.hbs predeterminado:</p>
<div class="code-toolbar">
<pre class="line-numbers language-handlebars" tabindex="0"><code>{{#unless level}}
&lt;nav&gt;
{{/unless}}
    &lt;ul{{#if level}} class="submenu submenu-level-{{level}}"{{else}} class="menu menu-level-1"{{/if}}&gt;
        {{#each items}}
            &lt;li{{menuItemClasses}}&gt;
            {{#if link}}
            &lt;a href="{{menuUrl}}"{{#if title}} title="{{title}}"{{/if}}{{#if target}} target="{{target}}"{{/if}}{{#if rel}} rel="{{rel}}"{{/if}}&gt;{{label}}&lt;/a&gt;
            {{else}}
            &lt;span{{#if title}} title="{{title}}"{{/if}}&gt;{{label}}&lt;/span&gt;
            {{/if}}

            {{#if items}}
                {{&gt; menu}}
            {{/if}}
        &lt;/li&gt;
        {{/each}}
    &lt;/ul&gt;
{{#unless level}}
&lt;/nav&gt;
{{/unless}}
</code></pre>
<div class="toolbar">
<div class="toolbar-item"><a>Copiar</a></div>
</div>
</div>
</div>
<footer>
<div class="post__footer-top">
<div class="post__meta"> </div>
<div><header>
<h1 class="post__title">paginacion.hbs parcial</h1>
</header>
<div class="post__entry">
<p>La paginación parcial es responsable de representar los enlaces de paginación en la página de inicio de su sitio web, las páginas de etiquetas y las páginas de autor:</p>
<div class="code-toolbar">
<pre class="language-handlebars" tabindex="0"><code>{{&gt; pagination}}
</code></pre>
<div class="toolbar">
<div class="toolbar-item"><a>Copiar</a></div>
</div>
</div>
<p>Si no ha incluido un <strong>partials/pagination.hbs</strong> en su tema, Publii cargará el siguiente archivo <strong>pagination.hbs predeterminado:</strong></p>
<div class="code-toolbar">
<pre class="language-handlebars" tabindex="0"><code>{{#if @pagination}}
    &lt;ul&gt;
        {{#if @pagination.previousPage}}
            &lt;li&gt;
                &lt;a href="{{@pagination.previousPageUrl}}"&gt;PREV&lt;/a&gt;
            &lt;/li&gt;
        {{/if}}

        {{#each @pagination.pages}}
            &lt;li&gt;
                {{#isCurrentPage @pagination.currentPage this}}
                    &lt;strong&gt;
                        {{this}}
                    &lt;/strong&gt;
                {{else}}
                    &lt;a href="{{pageUrl @pagination.context this}}"&gt;
                        {{this}}
                    &lt;/a&gt;
                {{/isCurrentPage}}
            &lt;/li&gt;
        {{/each}}

        {{#if @pagination.nextPage}}
            &lt;li&gt;
                &lt;a href="{{@pagination.nextPageUrl}}"&gt;NEXT&lt;/a&gt;
            &lt;/li&gt;
        {{/if}}
    &lt;/ul&gt;

    &lt;small&gt;
        Page {{@pagination.currentPage}} of {{@pagination.totalPages}}
    &lt;/small&gt;
{{/if}}
</code></pre>
<div class="toolbar">
<div class="toolbar-item"><a>Copiar</a></div>
</div>
</div>
</div>
<footer>
<div class="post__footer-top">
<div class="post__meta"> </div>
<div> </div>
</div>
</footer></div>
<div> </div>
</div>
</footer></div>
<p> </p>
</div>
</div>
            ]]>
        </content>
    </entry>
    <entry>
        <title>Introducción - etiquetas</title>
        <author>
            <name>Gabriel Genri</name>
        </author>
        <link href="https://gabrielgenri.github.io/ProyectoWebs/introduccion-etiquetas.html"/>
        <id>https://gabrielgenri.github.io/ProyectoWebs/introduccion-etiquetas.html</id>
            <category term="Publii"/>

        <updated>2024-12-06T21:03:48-03:00</updated>
            <summary>
                <![CDATA[
                    Cada tipo de archivo de plantilla *.hbs disponible tiene acceso a una lista específica de etiquetas Handlebars. Los hemos dividido en&hellip;
                ]]>
            </summary>
        <content type="html">
            <![CDATA[
                <header>
<p class="post__title"><span style="color: var(--text-primary-color); font-family: var(--editor-font-family); font-size: inherit; font-weight: var(--font-weight-normal);">Cada tipo de archivo de plantilla </span><strong style="font-family: var(--editor-font-family); font-size: inherit;">*.hbs</strong><span style="color: var(--text-primary-color); font-family: var(--editor-font-family); font-size: inherit; font-weight: var(--font-weight-normal);"> disponible tiene acceso a una lista específica de etiquetas Handlebars.</span></p>
</header>
<div class="post__entry">
<p>Los hemos dividido en dos grupos: etiquetas relacionadas con plantillas y etiquetas comunes.</p>
<p>Las etiquetas relacionadas con la plantilla solo están disponibles en un archivo de plantilla específico cuando las etiquetas comunes están disponibles en el mismo formato para otras plantillas.</p>
<p>Publii utiliza algunos archivos de plantilla Handlebars para representar su sitio web:</p>
<ul>
<li><a href="https://getpublii.com/dev/homepage-tags/">index.hbs</a> - para la página de inicio y su paginación,</li>
<li><a href="https://getpublii.com/dev/post-page-tags/">post.hbs</a> - para páginas de publicaciones individuales,</li>
<li><a href="https://getpublii.com/dev/page-template-tags/">page.hbs</a> - para páginas individuales,</li>
<li><a href="https://getpublii.com/dev/tag-page-tags/">tag.hbs</a> - para listar publicaciones etiquetadas y su paginación,</li>
<li><a href="https://getpublii.com/dev/tags-page-tags/">tags.hbs</a> - para lista de etiquetas,</li>
<li><a href="https://getpublii.com/dev/author-page-tags/">author.hbs</a> - para listar las publicaciones del autor y su paginación</li>
<li><a href="https://getpublii.com/dev/feed-tags/">feed-xml.hbs y feed-json.hbs</a> : para la salida de archivos feed.xml y feed.json,</li>
<li><a href="https://getpublii.com/dev/search-page-tags/">search.hbs </a><em>(opcional)</em> - para la página de búsqueda,</li>
<li><a href="https://getpublii.com/dev/404-error-page-tags/">404.hbs </a><em>(opcional)</em> - para la página de error 404</li>
</ul>
<p>Además, para las publicaciones, las etiquetas y las páginas de autores, puedes crear y usar plantillas. En este caso, los nombres de los archivos contendrán un slug relacionado con la plantilla específica. Puedes leer más sobre esto <a href="https://getpublii.com/dev/how-to-create-custom-templates/">aquí</a> .</p>
<header>
<h1 class="post__title">Etiquetas de publicación</h1>
</header>
<div class="post__entry">
<p>Los elementos de la publicación representan publicaciones escritas en Publii:</p>
<ul>
<li><strong>{{id}}</strong> - ID de la publicación</li>
<li><strong>{{title}}</strong> - título de la publicación</li>
<li><strong>{{featuredImage}}</strong> - <a href="https://getpublii.com/dev/featured-image-tags/">elemento de imagen destacado</a></li>
<li><strong>{{tags}}</strong> - matriz de <a href="https://getpublii.com/dev/tag-tags/">elementos de etiqueta</a></li>
<li><strong>{{hiddenTags}}</strong> - matriz de <a href="https://getpublii.com/dev/tag-tags/">elementos de etiqueta</a> que están marcados como ocultos</li>
<li><strong>{{author}}</strong> - <a href="https://getpublii.com/dev/author-tags/">autor del artículo</a></li>
<li><strong>{{slug}}</strong> - slug de publicación utilizado en la URL</li>
<li><strong>{{url}}</strong> - URL de la página de publicación</li>
<li><strong>{{text}}</strong> - publicar texto completo</li>
<li><strong>{{excerpt}}</strong> - texto del extracto de la publicación</li>
<li><strong>{{createdAt}}</strong> - fecha de creación de la publicación</li>
<li><strong>{{modifiedAt}}</strong> - fecha de modificación posterior</li>
<li><strong>{{status}}</strong> - estado de la publicación (oculta, borrador, destacada)</li>
<li><strong>{{template}}</strong> - nombre de la plantilla utilizada en la publicación</li>
<li><strong>{{isFeatured}}</strong> - verdadero si la publicación está destacada</li>
<li><strong>{{isHidden}}</strong> - verdadero si la publicación está oculta</li>
<li><strong>{{hasGallery}}</strong> - verdadero si la publicación contiene una galería</li>
<li><strong>{{hasCustomExcerpt}}</strong> : verdadero si la publicación contiene un contenido de extracto personalizado</li>
<li><strong>{{mainTag}}</strong> : elemento <a href="https://getpublii.com/dev/tag-tags/" target="_blank" rel="noopener noreferrer">de etiqueta</a> seleccionado como etiqueta principal de una publicación específica. Si no hay una etiqueta principal, este campo devuelve la primera etiqueta (usando orden alfabético). Este elemento estará vacío solo si la publicación no tiene etiquetas</li>
<li><strong>{{postViewConfig}}</strong> - objeto con configuración adicional relacionada con la vista de publicación (si está disponible en el tema)</li>
</ul>
<header>
<h1 class="post__title">Etiquetas de página</h1>
</header>
<div class="post__entry">
<p>El elemento de página representa páginas creadas en Publii:</p>
<ul>
<li><strong>{{id}}</strong> - ID de la página</li>
<li><strong>{{title}}</strong> - título de la página</li>
<li><strong>{{featuredImage}}</strong> - <a href="https://getpublii.com/dev/featured-image-tags/">elemento de imagen destacado</a></li>
<li><strong>{{author}}</strong> - <a href="https://getpublii.com/dev/author-tags/">elemento del autor de la página</a></li>
<li><strong>{{slug}}</strong> - slug de página utilizado en la URL</li>
<li><strong>{{url}}</strong> - URL de la página</li>
<li><strong>{{text}}</strong> - texto completo de la página</li>
<li><strong>{{excerpt}}</strong> - texto de un extracto de la página</li>
<li><strong>{{createdAt}}</strong> - fecha de creación de la página</li>
<li><strong>{{modifiedAt}}</strong> - fecha de modificación de la página</li>
<li><strong>{{status}}</strong> - estado de la página (borrador)</li>
<li><strong>{{template}}</strong> - nombre de la plantilla utilizada en la página</li>
<li><strong>{{hasGallery}}</strong> - verdadero si la página contiene una galería</li>
<li><strong>{{hasCustomExcerpt}}</strong> : verdadero si la página contiene un contenido de extracto personalizado</li>
<li><strong>{{pageViewConfig}}</strong> : objeto con configuración adicional relacionada con la vista de página (si está disponible en el tema)</li>
</ul>
<header>
<h1 class="post__title">Etiquetas de etiquetas</h1>
</header>
<div class="post__entry">
<p>El elemento de etiqueta representa las etiquetas conectadas con las publicaciones:</p>
<ul>
<li><strong>{{id}}</strong> - ID de etiqueta</li>
<li><strong>{{name}}</strong> - nombre de la etiqueta</li>
<li><strong>{{featuredImage}}</strong> - <a href="https://getpublii.com/dev/featured-image-tags/">elemento de imagen destacado</a></li>
<li><strong>{{slug}}</strong> - etiqueta slug utilizada en la URL</li>
<li><strong>{{{description}}}</strong> - descripción de la etiqueta</li>
<li><strong>{{additionalData}}</strong> : datos adicionales sobre la etiqueta como objeto JSON (plantilla, meta título, meta descripción, etc.)</li>
<li><strong>{{postsNumber}}</strong> - número de publicaciones relacionadas con la etiqueta</li>
<li><strong>{{url}}</strong> - URL de la página de la etiqueta</li>
</ul>
<header>
<h1 class="post__title">Etiquetas de autor</h1>
</header>
<div class="post__entry">
<p>El elemento de autor representa datos relacionados con el autor de la publicación:</p>
<ul>
<li><strong>{{id}}</strong> - ID del autor</li>
<li><strong>{{name}}</strong> - nombre del autor</li>
<li><strong>{{username}}</strong> - nombre de usuario del autor</li>
<li><strong>{{featuredImage}}</strong> - <a href="https://getpublii.com/dev/featured-image-tags/">elemento de imagen destacado</a></li>
<li><strong>{{avatar}}</strong> - URL del avatar del autor</li>
<li><strong>{{avatarImage}}</strong> - datos del avatar del autor
<ul>
<li><strong>{{alt}}</strong> - texto alternativo del avatar (nombre del autor)</li>
<li><strong>{{height}}</strong> - altura del avatar en píxeles</li>
<li><strong>{{url}}</strong> - URL de la imagen del avatar</li>
<li><strong>{{width}}</strong> - ancho del avatar en píxeles</li>
</ul>
</li>
<li><strong>{{email}}</strong> - correo electrónico del autor</li>
<li><strong>{{{description}}}</strong> - descripción del autor</li>
<li><strong>{{postsNumber}}</strong> - número de publicaciones escritas por el autor</li>
<li><strong>{{url}}</strong> - URL de la página del autor</li>
</ul>
<header>
<h1 class="post__title">Etiquetas de imágenes destacadas</h1>
</header>
<div class="post__entry">
<p>El elemento de imagen destacada representa datos relacionados con las imágenes destacadas de la publicación:</p>
<ul>
<li><strong>{{id}}</strong> - ID de imagen destacada</li>
<li><strong>{{url}}</strong> - URL de la imagen destacada</li>
<li><strong>{{urlDIMENSION_NAME}}</strong> - URL de la versión redimensionada (especificada por la variable <em>DIMENSION_NAME , por ejemplo, </em><strong>urlLarge</strong> )</li>
<li><strong>{{alt}}</strong> - texto alternativo de la imagen destacada</li>
<li><strong>{{caption}}</strong> - texto del título de la imagen destacada</li>
<li><strong>{{credits}}</strong> - texto de créditos de la imagen destacada</li>
<li><strong>{{height}}</strong> - altura de la imagen destacada en píxeles</li>
<li><strong>{{width}}</strong> - ancho de la imagen destacada en píxeles</li>
<li><strong>{{srcset}}</strong> - valor del atributo <strong>srcset de la imagen destacada</strong></li>
<li><strong>{{sizes}}</strong> - valor del atributo de <strong>tamaños de imágenes destacadas</strong></li>
</ul>
<header>
<h1 class="post__title">Etiquetas de la página de inicio</h1>
</header>
<div class="post__entry">
<p>A continuación encontrará una lista de todas las etiquetas de manillar disponibles en el archivo <strong>index.hbs</strong> .</p>
<h3 id="templatespecifictags">Etiquetas específicas de la plantilla</h3>
<ul>
<li><strong>{{#posts}}</strong> - matriz de los últimos <a href="https://getpublii.com/dev/post-tags/">elementos de la publicación</a></li>
</ul>
<h3 id="commontags">Etiquetas comunes</h3>
<ul>
<li><strong>{{title}}</strong> - título de la página</li>
<li><strong>{{metaTitleRaw}}</strong> - metatítulo en formato original</li>
<li><strong>{{metaDescriptionRaw}}</strong> - meta descripción en formato original</li>
<li><strong>{{metaRobotsRaw}}</strong> : valor de los meta robots en formato sin procesar</li>
<li><strong>{{#featuredPosts}}</strong> - matriz de <a href="https://getpublii.com/dev/post-tags/">elementos de publicaciones destacadas</a></li>
<li><strong>{{hiddenPosts}}</strong> - matriz de <a href="https://getpublii.com/dev/post-tags/">elementos de publicaciones ocultas</a></li>
<li><strong>{{pages}}</strong> - matriz de <a href="https://getpublii.com/dev/page-tags/">elementos de página</a></li>
<li><strong>{{#tags}}</strong> - matriz de todos <a href="https://getpublii.com/dev/tag-tags/">los elementos de etiqueta</a> disponibles en el sitio web</li>
<li><strong>{{#siteOwner}}</strong> - información sobre el autor principal como <a href="https://getpublii.com/dev/author-tags/">autor del artículo</a></li>
<li><strong>{{#authors}}</strong> - matriz de todos <a href="https://getpublii.com/dev/author-tags/">los elementos de autor</a> en el sitio web (si está habilitada la visualización de autores sin publicaciones, también contendrá autores sin publicaciones)</li>
<li><strong>{{menus}}</strong> - matriz de menús asignados (la clave es el nombre de una posición del menú)</li>
<li><strong>{{unassignedMenus}}</strong> - matriz de menús no asignados (la clave es un fragmento del nombre del menú)</li>
</ul>
<header>
<h1 class="post__title">Etiquetas de la página de publicación</h1>
</header>
<div class="post__entry">
<p>A continuación encontrará una lista de todas las etiquetas de manillar disponibles en los archivos <strong>post.hbs</strong> y <strong>post-TEMPLATE_NAME.hbs</strong>  .</p>
<h3 id="templatespecifictags">Etiquetas específicas de la plantilla</h3>
<ul>
<li><strong>{{#post}} - </strong><a href="https://getpublii.com/dev/post-tags/">elemento de publicación</a> mostrado<a href="https://getpublii.com/dev/post-tags/"></a></li>
<li><strong>{{#nextPost}}</strong> - <a href="https://getpublii.com/dev/post-tags/">el elemento de publicación</a> está disponible solo en las publicaciones que no están ocultas</li>
<li><strong>{{#nextSimilarPost}}</strong> : <a href="https://getpublii.com/dev/post-tags/">el elemento de publicación</a> está disponible solo en las publicaciones que no están ocultas y están en las mismas etiquetas</li>
<li><strong>{{#previousPost}}</strong> - <a href="https://getpublii.com/dev/post-tags/">el elemento de publicación</a> está disponible solo en las publicaciones que no están ocultas</li>
<li><strong>{{#previousSimilarPost}}</strong> : <a href="https://getpublii.com/dev/post-tags/">el elemento de publicación</a> está disponible solo en las publicaciones que no están ocultas y están en las mismas etiquetas</li>
<li><strong>{{#relatedPosts}}</strong> - matriz de <a href="https://getpublii.com/dev/post-tags/">elementos de publicaciones</a> con un título similar o de las mismas etiquetas</li>
</ul>
<h3 id="commontags">Etiquetas comunes</h3>
<ul>
<li><strong>{{title}}</strong> - título de la página</li>
<li><strong>{{metaTitleRaw}}</strong> - metatítulo en formato original</li>
<li><strong>{{metaDescriptionRaw}}</strong> - meta descripción en formato original</li>
<li><strong>{{metaRobotsRaw}}</strong> : valor de los meta robots en formato sin procesar</li>
<li><strong>{{canonicalUrl}}</strong> - URL canónica para la página de publicación</li>
<li><strong>{{#featuredPosts}}</strong> - matriz de <a href="https://getpublii.com/dev/post-tags/">elementos de publicaciones destacadas</a></li>
<li><strong>{{hiddenPosts}}</strong> - matriz de <a href="https://getpublii.com/dev/post-tags/">elementos de publicaciones ocultas</a></li>
<li><strong>{{pages}}</strong> - matriz de <a href="https://getpublii.com/dev/page-tags/">elementos de página</a></li>
<li><strong>{{#tags}}</strong> - matriz de todos <a href="https://getpublii.com/dev/tag-tags/">los elementos de etiqueta</a> disponibles en el sitio web</li>
<li><strong>{{#siteOwner}}</strong> - información sobre el autor principal como <a href="https://getpublii.com/dev/author-tags/">autor del artículo</a></li>
<li><strong>{{#authors}}</strong> - matriz de todos <a href="https://getpublii.com/dev/author-tags/">los elementos de autor</a> en el sitio web (si está habilitada la visualización de autores sin publicaciones, también contendrá autores sin publicaciones)</li>
<li><strong>{{menus}}</strong> - matriz de menús asignados (la clave es el nombre de una posición del menú)</li>
<li><strong>{{unassignedMenus}}</strong> - matriz de menús no asignados (la clave es un fragmento del nombre del menú)</li>
</ul>
<header>
<h1 class="post__title">Etiquetas de plantilla de página</h1>
</header>
<div class="post__entry">
<p>A continuación encontrará una lista de todas las etiquetas de manillar disponibles en los archivos <strong>page.hbs</strong> y <strong>page-TEMPLATE_NAME.hbs</strong>  .</p>
<h3 id="templatespecifictags">Etiquetas específicas de la plantilla</h3>
<ul>
<li><strong>{{#page}} - </strong><a href="https://getpublii.com/dev/page-tags/">elemento de la página</a> mostrada<a href="https://getpublii.com/dev/page-tags/"></a></li>
</ul>
<h3 id="commontags">Etiquetas comunes</h3>
<ul>
<li><strong>{{title}}</strong> - título de la página</li>
<li><strong>{{metaTitleRaw}}</strong> - metatítulo en formato original</li>
<li><strong>{{metaDescriptionRaw}}</strong> - meta descripción en formato original</li>
<li><strong>{{metaRobotsRaw}}</strong> : valor de los meta robots en formato sin procesar</li>
<li><strong>{{canonicalUrl}}</strong> - URL canónica para la página de publicación</li>
<li><strong>{{#featuredPosts}}</strong> - matriz de <a href="https://getpublii.com/dev/post-tags/">elementos de publicaciones destacadas</a></li>
<li><strong>{{hiddenPosts}}</strong> - matriz de <a href="https://getpublii.com/dev/post-tags/">elementos de publicaciones ocultas</a></li>
<li><strong>{{#tags}}</strong> - matriz de todos <a href="https://getpublii.com/dev/tag-tags/">los elementos de etiqueta</a> disponibles en el sitio web</li>
<li><strong>{{#siteOwner}}</strong> - información sobre el autor principal como <a href="https://getpublii.com/dev/author-tags/">autor del artículo</a></li>
<li><strong>{{#authors}}</strong> - matriz de todos <a href="https://getpublii.com/dev/author-tags/">los elementos de autor</a> en el sitio web (si está habilitada la visualización de autores sin publicaciones, también contendrá autores sin publicaciones)</li>
<li><strong>{{menus}}</strong> - matriz de menús asignados (la clave es el nombre de una posición del menú)</li>
<li><strong>{{unassignedMenus}}</strong> - matriz de menús no asignados (la clave es un fragmento del nombre del menú)</li>
</ul>
<header>
<h1 class="post__title">Etiquetas de la página de etiquetas</h1>
</header>
<div class="post__entry">
<p>A continuación encontrará una lista de todas las etiquetas de manillar disponibles en los archivos <strong>tag.hbs</strong> y <strong>tag-TEMPLATE_NAME.hbs</strong> .</p>
<h3 id="templatespecifictags">Etiquetas específicas de la plantilla</h3>
<ul>
<li><strong>{{#tag}}</strong> - <a href="https://getpublii.com/dev/tag-tags/">elemento de etiqueta mostrado</a></li>
<li><strong>{{#posts}}</strong> - matriz de <a href="https://getpublii.com/dev/post-tags/">elementos de la publicación</a> conectados con la etiqueta que se muestra actualmente</li>
</ul>
<h3 id="commontags">Etiquetas comunes</h3>
<ul>
<li><strong>{{title}}</strong> - título de la página</li>
<li><strong>{{metaTitleRaw}}</strong> - metatítulo en formato original</li>
<li><strong>{{metaDescriptionRaw}}</strong> - meta descripción en formato original</li>
<li><strong>{{metaRobotsRaw}}</strong> : valor de los meta robots en formato sin procesar</li>
<li><strong>{{#featuredPosts}}</strong> - matriz de <a href="https://getpublii.com/dev/post-tags/">elementos de publicaciones destacadas</a></li>
<li><strong>{{hiddenPosts}}</strong> - matriz de <a href="https://getpublii.com/dev/post-tags/">elementos de publicaciones ocultas</a></li>
<li><strong>{{pages}}</strong> - matriz de <a href="https://getpublii.com/dev/page-tags/">elementos de página</a></li>
<li><strong>{{#tags}}</strong> - matriz de todos <a href="https://getpublii.com/dev/tag-tags/">los elementos de etiqueta</a> disponibles en el sitio web</li>
<li><strong>{{#siteOwner}}</strong> - información sobre el autor principal como <a href="https://getpublii.com/dev/author-tags/">autor del artículo</a></li>
<li><strong>{{#authors}}</strong> - matriz de todos <a href="https://getpublii.com/dev/author-tags/">los elementos de autor</a> en el sitio web (si está habilitada la visualización de autores sin publicaciones, también contendrá autores sin publicaciones)</li>
<li><strong>{{menus}}</strong> - matriz de menús asignados (la clave es el nombre de una posición del menú)</li>
<li><strong>{{unassignedMenus}}</strong> - matriz de menús no asignados (la clave es un fragmento del nombre del menú)</li>
</ul>
<header>
<h1 class="post__title">Etiquetas de la página Etiquetas</h1>
</header>
<div class="post__entry">
<p>A continuación, encontrará una lista de todas las etiquetas handlebars disponibles en el archivo <strong>tags.hbs</strong> que se utiliza para enumerar todas las etiquetas dentro de su sitio web. Recuerde que el archivo <strong>tags.hbs</strong> es opcional y se utilizará únicamente en los temas <a href="https://getpublii.com/dev/theme-supported-features/">que declaren su compatibilidad con él</a> .</p>
<h2 id="templatespecific-tags">Etiquetas específicas de la plantilla</h2>
<ul>
<li><strong>{{#tags}}</strong> - matriz de <a href="https://getpublii.com/dev/tag-tags/">elementos de etiqueta</a> disponibles en el sitio web</li>
<li><strong>{{tagsNumber}}</strong> - número total de etiquetas en la colección <strong>{{#tags}}</strong></li>
</ul>
<h2 id="common-tags">Etiquetas comunes</h2>
<ul>
<li><strong>{{title}}</strong> - título de la página</li>
<li><strong>{{metaTitleRaw}}</strong> - metatítulo en formato original</li>
<li><strong>{{metaDescriptionRaw}}</strong> - meta descripción en formato original</li>
<li><strong>{{metaRobotsRaw}}</strong> : valor de los meta robots en formato sin procesar</li>
<li><strong>{{#featuredPosts}}</strong> - matriz de <a href="https://getpublii.com/dev/post-tags/">elementos de publicaciones destacadas</a></li>
<li><strong>{{#hiddenPosts}}</strong> - matriz de <a href="https://getpublii.com/dev/post-tags/">elementos de publicaciones ocultas</a></li>
<li><strong>{{#tags}}</strong> - matriz de todos <a href="https://getpublii.com/dev/tag-tags/">los elementos de etiqueta</a> disponibles en el sitio web</li>
<li><strong>{{#siteOwner}}</strong> - información sobre el autor principal como <a href="https://getpublii.com/dev/author-tags/">autor del artículo</a></li>
<li><strong>{{#authors}}</strong> - matriz de todos <a href="https://getpublii.com/dev/author-tags/">los elementos de autor</a> en el sitio web (si está habilitada la visualización de autores sin publicaciones, también contendrá autores sin publicaciones)</li>
<li><strong>{{menus}}</strong> - matriz de menús asignados (la clave es el nombre de una posición del menú)</li>
<li><strong>{{unassignedMenus}}</strong> - matriz de menús no asignados (la clave es un fragmento del nombre del menú)</li>
</ul>
<header>
<h1 class="post__title">Etiquetas de la página del autor</h1>
</header>
<div class="post__entry">
<p>A continuación encontrará una lista de todas las etiquetas de manillar disponibles en los archivos <strong>author.hbs</strong> y <strong>author-TEMPLATE_NAME.hbs</strong> .</p>
<h3 id="templatespecifictags">Etiquetas específicas de la plantilla</h3>
<ul>
<li><strong>{{#author}}</strong> - <a href="https://getpublii.com/dev/author-tags/">elemento de autor que se muestra actualmente</a></li>
<li><strong>{{#posts}}</strong> - matriz de <a href="https://getpublii.com/dev/post-tags/">elementos de publicaciones</a> conectados con un autor actual</li>
</ul>
<h3 id="commontags">Etiquetas comunes</h3>
<ul>
<li><strong>{{title}}</strong> - título de la página</li>
<li><strong>{{metaTitleRaw}}</strong> - metatítulo en formato original</li>
<li><strong>{{metaDescriptionRaw}}</strong> - meta descripción en formato original</li>
<li><strong>{{metaRobotsRaw}}</strong> : valor de los meta robots en formato sin procesar</li>
<li><strong>{{#featuredPosts}}</strong> - matriz de <a href="https://getpublii.com/dev/post-tags/">elementos de publicaciones destacadas</a></li>
<li><strong>{{hiddenPosts}}</strong> - matriz de <a href="https://getpublii.com/dev/post-tags/">elementos de publicaciones ocultas</a></li>
<li><strong>{{pages}}</strong> - matriz de <a href="https://getpublii.com/dev/page-tags/">elementos de página</a></li>
<li><strong>{{#tags}}</strong> - matriz de todos <a href="https://getpublii.com/dev/tag-tags/">los elementos de etiqueta</a> disponibles en el sitio web</li>
<li><strong>{{#siteOwner}}</strong> - información sobre el autor principal como <a href="https://getpublii.com/dev/author-tags/">autor del artículo</a></li>
<li><strong>{{#authors}}</strong> - matriz de todos <a href="https://getpublii.com/dev/author-tags/">los elementos de autor</a> en el sitio web (si está habilitada la visualización de autores sin publicaciones, también contendrá autores sin publicaciones)</li>
<li><strong>{{menus}}</strong> - matriz de menús asignados (la clave es el nombre de una posición del menú)</li>
<li><strong>{{unassignedMenus}}</strong> - matriz de menús no asignados (la clave es un fragmento del nombre del menú)</li>
</ul>
<header>
<h1 class="post__title">Buscar etiquetas de la página</h1>
</header>
<div class="post__entry">
<p>A continuación encontrará una lista de todas las etiquetas de manillar disponibles en el archivo <strong>search.hbs .</strong></p>
<p class="msg msg--info">La página de búsqueda se genera solo si el indicador: " <em>createSearchPage" </em> está establecido en <strong>verdadero</strong> en el archivo <a href="https://getpublii.com/dev/how-to-configure-rendering-process-of-your-website/">config.json</a> (sección del renderizador).</p>
<h3 id="templatespecifictags">Etiquetas específicas de la plantilla</h3>
<p>Esta plantilla no utiliza ninguna etiqueta específica de plantilla.</p>
<h3 id="commontags">Etiquetas comunes</h3>
<ul>
<li><strong>{{title}}</strong> - título de la página</li>
<li><strong>{{metaTitleRaw}}</strong> - metatítulo en formato original</li>
<li><strong>{{metaDescriptionRaw}}</strong> - meta descripción en formato original</li>
<li><strong>{{metaRobotsRaw}}</strong> : valor de los meta robots en formato sin procesar</li>
<li><strong>{{#featuredPosts}}</strong> - matriz de <a href="https://getpublii.com/dev/post-tags/">elementos de publicaciones destacadas</a></li>
<li><strong>{{hiddenPosts}}</strong> - matriz de <a href="https://getpublii.com/dev/post-tags/">elementos de publicaciones ocultas</a></li>
<li><strong>{{pages}}</strong> - matriz de <a href="https://getpublii.com/dev/page-tags/">elementos de página</a></li>
<li><strong>{{#tags}}</strong> - matriz de todos <a href="https://getpublii.com/dev/tag-tags/">los elementos de etiqueta</a> disponibles en el sitio web</li>
<li><strong>{{#siteOwner}}</strong> - información sobre el autor principal como <a href="https://getpublii.com/dev/author-tags/">autor del artículo</a></li>
<li><strong>{{#authors}}</strong> - matriz de todos <a href="https://getpublii.com/dev/author-tags/">los elementos de autor</a> en el sitio web (si está habilitada la visualización de autores sin publicaciones, también contendrá autores sin publicaciones)</li>
<li><strong>{{menus}}</strong> - matriz de menús asignados (la clave es el nombre de una posición del menú)</li>
<li><strong>{{unassignedMenus}}</strong> - matriz de menús no asignados (la clave es un fragmento del nombre del menú)</li>
</ul>
<header>
<h1 class="post__title">Etiquetas de página de error 404</h1>
</header>
<div class="post__entry">
<p>A continuación encontrará una lista de todas las etiquetas de manillar disponibles en el archivo <strong>404.hbs</strong> .</p>
<p class="msg msg--info">La página de error 404 se genera solo si el indicador: " <em>create404page" </em> está establecido en <strong>verdadero</strong> en el archivo <a href="https://getpublii.com/dev/how-to-configure-rendering-process-of-your-website/">config.json</a> (sección del renderizador).</p>
<h3 id="templatespecifictags">Etiquetas específicas de la plantilla</h3>
<p>Esta plantilla no utiliza ninguna etiqueta específica de plantilla.</p>
<h3 id="commontags">Etiquetas comunes</h3>
<ul>
<li><strong>{{title}}</strong> - título de la página</li>
<li><strong>{{metaTitleRaw}}</strong> - metatítulo en formato original</li>
<li><strong>{{metaDescriptionRaw}}</strong> - meta descripción en formato original</li>
<li><strong>{{metaRobotsRaw}}</strong> : valor de los meta robots en formato sin procesar</li>
<li><strong>{{#featuredPosts}}</strong> - matriz de <a href="https://getpublii.com/dev/post-tags/">elementos de publicaciones destacadas</a></li>
<li><strong>{{hiddenPosts}}</strong> - matriz de <a href="https://getpublii.com/dev/post-tags/">elementos de publicaciones ocultas</a></li>
<li><strong>{{pages}}</strong> - matriz de <a href="https://getpublii.com/dev/page-tags/">elementos de página</a></li>
<li><strong>{{#tags}}</strong> - matriz de todos <a href="https://getpublii.com/dev/tag-tags/">los elementos de etiqueta</a> disponibles en el sitio web</li>
<li><strong>{{#siteOwner}}</strong> - información sobre el autor principal como <a href="https://getpublii.com/dev/author-tags/">autor del artículo</a></li>
<li><strong>{{#authors}}</strong> - matriz de todos <a href="https://getpublii.com/dev/author-tags/">los elementos de autor</a> en el sitio web (si está habilitada la visualización de autores sin publicaciones, también contendrá autores sin publicaciones)</li>
<li><strong>{{menus}}</strong> - matriz de menús asignados (la clave es el nombre de una posición del menú)</li>
<li><strong>{{unassignedMenus}}</strong> - matriz de menús no asignados (la clave es un fragmento del nombre del menú)</li>
</ul>
<header>
<h1 class="post__title">Etiquetas de feed</h1>
</header>
<div class="post__entry">
<p>A continuación encontrará una lista de todas las etiquetas de manillar disponibles para los archivos <strong>feed-xml.hbs</strong> y <strong>feed-json.hbs</strong></p>
<h3 id="templatespecifictags">Etiquetas específicas de la plantilla</h3>
<ul>
<li><strong>{{siteName}}</strong> - nombre del sitio web</li>
<li><strong>{{siteDomain}}</strong> - dominio del sitio web</li>
<li><strong>{{siteLastUpdate}}</strong> - fecha de la última actualización</li>
<li><strong>{{siteAuthor}}</strong> - nombre del autor principal</li>
<li><strong>{{#posts}}</strong> - lista de las publicaciones
<ul>
<li><strong>{{title}}</strong> - título de la publicación</li>
<li><strong>{{url}}</strong> - URL de la publicación </li>
<li><strong>{{excerpt}}</strong> - texto de introducción de la publicación</li>
<li><strong>{{text}}</strong> - publicar texto completo</li>
<li><strong>{{author}}</strong> - nombre del autor de la publicación</li>
<li><strong>{{modifiedAt}}</strong> - fecha de modificación posterior</li>
<li><strong>{{#categories}}</strong> - lista de categorías de publicaciones
<ul>
<li><strong>{{name}}</strong> - nombre de la categoría</li>
</ul>
</li>
<li><strong>{{thumbnail}}</strong> - URL de la miniatura de la publicación</li>
</ul>
</li>
</ul>
<h3 id="commontags">Etiquetas comunes</h3>
<p>Esta plantilla no utiliza ninguna etiqueta común.</p>
<header>
<h1 class="post__title">introducción - variables globales</h1>
</header>
<div class="post__entry">
<p>Durante la representación del sitio web, tiene acceso a algunas variables globales que almacenan objetos con datos útiles adicionales.</p>
<ul>
<li><a href="https://getpublii.com/dev/config-global-variable/">@config</a> : le brinda acceso a la configuración de temas y publicaciones.</li>
<li><a href="https://getpublii.com/dev/customcommentscode-global-variable/">@customCommentsCode</a> : le permite admitir <a href="https://marketplace.getpublii.com/plugins/">complementos de comentarios de Publii</a> .</li>
<li><a href="https://getpublii.com/dev/customsearchinput-global-variable/">@customSearchInput</a> y <a href="https://getpublii.com/dev/customsearchcontent-global-variable/">@customSearchContent</a> : le permiten admitir <a href="https://marketplace.getpublii.com/plugins/">complementos de búsqueda de Publii</a></li>
<li><a href="https://getpublii.com/dev/customhtml-global-variable/">@customHTML</a> : le brinda acceso al código HTML personalizado desde la sección <strong>Herramientas -&gt; HTML personalizado</strong> .</li>
<li><a href="https://getpublii.com/dev/pagination-global-variable/">@pagination</a> : se puede utilizar para crear paginación en etiquetas, autores y página de inicio.</li>
<li><a href="https://getpublii.com/dev/renderer-global-variable/">@renderer</a> : contiene datos adicionales para el proceso de renderizado,</li>
<li><a href="https://getpublii.com/dev/utils-global-variable/">@utils</a> - contiene valores útiles adicionales,</li>
<li><a href="https://getpublii.com/dev/website-global-variable/">@website</a> : almacena información útil sobre su sitio</li>
</ul>
<header>
<h1 class="post__title">Variable global @config</h1>
</header>
<div class="post__entry">
<p>Los valores de las opciones de tema están disponibles en la variable global <strong>@config</strong> . Hay tres grupos de configuraciones:</p>
<ul>
<li><strong>@config.basic.</strong> * - configuración básica del tema (la misma para todos los temas)</li>
<li><strong>@config.custom.</strong> * - configuraciones del tema definidas por el autor del tema,</li>
<li><strong>@config.site.*</strong> - configuración del sitio web definida en la pestaña "Configuración del sitio" en Publii,</li>
<li><strong>@config.post.</strong> * - configuración del tema de vista de publicación (disponible solo en las páginas de publicación individuales para temas que lo admiten)</li>
</ul>
<header>
<h1 class="post__title">Variable global @customHTML</h1>
</header>
<div class="post__entry">
<p>La variable global <strong>@customHTML</strong> contiene un objeto con código HTML personalizado definido por el autor del tema. Para crear áreas HTML personalizadas en su tema, debe agregar la sección customHTML en la sección de renderizador del archivo config.json del tema:</p>
<div class="code-toolbar">
<pre class="language-json" tabindex="0"><code>"renderer": {
    "renderRelatedPosts": false,
    "renderSimilarPosts": false,
    "renderPrevNextPosts": false,
    "createContentStructure": false,
    "customHTML": {
        "beforePost": "Before every post",
        "afterPost": "After every post"
    }
},</code></pre>
<div class="toolbar">
<div class="toolbar-item"><a>Copiar</a></div>
</div>
</div>
<p>El código anterior creará dos nuevas secciones HTML personalizadas: <strong>beforePost</strong> y <strong>afterPost</strong> ; están disponibles a través de las variables <strong>@customHTML.beforePost</strong> y <strong>@customHTML.afterPost</strong> .</p>
<p>El código HTML personalizado para estas secciones se puede definir en la sección <em>Herramientas -&gt; HTML personalizado</em> de Publii.</p>
<header>
<h1 class="post__title">Variable global @customCommentsCode</h1>
</header>
<div class="post__entry">
<p>Cuando desee agregar soporte para <a href="https://marketplace.getpublii.com/plugins/">complementos de comentarios de Publii</a> , es necesario agregar soporte para las características <code>customComments</code>menos <a href="https://getpublii.com/dev/theme-supported-features/">compatibles</a> del tema.</p>
<p>Para agregar soporte para complementos de comentarios, debe agregar el siguiente fragmento de código en el lugar donde deben mostrarse los comentarios:</p>
<div class="code-toolbar">
<pre class="line-numbers language-handlebars" tabindex="0"><code>{{{@customCommentsCode}}}</code></pre>
<div class="toolbar">
<div class="toolbar-item"><a>Copiar</a></div>
</div>
</div>
<p>Por ejemplo, nuestro <a href="https://marketplace.getpublii.com/themes/simple/">tema Simple</a> implementa esta función en el archivo <strong>post.hbs</strong> de la siguiente manera:</p>
<div class="code-toolbar">
<pre class="line-numbers language-handlebars" tabindex="0"><code>{{#if @config.post.displayComments}}
&lt;div class="post__comments"&gt;
    &lt;div class="wrapper"&gt;
        {{{@commentsCustomCode}}}
    &lt;/div&gt;
&lt;/div&gt;
{{/if}}</code></pre>
<div class="toolbar">
<div class="toolbar-item"><a>Copiar</a></div>
</div>
</div>
<p>Esto significa que los comentarios se muestran solo si están habilitados para la publicación determinada o globalmente en la configuración del tema (si la publicación usa un valor de configuración global).</p>
<header>
<h1 class="post__title">Variable global @customSearchContent</h1>
</header>
<div class="post__entry">
<p>Algunos de los <a href="https://marketplace.getpublii.com/plugins/">complementos de búsqueda de Publii</a>  pueden generar resultados de búsqueda como un área separada. Para gestionar correctamente esta función, debe implementar dos cambios en su tema:</p>
<h2 id="1-add-support-for-customsearch">1. Agregar soporte para búsqueda personalizada</h2>
<p>Simplemente agregue <code>customSearch</code>debajo de su tema la sección <a href="https://getpublii.com/dev/theme-supported-features/">Características compatibles</a> .</p>
<h2 id="2-implement-customsearchcontent-global-variable">2. Implementar la variable global @customSearchContent</h2>
<p>En la forma más sencilla, solo debes agregar el siguiente código en tu tema al archivo <strong>search.hbs</strong> :</p>
<div class="code-toolbar">
<pre class="line-numbers language-handlebars" tabindex="0"><code>{{{@customSearchContent}}}
</code></pre>
<div class="toolbar">
<div class="toolbar-item"><a>Copiar</a></div>
</div>
</div>
<p>Luego, los complementos que usan esta variable global mostrarán sus resultados de búsqueda.</p>
<header>
<h1 class="post__title">Variable global @customSearchInput</h1>
</header>
<div class="post__entry">
<p>Algunos de los <a href="https://marketplace.getpublii.com/plugins/">complementos de búsqueda de Publii</a>  generan un campo de entrada de búsqueda. Para gestionar correctamente esta función, debes implementar dos cambios en tu tema:</p>
<h2 id="1-add-support-for-customsearch">1. Agregar soporte para búsqueda personalizada</h2>
<p>Simplemente agregue <code>customSearch</code>debajo de su tema la sección <a href="https://getpublii.com/dev/theme-supported-features/">Características compatibles</a> .</p>
<h2 id="2-implement-customsearchinput-global-variable">2. Implementar la variable global @customSearchInput</h2>
<p>En la forma más sencilla solo debes agregar el siguiente código en tu tema:</p>
<div class="code-toolbar">
<pre class="line-numbers language-handlebars" tabindex="0"><code>{{{@customSearchInput}}}
</code></pre>
<div class="toolbar">
<div class="toolbar-item"><a>Copiar</a></div>
</div>
</div>
<p>Por ejemplo, nuestro <a href="https://marketplace.getpublii.com/themes/simple/">tema Simple</a> implementa esta función de la siguiente manera:</p>
<div class="code-toolbar">
<pre class="line-numbers language-handlebars" tabindex="0"><code>{{#if @config.custom.searchFeature}}
&lt;div class="search"&gt;
    &lt;div class="search__overlay js-search-overlay"&gt;
        &lt;div class="search__overlay-inner"&gt;
            {{{@customSearchInput}}} 
            &lt;button class="search__close js-search-close" aria-label="{{ translate 'search.close' }}"&gt;
                {{ translate 'search.close' }}
            &lt;/button&gt;
        &lt;/div&gt;
    &lt;/div&gt;
    &lt;button class="search__btn js-search-btn" aria-label="{{ translate 'search.search' }}"&gt;
        &lt;svg role="presentation" focusable="false"&gt;
            &lt;use xlink:href="{{@website.assetsUrl}}/svg/svg-map.svg#search"/&gt;
        &lt;/svg&gt;
    &lt;/button&gt;
&lt;/div&gt;
{{/if}}</code></pre>
<div class="toolbar">
<div class="toolbar-item"><a>Copiar</a></div>
</div>
</div>
<p>Utiliza una interfaz de usuario adicional que se puede manejar con algunos de los complementos de búsqueda.</p>
<header>
<h1 class="post__title">Variable global @pagination</h1>
</header>
<div class="post__entry">
<p>Las páginas de inicio, de etiquetas y de autor admiten la paginación. Se basa en algunas variables globales y ayudantes. Puede utilizar la paginación no solo para crear enlaces de paginación, sino también para un enlace con <code>rel="prev"</code>o <code>rel="next"</code>atributos.</p>
<ul>
<li><strong>@pagination</strong> : variable que se utiliza para detectar si la paginación está disponible en la vista específica. Si es falso, no hay paginación en la vista actual.</li>
<li><strong>@pagination.context</strong> - contexto de la paginación. Cadena vacía para la página de inicio, slug de etiqueta para las páginas de etiqueta, slug de autor para las páginas de autor,</li>
<li><strong>@pagination.pages</strong> - matriz con números para cada página disponible,</li>
<li><strong>@pagination.totalPosts</strong> - número total de publicaciones,</li>
<li><strong>@pagination.totalPages</strong> - número total de páginas de paginación,</li>
<li><strong>@pagination.currentPage</strong> - número de la página actual,</li>
<li><strong>@pagination.postsPerPage</strong> - número de publicaciones por página,</li>
<li><strong>@pagination.nextPage</strong> - número de la siguiente página (o falso si no existe),</li>
<li><strong>@pagination.previousPage</strong> - número de la página anterior (o falso si no existe),</li>
<li><strong>@pagination.nextPageUrl</strong> - URL a la siguiente página (o falso si no existe ninguna),</li>
<li><strong>@pagination.previousPageUrl</strong> - URL a la página anterior (o falso si no existe ninguna).</li>
</ul>
<p>Un ejemplo de paginación para motores de búsqueda con uso de las variables de paginación globales:</p>
<div class="code-toolbar">
<pre class="language-handlebars" tabindex="0"><code>{{#if @pagination}}
   {{#if @pagination.previousPage}}
   &lt;link rel="prev" href="{{@pagination.previousPageUrl}}"&gt;
   {{/if}}
   {{#if @pagination.nextPage}}
   &lt;link rel="next" href="{{@pagination.nextPageUrl}}"&gt;
   {{/if}}
{{/if}}
</code></pre>
<div class="toolbar">
<div class="toolbar-item"><a>Copiar</a></div>
</div>
</div>
<p>Un ejemplo de un enlace de paginación está disponible en <strong>Partials -&gt; pagination.hbs</strong></p>
<header>
<h1 class="post__title">Variable global @renderer</h1>
</header>
<div class="post__entry">
<p>El motor de renderizado ofrece variables globales adicionales que pueden ser útiles en algunos casos, por ejemplo, si desea mostrar algunas secciones solo en la primera o última página de los listados de publicaciones.</p>
<ul>
<li><strong>@renderer.isFirstPage</strong> : verdadero si la página mostrada es la primera página del listado, falso en caso contrario.</li>
<li><strong>@renderer.isLastPage</strong> : verdadero si la página mostrada es la última página del listado, falso en caso contrario.</li>
<li><strong>@renderer.previewMode</strong> : verdadero si la página se muestra en la vista previa</li>
<li><strong>@renderer.ampMode</strong> : verdadero si la página mostrada está en modo amplificador</li>
</ul>
<header>
<h1 class="post__title">@utils variable global</h1>
</header>
<div class="post__entry">
<p> La  variable global <strong>@utils</strong>  se ha creado para almacenar valores útiles. </p>
<p>En este momento <strong>@utils</strong> contiene solo dos campos:</p>
<p><strong>currentYear</strong> que se puede utilizar para crear pies de página que contendrán el valor del año adecuado después de la sincronización del sitio web:</p>
<div class="code-toolbar">
<pre class="language-handlebars" tabindex="0"><code>Copyright by X {{@utils.currentYear}}. All rights reserved.</code></pre>
<div class="toolbar">
<div class="toolbar-item"><a>Copiar</a></div>
</div>
</div>
<p><strong>buildDate</strong> : devuelve la marca de tiempo de compilación, que se puede utilizar para generar la fecha legible por humanos junto con el asistente <a href="https://getpublii.com/dev/date-helper/" target="_blank" rel="noopener noreferrer">de fecha</a> :</p>
<div class="code-toolbar">
<pre class="language-handlebars" tabindex="0"><code>{{date @utils.buildDate 'YYYY-MM-DD HH:mm'}}</code></pre>
<div class="toolbar">
<div class="toolbar-item"><a>Copiar</a></div>
</div>
</div>
</div>
<footer>
<div class="post__footer-top">
<div class="post__meta"> </div>
<div><header>
<h1 class="post__title">Variable global @website</h1>
</header>
<div class="post__entry">
<p>Cada sitio web contiene datos útiles bajo la variable global <strong>@website</strong> .</p>
<ul>
<li><strong>@website.url</strong> - URL del sitio (puede contener index.html al final en algunos casos, como durante la configuración del sitio web o en el modo de vista previa),</li>
<li><strong>@website.baseUrl</strong> - URL del sitio sin index.html al final</li>
<li><strong>@website.rootUrl</strong> - alias para <strong>@website.baseUrl</strong> ,</li>
<li><strong>@website.tagsUrl</strong> - URL de la página con todas las etiquetas,</li>
<li><strong>@website.searchUrl</strong> - URL para la página de búsqueda,</li>
<li><strong>@website.errorUrl</strong> - URL de la página de error,</li>
<li><strong>@website.assetsUrl</strong> : URL para el directorio de activos del tema (el directorio de activos se define en el archivo config.json del tema),</li>
<li><strong>@website.mediaFilesUrl</strong> - URL al directorio <strong>/media/files/</strong> ,</li>
<li><strong>@website.pageUrl</strong> - URL de la página mostrada actualmente,</li>
<li><strong>@website.name</strong> - nombre del sitio,</li>
<li><strong>@website.logo</strong> - logotipo del sitio (alias para <strong>@config.basic.logo</strong> ),</li>
<li><strong>@website.logoSize</strong> - objeto con el tamaño del logotipo en píxeles; puede acceder al ancho a través de <strong>@website.logoSize.width</strong> y a la altura a través de <strong>@website.logoSize.height</strong></li>
<li><strong>@website.lastUpdate</strong> : marca de tiempo de la última representación del sitio web,</li>
<li><strong>@website.contentStructure</strong> - objeto con la estructura del contenido del sitio web (explicado a continuación),</li>
<li><strong>@website.language</strong> : código de idioma del sitio web según la configuración del mismo. Se puede utilizar en los atributos <strong>lang .</strong></li>
<li><strong>@website.postsOrdering</strong> : orden de las publicaciones en los listados (valores devueltos: <strong>asc</strong> o <strong>desc</strong> ), se puede utilizar para el manejo adecuado del orden de paginación.</li>
</ul>
<h2 id="contentstructure">Estructura del contenido</h2>
<p>La variable global <strong>@website.contentStructure</strong> contiene el siguiente objeto:</p>
<div class="code-toolbar">
<pre class="language-json" tabindex="0"><code>{
   posts: [post item],
   pages: [page item],
   pagesStructure: {
      page ID:  [subpage ID1, subpage ID2 ...]
   },
   tags: [{
       tag item
       posts: [the same structure as in the posts above]
   }],
   authors: [{
       author item
       posts: [the same structure as in the posts above]
   }]
}  
</code></pre>
<div class="toolbar">
<div class="toolbar-item"><a>Copiar</a></div>
</div>
</div>
<p>Esto es útil si desea generar algunas partes de su sitio web automáticamente, como la estructura del menú principal, que se actualiza con nuevas publicaciones/etiquetas/autores.</p>
<p> </p>
</div>
</div>
</div>
</footer></div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<p> </p>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
            ]]>
        </content>
    </entry>
    <entry>
        <title>Anulaciones visuales CSS</title>
        <author>
            <name>Gabriel Genri</name>
        </author>
        <link href="https://gabrielgenri.github.io/ProyectoWebs/anulaciones-visuales-css.html"/>
        <id>https://gabrielgenri.github.io/ProyectoWebs/anulaciones-visuales-css.html</id>
            <category term="Publii"/>

        <updated>2024-12-06T21:02:00-03:00</updated>
            <summary>
                <![CDATA[
                    Casi todos los temas tienen opciones que no se pueden implementar con una simple adición de clase CSS, como opciones&hellip;
                ]]>
            </summary>
        <content type="html">
            <![CDATA[
                <header>
<p class="post__title"><span style="color: var(--text-primary-color); font-family: var(--editor-font-family); font-size: inherit; font-weight: var(--font-weight-normal);">Casi todos los temas tienen opciones que no se pueden implementar con una simple adición de clase CSS, como opciones de color que permiten al usuario seleccionar el color desde el selector de color.</span></p>
</header>
<div class="post__entry">
<p><span>Como usar el atributo de estilo no es una solución elegante, hemos creado una alternativa que le permite crear código CSS personalizado sobre la marcha durante el proceso de representación del sitio web.</span></p>
<p><span>Para ello, cree un archivo </span><strong><span>visual-override.js</span></strong><span> en el directorio de su tema y cree una función que se utilizará para generar código CSS adicional según los parámetros de opciones:</span></p>
<div class="code-toolbar">
<pre class="language-javascript" tabindex="0"><code>/*
 * Custom function used to generate the output of the override.css file
 */

var generateOverride = function(themeConfig, postConfig, commonConfig, pageConfig) {
    return `
        body {
            background: ${themeConfig.primaryColor};
            font-size: ${themeConfig.fontSize}px;
        }
    `;
};

module.exports = generateOverride;</code></pre>
<div class="toolbar">
<div class="toolbar-item"><a><span>Copiar</span></a></div>
</div>
</div>
<p><span>Su función debe poder utilizar cuatro argumentos:</span></p>
<ul>
<li><strong><span>themeConfig</span></strong><span> : contiene un objeto con todos los valores de las opciones de su tema personalizado</span></li>
<li><strong><span>postConfig</span></strong><span> : contiene opciones que son específicas de la publicación.</span></li>
<li><strong><span>commonConfig</span></strong><span> : contiene otras opciones como la longitud del extracto, publicaciones por página, etc.</span></li>
<li><strong><span>pageConfig</span></strong><span> : contiene opciones que son específicas de la página.</span></li>
</ul>
<p><span>La función debe devolver el código CSS que se vinculará con el archivo CSS principal del tema.</span></p>
<p><span>Recomendamos utilizar cadenas multilínea de JavaScript para una mejor legibilidad del código.</span></p>
</div>
            ]]>
        </content>
    </entry>
    <entry>
        <title>¿Cómo crear ayudantes de manillar personalizados?</title>
        <author>
            <name>Gabriel Genri</name>
        </author>
        <link href="https://gabrielgenri.github.io/ProyectoWebs/como-crear-ayudantes-de-manillar-personalizados.html"/>
        <id>https://gabrielgenri.github.io/ProyectoWebs/como-crear-ayudantes-de-manillar-personalizados.html</id>
            <category term="Publii"/>

        <updated>2024-12-06T21:00:13-03:00</updated>
            <summary>
                <![CDATA[
                    Al crear su tema, es posible que desee ampliar la cantidad de ayudantes; Publii ofrece a los desarrolladores de temas&hellip;
                ]]>
            </summary>
        <content type="html">
            <![CDATA[
                <header>
<p class="post__title"><span style="color: var(--text-primary-color); font-family: var(--editor-font-family); font-size: inherit; font-weight: var(--font-weight-normal);">Al crear su tema, es posible que desee ampliar la cantidad de ayudantes; Publii ofrece a los desarrolladores de temas la posibilidad de crear ayudantes personalizados según sus necesidades. Son útiles si necesita simplificar el código de su tema.</span></p>
</header>
<div class="post__entry">
<p><span>Por ejemplo, puede crear un ayudante personalizado que reemplazará múltiples condiciones con una única verificación condicional.</span></p>
<p><span>Para crear ayudantes personalizados en su tema, simplemente cree un archivo </span><strong><span>helpers.js</span></strong><span> en el directorio del tema; aquí puede agregar sus funciones ayudantes personalizadas.</span></p>
<p><span>A continuación se muestra un ejemplo de código que crea dos ayudantes personalizados súper simples que aceptan un argumento:</span></p>
<div class="code-toolbar">
<pre class="language-javascript" tabindex="0"><code>/*
 * Custom theme helpers for Handlebars.js
 */

let themeHelpers = {
    test1: function(value) {
        return "TEST1 " + value;
    },
    test2: function(value) {
        return "TEST2 " + value;
    }
};

module.exports = themeHelpers;</code></pre>
<div class="toolbar">
<div class="toolbar-item"><a><span>Copiar</span></a></div>
</div>
</div>
<p><span>Como puede ver, todas las funciones auxiliares están envueltas dentro de un objeto que se exporta desde el archivo </span><strong><span>helpers.js</span></strong><span> al renderizador.</span></p>
<p><span>También es posible utilizar la instancia del objeto </span><strong><span>Handlebars</span></strong><span> : este escenario requerirá que el campo  se  </span><code>includeHandlebarsInHelpers</code><span> establezca como </span><strong><span>verdadero</span></strong><code>renderer</code><span>  en la sección de configuración del tema.</span></p>
<p><span>Luego el archivo </span><strong><span>helpers.js</span></strong><span> se puede escribir como:</span></p>
<div class="code-toolbar">
<pre class="language-javascript" tabindex="0"><code>module.exports = function (Handlebars) {
	return {
	    functionName: function(arg) {
	        // ...
	        return new Handlebars.SafeString(arg);
	    }
	};
  };</code></pre>
<div class="toolbar">
<div class="toolbar-item"><a><span>Copiar</span></a></div>
</div>
</div>
</div>
<footer>
<div class="post__footer-top">
<div class="post__meta"><time datetime="2017-08-05T00:03"><span>5 de agosto de 2017</span></time><span>Actualizado el:</span><time datetime="2024-02-08T12:58"><span>8 de febrero de 2024</span></time></div>
</div>
</footer>
            ]]>
        </content>
    </entry>
</feed>
