Buenas! Antes que nada, soy nuevo posteando en el foro, pero lo vengo leyendo hace rato (he aprendido un montón acá). También soy medianamente nuevo en PHP, pero sobretodo cuando se trata de expresiones regulares
Estoy haciendo un pequeño "framework" o CMS personal, para poder desarrollar sitios dinámicos simples con gran velocidad y versatilidad (y de paso aprender más).
Les cuento brevemente cómo funciona: Un php interpreta una plantilla que está armada mediante etiquetas personalizadas incrustadas entre el html (similar al sistema que usa Tumblr).
Por ejemplo, si quiero poner una botonera, en la plantilla pongo esto:
Código:
{Botonera:}
<a href="{Botonera_url}">{Botonera_tag}</a>
{:Botonera}
Y el php lo interpreta y lo reemplaza (mediante expresiones regulares) por el código definitivo.
Hasta ahí he podido lograrlo, usando la siguiente función:
Código PHP:
function reemplaza_botonera($array_links){
global $plantilla;
$patron = "~\{Botonera:\}(.*?)\{:Botonera\}~s";
preg_match_all($patron, $plantilla, $matches, PREG_SET_ORDER);
$reemplazo = '';
if($array_links){
foreach($array_links as $aaa){
$subpatron = array("{Botonera_url}", "{Botonera_tag}");
$subreemplazo = array($aaa['url'], $aaa['tag']);
$reemplazo .= str_replace($subpatron, $subreemplazo, $matches[0][1]);
}
}
$plantilla = preg_replace($patron, $reemplazo, $plantilla);
}
Mi problema aparece cuando quiero poner más de una botonera, y que tengan una estructura distinta, por ejemplo:
Código:
<div id="botonera1">
{Botonera:}
<a href="{Botonera_url}">{Botonera_tag}</a>
{:Botonera}
</div>
<ul id="botonera2">
{Botonera:}
<li><a href="{Botonera_url}">{Botonera_tag}</a></li>
{:Botonera}
</ul>
Con el código que tengo, en #botonera2 me coloca el mismo contenido que en #botonera1 (pone sólo los <a>, en vez de <li><a>), y necesito que para cada una respete su estructura...
Supongo que tendría que agregar un loop más, en el que para cada coincidencia utilice su propio patrón y reemplazo...
Siempre recurro al manual de PHP, pero esta vez me cuesta un poco encontrar cuál sería la lógica para resolver el problema... Qué se les ocurre???
(Si no me expliqué bien, me avisan, y hago un esfuerzo más
)
Les agradezco un montón si me pueden ayudar, me encuentro un poco estancado! Gracias!!!