Example #1
0
function maquetador_genera($plantilla, $controladorDefecto = false, $accionDefecto = false)
{
    global $aEstado;
    $pendientes = false;
    // precarga de modulos
    if (!is_array($aEstado)) {
        maquetador_evaluar_estado($controladorDefecto, $accionDefecto);
    }
    if (!isset($aEstado["modulos"])) {
        maquetador_precarga_modulos();
    }
    // leer la plantilla
    if (!file_exists($plantilla)) {
        echo t("No exista la plantilla: [{$plantilla}]");
        return false;
    }
    $html = maquetador_insertar_include($plantilla);
    $aGenerar = maquetador_extraer_marcas($html);
    foreach ($aGenerar as $marca => $contenido) {
        $aDatos = maquetador_extrae_modulo($marca);
        // averiguar el modulo
        if ($aDatos["modulo"] == "contenido") {
            $modulo = $aEstado["controlador"];
            $aDatos["accion"] = $aDatos["accion"] == '' ? $aEstado["accion"] : $aDatos['accion'];
            $aDatos["id"] = $aDatos["id"] == '' ? $aEstado["id"] : $aDatos['id'];
        } elseif ($aDatos["modulo"] == "maquetador") {
            $pendientes[$marca] = $aDatos["accion"];
            continue;
        } else {
            $modulo = $aDatos["modulo"];
        }
        // comprobamos que el modulo es correcto
        if ($modulo == "t") {
            $aGenerar[$marca] = t($aDatos["accion"]);
        } else {
            // ver si es un modulo
            if ($modulo != "PUT" and $modulo != "PHP" and !isset($aEstado["modulos"][$modulo])) {
                $aGenerar[$marca] = "controlador desconocido: {$modulo}";
            } else {
                // si inserta el modulo si cumple la condición
                if ($aDatos['condicional'] == "" or maquetador_evalua($aDatos['condicional'])) {
                    // hay que mostrar el modulo
                    switch ($modulo) {
                        case "PUT":
                            $aGenerar[$marca] = $aDatos["accion"];
                            break;
                        case "PHP":
                            $aGenerar[$marca] = eval("return " . $aDatos["accion"] . ";");
                            break;
                        default:
                            if ($aEstado["modulos"][$modulo]) {
                                include_once $aEstado["modulos"][$modulo];
                                $aEstado["modulos"][$modulo] = false;
                            }
                            $aGenerar[$marca] = $modulo($aDatos["accion"], $aDatos["id"]);
                    }
                }
            }
        }
        // else T
    }
    // for
    if ($pendientes) {
        foreach ($pendientes as $k => $accion) {
            $aGenerar[$k] = maquetador_script("genera", $accion);
        }
    }
    // ahorita solo queda calcular e imprimir el resultado
    echo strtr($html, $aGenerar);
}
function maquetador_registro($accion, $tipoRegistro, $clave = "", $valor = "all")
{
    static $aDatos;
    switch ($accion) {
        case "añadir":
        case "guardar":
            // primero añadimos las acciones,clave y valor
            switch ($tipoRegistro) {
                case "elemento":
                    $aDatos["elemento"][$clave] .= $valor;
                    break;
                case "elemento-nuevo":
                    $aDatos["elemento"][$clave] = $valor;
                    break;
                default:
                    $aDatos[$tipoRegistro][$clave] = $valor;
            }
            break;
        case "genera":
        case "generar":
            // ahora generamos cada acción, mediante una plantilla
            // para crear las etiquetas pertinentes.
            $xhtml = maquetador_configurar("XHTML") ? "/" : "";
            $aTemplates = array("js" => '<script type="text/javascript">%2$s</script>', "js-post" => '<script type="text/javascript">%2$s</script>', "script" => '<script src="%2$s"  type="text/javascript"></script>', "style" => '<link rel="stylesheet" href="%s" type="text/css" media="%s" ' . $xhtml . '>', "http-equiv" => '<meta http-equiv="%s" content="%s"' . $xhtml . '>', "icono" => '<link rel="shortcut icon" href="%s" type="image/x-icon" ' . $xhtml . '>', "meta" => '<meta name="%s" content="%s"' . $xhtml . '>');
            if ($tipoRegistro == "todos" || $tipoRegistro == "*") {
                // se imprimen todos salvo elementos y js-post.
                foreach ($aTemplates as $k => $v) {
                    if ($k != "js-post") {
                        $cRet .= maquetador_script("genera", $k);
                    }
                }
                return $cRet;
            } elseif (isset($aTemplates[$tipoRegistro]) && isset($aDatos[$tipoRegistro])) {
                $plantilla = $aTemplates[$tipoRegistro];
                foreach ($aDatos[$tipoRegistro] as $k => $v) {
                    $cRet .= sprintf($plantilla, $k, $v) . "\n";
                }
                return $cRet;
            } elseif (isset($aDatos["elemento"][$tipoRegistro])) {
                // se añade un elemento con div, li o dt
                $cTemp = $aDatos["elemento"][$tipoRegistro];
                $cTag = strtolower(substr($cTemp, 0, 4));
                if ($cTag == "<li>" || $cTag == "<li ") {
                    return "<ul id='{$tipoRegistro}'>{$cTemp}</ul>";
                } elseif ($cTag == "<dt>" || $cTag == "<dt " || $cTag == "<dd>" || $cTag == "<dd ") {
                    return "<dl id='{$tipoRegistro}'>{$cTemp}</dl>";
                } else {
                    return "<div id='{$tipoRegistro}'>{$cTemp}</div>";
                }
            }
    }
    return "";
}