variable theme template pass part locate_template how get_template_part get_post_format espaƱol child body_class body php templates

php - theme - how to use get template part



Plantillas PHP-con PHP (17)

¿Cuál es la solución de plantillas más elegante (preferiblemente en PHP puro) que has visto?

Específicamente estoy interesado en el manejo:

  1. Detectando en un bloque repetitivo si es el primer o el último elemento
  2. Fácil manejo de cajas impares / pares, como una mesa con rayas de cebra, o similar
  3. Otra lógica de modulos, donde harías algo cada enésima vez.

Estoy buscando algo que lo haga menos doloroso:

<?php $persons = array(''John'', ''Jack'', ''Jill'', ''Jason''); ?> <?php $i = 0; ?> <?php if (isset($persons)): ?> <ul> <?php foreach ($persons as $name): ?> <li class="<?= ($i++ % 2 === 0) ? ''odd'' : ''even'' ?>"><?= $name ?></li> <?php endforeach ?> </ul> <?php endif ?>

¿Realmente se necesita el desastre anterior para crear algo como esto a continuación?

<ul> <li class="odd">John</li> <li class="even">Jack</li> <li class="odd">Jill</li> <li class="even">Jason</li> </ul>

¿Soy solo yo el que encuentra el anterior horrible?

Todos aquellos que comienzan y cierran php-tags me hacen temblar.


¿Has considerado phptal ? Un beneficio principal de esto (o algo similar) es que obtienes plantillas que pueden pasar la validación. la mayoría de los motores de plantillas de PHP parecen ignorar esto.


He usado Smarty Template Engine en el pasado. Es bastante sólido. Y como probablemente puedas decir desde el sitio web; tiene una gran base de usuarios y se actualiza regularmente.

Está en PHP puro también.


No es PHP puro (la sintaxis de plantillas entonces), pero funciona muy bien; Smarty .

Para bucles puedes hacer:

<ul> {foreach from=$var name=loop item=test} {if $smarty.foreach.loop.first}<li>This is the first item</li>{/if} <li class="{cycle values="odd,even"}">{$var.name}</li> {if $smarty.foreach.loop.last}<li>This was the last item</li>{/if} {/foreach} </ul>


No necesita abrir las etiquetas más de una vez. También puede realizar una función si hace lo mismo varias veces:

<?php function makeul($items, $classes) { $c = count($classes); $out = ""; if (isset($items) && count($items) > 0) { $out = "<ul>/n"; foreach ($items as $item) { $out .= "/t<li class=/"" . $classes[$i++%$c] . "/">$item</li>/n"; } $out .= "</ul>/n"; } return $out; } ?> other page content <?php $persons = array(''John'', ''Jack'', ''Jill'', ''Jason''); $classes = array(''odd'', ''even''); print makeul($persons, $classes); ?>

Además, si no te importa usar Javascript, Jquery hace que las cosas hechas mod 2 sean bastante sencillas (p. Ej., Para cebra de una tabla):

$("tr:odd").addClass("odd"); $("tr:even").addClass("even");


Si lo que lo atemoriza son las etiquetas de apertura y cierre, escriba una función que cree la cadena html y luego haga que la devuelva. Al menos te ahorrará algunas etiquetas.


Utilizo Modulo como lo hiciste en tu ejemplo todo el tiempo.


Uso PHPTAL para plantillas porque está escrito en HTML 100% real con datos de marcador de posición, por lo que incluso funciona en un editor WYSIWYG para un diseñador web. Eso y es simplemente fácil de entender.

Esto es lo que se vería para mí. Perdonen el marcado, soy nuevo aquí y el bloque de cuatro espacios no funcionaba bien para mí (la lista era una lista, no el marcado).

Código PHP:

$tal = new PHPTAL; $tal->setTemplate(''people.htm'') ->set(''people'', array(''John'', ''Jack'', ''Jill'', ''Jason'')); echo $tal->execute();

Modelo:

<ul> <li tal:repeat="person people" tal:content="person">John Doe</li> </ul>

