Proyectos - Blog

El objetivo de este proyecto es crear un blog para un único usuario


Un ejemplo de blog puede probarse en la ventana siguiente:

ERROR (no puede mostrarse el objeto)
Enlace a ejemplo

Comentarios

Esta puede ser la consulta de creación de tabla para este proyecto:

// Tamaño de los campos en la tabla
define("TAM_ENTRADA",         255);  // Tamaño del campo Entradas > Entrada
define("MAX_REG_ENTRADAS",    10);   // Número máximo de registros en la tabla Entradas

// Consultas de creación de tabla en MySQL
$consulta = "CREATE TABLE $dbEntradas (
    id INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
    fecha DATE,
    entrada VARCHAR(".TAM_ENTRADA."),
    PRIMARY KEY(id)
    )";

$consulta = "CREATE TABLE $dbEntradas (
    id INTEGER PRIMARY KEY,
    fecha DATE,
    entrada VARCHAR(".TAM_ENTRADA.")
    )";

Blog - Calendario

Para generar el calendario, se puede utilizar esta función, que requiere dos argumentos:

<?php
function calendario ($fecha, $enlaces)
{
    global $db, $dbEntradas;

    date_default_timezone_set("Europe/Madrid");
    if (!ctype_digit(substr($fecha, 5, 2))||!ctype_digit(substr($fecha, 8, 2))
        ||!ctype_digit(substr($fecha, 0, 4))) {
        $fecha = date("Y-m-d");
    } elseif (!checkdate((int)substr($fecha, 5, 2), (int)substr($fecha, 8, 2),
                    (int)substr($fecha, 0, 4))) {
        $fecha = date("Y-m-d");
    }

    $diaInicial = substr($fecha, 8, 2);
    $mes     = substr($fecha, 5, 2);
    $anyo    = substr($fecha, 0, 4);

    $esBisiesto = ($anyo%400 == 0 || ($anyo%100 != 0 && $anyo%4 == 0))
                    ? "1" : "0";
    $duraMeses = ($esBisiesto) ?
        [0, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31, 31] :
        [0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31, 31];
    $meses = ["", "Enero", "Febrero", "Marzo", "Abril", "Mayo",
        "Junio", "Julio", "Agosto", "Septiembre", "Octubre",
        "Noviembre", "Diciembre"
    ]);

    if ($diaInicial > $duraMeses[(int)($mes)-1]) {
        $fechaAnt = date("Y-m-d", mktime(0, 0, 0, $mes-1, $duraMeses[(int)($mes)-1], $anyo));
    } else {
        $fechaAnt = date("Y-m-d", mktime(0, 0, 0, $mes-1, $diaInicial, $anyo));
    }
    $diaAnt  = substr($fechaAnt, 8, 2);
    $mesAnt  = substr($fechaAnt, 5, 2);
    $anyoAnt = substr($fechaAnt, 0, 4);

    if ($diaInicial > $duraMeses[(int)($mes)+1]) {
        $fechaSig = date("Y-m-d", mktime(0, 0, 0, $mes+1, $duraMeses[(int)($mes)+1], $anyo));
    } else {
        $fechaSig = date("Y-m-d", mktime(0, 0, 0, $mes+1, $diaInicial, $anyo));
    }
    $diaSig  = substr($fechaSig, 8, 2);
    $mesSig  = substr($fechaSig, 5, 2);
    $anyoSig = substr($fechaSig, 0, 4);

    $jd = gregoriantojd($mes, 1, $anyo);
    $dia = (jddayofweek($jd, 0)+6)%7;
    $dias = ["L", "M", "X", "J", "V", "S", "D"];
    $diaSemana = $dias[$dia];

    print "<div class=\"calendario\">\n  <table border=\"1\" class=\"calendario\" >\n";
    if ($enlaces == "editar") {
        print "    <caption><a href=\"editar.php?fecha=$fechaAnt\">&lt;&lt;</a> "
            . $meses[(int)($mes)] . " de $anyo <a href=\"editar.php?fecha="
            . "$fechaSig\">&gt;&gt;</a>
    </caption>\n";
    } else {
        print "    <caption><a href=\"leer.php?fecha=$fechaAnt\">&lt;&lt;</a> "
            . $meses[(int)($mes)] . " de $anyo <a href=\"leer.php?fecha="
            . "$fechaSig\">&gt;&gt;</a></caption>\n";
    }
    print "    <tr>\n      <th>L</th>\n      <th>M</th>\n      <th>X</th>
      <th>J</th>\n      <th>V</th>\n      <th>S</th>\n      <th>D</th>\n    </tr>\n";
    for ($n=0; $n<=5; $n++) {
        $num_inicio = 1-$dia+$n*7;
        if ($num_inicio <= $duraMeses[(int)($mes)]) {
            print "    <tr>\n";
            for ($i=0; $i<7; $i++) {
                $num = $num_inicio + $i;
                if ($num > 0 && $num <= $duraMeses[(int)($mes)]) {
                    if ($enlaces == "editar") {
                        print "      <td class=\"enlace\"><a href=\"editar.php"
                            . "?fecha=$anyo-$mes-".sprintf("%02d", $num)
                            . "\">$num</a></td>\n";
                    } elseif ($enlaces == "leer") {
                        $consulta = "SELECT COUNT(*) FROM $dbEntradas WHERE "
                            . "fecha='$anyo-$mes-".sprintf("%02d", $num)."'";
                        $result = $db->query($consulta);
                        if (!$result) {
                            print "      <td>$num</td>\n";
                        } elseif ($result->fetchColumn()) {
                            print "      <td class=\"enlace\"><a "
                                . "href=\"leer.php?fecha=$anyo-$mes-"
                              . sprintf("%02d", $num) . "\">$num</a></td>\n";
                        } else {
                            print "      <td>$num</td>\n";
                        }
                    }
                } else {
                    print "      <td></td>\n";
                }
            }
            print "    </tr>\n";
        }
    }
    print "  </table>\n</div>\n";
    print "\n";
}
?>

Blog 1 - Inicio

La página inicial del blog muestra las opciones disponibles: Editar, Leer y Borrar todo

Bienvenido al blog de Fulanito.

Blog 2 - Modo de edición

Al hacer clic en Editar desde la página de inicio, aparece la fecha del día, un área de texto y un calendario en el que se puede hacer clic en todos los días.

10/3/2005

<< Marzo de 2005 >>
L M X J V S D
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31

Detalles:

Blog 3 - Modo de lectura

Al hacer clic en Leer desde la página de inicio, aparece la fecha del día, un área de texto y un calendario en el que se puede hacer clic en los días que tienen entrada.

10/3/2005

Hoy empiezo mi blog

<< Marzo de 2005 >>
L M X J V S D
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31

Detalles:

Blog 4 - Borrar todo

La opción Borrar todo permite eliminar todas las entradas del blog.