Salida:

  • John
  • Jack
  • Jill
  • Jason
  • Ahora, obviamente, no haría una plantilla para esto, pero podría usar una macro para ella o construir una página completa e incluir esa variable. Pero se entiende la idea. El uso de PHPTAL casi ha triplicado mi velocidad de creación de plantillas y programación, simplemente por la simplicidad (sin nueva sintaxis para aprender como smarty).


    Savant es un motor de plantillas PHP ligero y puro. La versión 2 tiene un complemento de ciclo similar al Smarty mencionado anteriormente. No he podido encontrar una referencia al mismo complemento en la versión 3, pero estoy seguro de que podrías escribirlo con bastante facilidad.



    Una pequeña ayuda en el bucle:

    <? $b=false; foreach($MyList as $name) { ?> <li class="row<?= $b=!$b ?>"><?= htmlspecialchars($name); ?></li> <? } ?>

    Al decir $b=!$b , alterna automáticamente entre verdadero y falso. Como las impresiones falsas como "", y las copias verdaderas se imprimen como "1", al definir las clases css row y row1 , puede obtener sus filas alterantes sin ningún problema.

    considere usar :first-child css del :first-child para darle un estilo diferente al primero.


    <?= ($i++ % 2 === 0) ? ''odd'' : ''even'' ?>

    Lo estás haciendo al revés. Su primer artículo ahora se llama incluso en lugar de impar. Use ++ $ i.

    Estoy teniendo el mismo problema. Pero creo que tu solución original es la más adecuada. Así que iré con eso.


    ¿Qué tal el XSLT ? El único sistema de plantillas que tiene un cuerpo de estándares detrás de él. Funciona igual en todos los lenguajes de programación. ¡Aprende una vez, úsala en todas partes!


    Componentes de Symfony: Templating

    texto alternativo http://components.symfony-project.org/images/components/templating/home.png

    Symfony tiene la intención de pasar a un nuevo sistema de plantillas basado en el sistema ligero de plantilla de plantillas de PHP.

    El desarrollador principal, Fabien Potencier, explica la decisión aquí: http://fabien.potencier.org/article/35/templating-engines-in-php-follow-up

    Usualmente se puede responder a Symfony para que tome decisiones muy informadas sobre estos asuntos, por lo que este marco debería ser algo a considerar .

    El componente está aquí: http://components.symfony-project.org/templating/


    Creé un sistema simple de plantillas en PHP para resolver este problema hace un tiempo:

    http://code.google.com/p/templatephp/

    Requiere una matriz multidimensional y requiere la adición de algunas etiquetas adicionales al HMTL para crear la plantilla combinada.

    No es tan complicado (aunque poderoso) como Smarty y algunas otras soluciones, pero gana en simplicidad la mayor parte del tiempo. Una demostración de la creación del menú:

    <p>Main Menu</p> <ul> {block:menu_items} <li><a href="{var:link}">{var:name}</a></li> {/block:menu_items} </ul>

    Combinado con...

    array ( ''menu_items'' => array ( array ( ''link'' => ''home.htm'', ''name'' => ''Home'' ), array ( ''link'' => ''about.htm'', ''name'' => ''About Us'' ), array ( ''link'' => ''portfolio.htm'', ''name'' => ''Portfolio'' ), array ( ''link'' => ''contact.htm'', ''name'' => ''Contact Us'' ) ) );

    Creará el menú ...

    <p>Main Menu</p> <ul> <li><a href="home.htm">Home</a></li> <li><a href="about.htm">About Us</a></li> <li><a href="portfolio.htm">Portfolio</a></li> <li><a href="contact.htm">Contact Us</a></li> </ul>


    Tiny pero fuerte

    www.tinybutstrong.com

    No es un error inteligente incluir otro lenguaje de macros en la página, pero te permite manejar todos los problemas prácticos de visualización de la web que alguna vez le eché. En particular, las construcciones impar / par anteriores son un doddle. Para algo así como su código de selección de una tabla de base de datos

    En el archivo PHP

    $TBS->MergeBlock(''blk1'',$sqlconnect, "SELECT name from people ");

    Y en el archivo HTML

    <ul> <li class="odd">[blk.name;block=ul]</li> <li class="even">[blk.name;block=ul]</li> </ul>

    Y eso es. Tenga en cuenta que el HTML es completamente compatible con Dreamweaver. Además, si quisiera hacer esa alternativa en tres estilos de línea, todo lo que tendría que hacer es agregar la línea adicional, tal vez con diferentes clases, por lo que

    <ul> <li class="linestyle1">[blk.name;block=ul]</li> <li class="linestyle2">[blk.name;block=ul]</li> <li class="linestyle3">[blk.name;block=ul]</li> </ul>


    Si es solo para aplicar un estilo CSS, ¿por qué no usa el selector n-ésimo (impar)?

    Por ejemplo: li: nth-of-type (impar) {background: # f2f6f8; fondo: gradiente lineal (arriba, # f2f6f8 0%, # e0eff9 100%); }

    http://jsfiddle.net/melonangie/nU7qK/ enter code here


    <?php define (''CRLF'', "/r/n"); $persons = array(''John'', ''Jack'', ''Jill'', ''Jason''); $color = ''white''; // Init $color for striped list $ho = ''<UL>'' . CRLF; // Start HTML Output variable foreach ($persons as $name) { $ho .= '' <li class="'' . $color . ''">'' . $name . ''</li>'' . CRLF; $color = ($color == ''white'') ? ''grey'' : ''white''; // if white, make it grey else white } $ho .= ''</ul>'' . CRLF; echo $ho; ?>