Cambio do deseño da paxina de Blogue e correccions varias.

This commit is contained in:
Laegnur 2024-10-22 19:45:48 +02:00
parent 72fc9d071e
commit edc87ea5fb
Signed by: laegnur
GPG key ID: F8FE83A0B2D932A3
76 changed files with 2681 additions and 371 deletions

File diff suppressed because one or more lines are too long

Binary file not shown.

Before

Width:  |  Height:  |  Size: 68 KiB

After

Width:  |  Height:  |  Size: 68 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 68 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 66 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 336 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 750 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 714 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 21 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 780 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 629 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 822 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 703 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 697 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 19 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 561 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 21 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 792 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 24 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 608 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 19 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 612 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 635 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 724 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 701 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 19 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 830 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 19 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 801 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 40 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 121 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 54 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 186 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 55 KiB

After

Width:  |  Height:  |  Size: 55 KiB

View file

Before

Width:  |  Height:  |  Size: 572 KiB

After

Width:  |  Height:  |  Size: 572 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 51 KiB

After

Width:  |  Height:  |  Size: 51 KiB

View file

Before

Width:  |  Height:  |  Size: 508 KiB

After

Width:  |  Height:  |  Size: 508 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 45 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 96 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 61 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 218 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 46 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 160 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 71 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 259 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 44 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 128 KiB

14
site/finished.php Normal file
View file

@ -0,0 +1,14 @@
<?php namespace ProcessWire;
if(!defined("PROCESSWIRE")) die();
/** @var ProcessWire $wire */
/**
* ProcessWire Request Finished
* ============================
* This finished.php file is called after ProcessWire has finished serving the current
* request. This occurs after the current page has been rendered. This file receives a
* copy of all ProcessWire API variables.
*
*/

61
site/ready.php Normal file
View file

@ -0,0 +1,61 @@
<?php namespace ProcessWire;
if(!defined("PROCESSWIRE")) die();
/** @var ProcessWire $wire */
/**
* ProcessWire Bootstrap API Ready
* ===============================
* This ready.php file is called during ProcessWire bootstrap initialization process.
* This occurs after the current page has been determined and the API is fully ready
* to use, but before the current page has started rendering. This file receives a
* copy of all ProcessWire API variables.
*
*/
/*function str_lreplace($search, $replace, $subject)
{
return preg_replace('~(.*)' . preg_quote($search, '~') . '~', '$1' . $replace, $subject, 1);
}
function str_freplace($search, $replace, $subject)
{
$from = '/'.preg_quote($search, '/').'/';
return preg_replace($from, $replace, $subject, 1);
}
$captcha = wire('modules')->get("MarkupGoogleRecaptcha");
wire()->addHookProperty('Page::captcha', function($event) use ($captcha)
{
$event->return = $captcha;
});
wire()->addHookAfter('Page::render', function($event)
{
$template = $event->object->template;
$page = $event->object;
if($template == 'admin' && !wire('user')->isLoggedin())
{
$event->return = str_freplace('</form>', $page->captcha->render() . '</form>', $event->return);
$event->return = str_lreplace('</body>', $page->captcha->getScript() . '</body>', $event->return);
}
});
wire()->addHookAfter('Session::authenticate', function($event)
{
$page = wire('page');
$template = $page->template;
if($template == 'admin')
{
if($page->captcha->verifyResponse() == false)
{
wire('session')->logout();
wire('session')->redirect(wire('config')->urls->admin);
}
}
});*/

View file

@ -0,0 +1,67 @@
<?php namespace ProcessWire;
/** @var Page $page */
/** @var Pages $pages */
/** @var Config $config */
/** @var Sanitizer $sanitizer API variable */
/** @var WireInput $input API variable */
/** @var User $user API variable */
/** @var Languages $languages API variable */
/** @var SiteConfig $configuracion */
/** @var HomePage $inicio */
if($input->get->logout == true)
{
$session->logout();
$session->redirect('/');
}
$menu = '';
$saida = '';
$usuario = '';
$contrasinal = '';
$mensaxe_tipo = '';
$mensaxe = '';
$captcha = $modules->get('MarkupGoogleRecaptcha');
if ($captcha->verifyResponse() === true)
{
$usuario = $sanitizer->username($input->post->usuario);
$contrasinal = $input->post->contrasinal;
if($session->login($usuario, $contrasinal))
{
$session->redirect($inicio->url);
}
else
{
$mensaxe_tipo = "x-circle";
$mensaxe = _x('Wrong username or password', 'Wrong username or password');
}
}
?>
<main id="contido" class="completo">
<article id="<?=$page->name;?>">
<h1 class="visually-hidden"><?=ucfirst($page->title);?></h1>
<section id="accceso-formulario">
<h2><?=_x('Employee Access', 'employee access');?></h2>
<form method="post" action="<?=$page->url;?>">
<label for="usuario"><?=_x('Username', 'Username');?>:</label>
<input type="text" id="usuario">
<label for="contrasinal"><?=_x('Password', 'Password');?>:</label>
<input type="password" id="contrasinal">
<?php if($mensaxe != ''): ?>
<div id="notificacions" class="alerta <?=$mensaxe_tipo;?>" role="alert">
<span class="icono-<?=$mensaxe_tipo;?>"></span>
<p><?=$mensaxe;?></p>
<span class="icono-x pechar" onclick="this.parentElement.style.display='none';"></span>
</div>
<?php endif; ?>
<?=$captcha->render();?>
<input type="submit" id="enviar" name="enviar" class="boton activo" value="<?=_x('Log in', 'Log in');?>">
<a href="/" class="boton activo centrado"><?=_x('Return', 'return');?></a>
<?=$captcha->getScript();?>
</form>
</section>
</article">
</main>

View file

@ -1,43 +1,56 @@
<?php namespace ProcessWire; <?php namespace ProcessWire;
/** @var Page $page API variable */ /** @var Page $page */
/** @var Pages $pages */
/** @var Config $config */
/** @var Sanitizer $sanitizer API variable */
/** @var WireInput $input API variable */
/** @var User $user API variable */
/** @var Languages $languages API variable */
/** @var SiteConfig $configuracion */
/** @var HomePage $inicio */
$menu = ''; $menu = '';
$contido = '';
if($configuracion['mantemento']['activo'] && !$user->isLoggedin()) if($configuracion['mantemento']['activo'] && !$user->isLoggedin())
{ {
$menu = renderMenu($pages->get('/noticias')->and($pages->get('/contacto'))); $menu = renderMenu($inicio->and($pages->get('/noticias')->and($pages->get('/contacto'))));
} }
else else
{ {
$menu = renderMenu($inicio->children); $menu = renderMenu($inicio->and($inicio->children));
} }
$categorias = pages()->get('/noticias/categorias/')->children(); $categorias = pages()->get('/noticias/categorias/')->children();
$etiquetas = pages()->get('/noticias/etiquetas/')->children(); $etiquetas = pages()->get('/noticias/etiquetas/')->children();
?>
$contido .= renderMigasPan($page) . "\n"; <main id="contido" class="completo">
$contido .= '<article id="' . $page->name .'" class="container">' . "\n"; <nav id="migas" aria-label="<?=_x("Breadcrumb", "Breadcrumb");?>">
$contido .= '<h2 class="visually-hidden">' . ucfirst($page->title) . '</h2>' . "\n"; <?=renderMigasPan($page);?>
$contido .= '<section class="row row-cols-1 row-cols-md-2 mb-3">' . "\n"; </nav>
$contido .= renderCategoriasEtiquetas($categorias); <section id="<?=$page->name;?>" class="noticias destacado">
$contido .= renderCategoriasEtiquetas($etiquetas); <h1 class="visually-hidden"><?=ucfirst($page->title);?></h1>
$contido .= '</section>' . "\n"; <aside>
$contido .= '<section id="publicacions" class="row row-cols-1 row-cols-lg-2 mb-3">' . "\n"; <?=renderCategoriasEtiquetas($categorias, true);?>
<?=renderCategoriasEtiquetas($etiquetas);?>
</aside>
<div>
<?php
if($page->numChildren) if($page->numChildren)
{ {
$publicacions = pages()->get('/noticias/publicacions/')->children("template='publicacion',sort=-fecha_publicacion,limit=10"); $publicacions = pages()->get('/noticias/publicaciones/')->children("template='publicacion',sort=-fecha_publicacion,limit=10");
$contido .= renderPaxinacion($publicacions, 'superior'); echo renderPaxinacion($publicacions, 'superior');
foreach($publicacions as $publicacion) foreach($publicacions as $publicacion)
{ {
$contido .= renderArtigos($publicacion, $languages->getLocale()); echo renderArtigos($publicacion, $languages->getLocale());
} }
$contido .= renderPaxinacion($publicacions, 'inferior'); echo renderPaxinacion($publicacions, 'inferior');
} }
$contido .= '</section>' . "\n"; ?>
$contido .= '</article>' . "\n"; </div>
</section>
</main>
<?php

View file

@ -1,31 +1,50 @@
<?php namespace ProcessWire; <?php namespace ProcessWire;
/** @var Page $page API variable */ /** @var Page $page */
/** @var Pages $pages */
/** @var Config $config */
/** @var Sanitizer $sanitizer API variable */
/** @var WireInput $input API variable */
/** @var User $user API variable */
/** @var Languages $languages API variable */
/** @var SiteConfig $configuracion */
/** @var HomePage $inicio */
$menu = ''; $menu = '';
$contido = '';
if($configuracion['mantemento']['activo'] && !$user->isLoggedin()) if($configuracion['mantemento']['activo'] && !$user->isLoggedin())
{ {
$menu = renderMenu($pages->get('/noticias')->and($pages->get('/contacto'))); $menu = renderMenu($inicio->and($pages->get('/noticias')->and($pages->get('/contacto'))));
} }
else else
{ {
$menu = renderMenu($inicio->children); $menu = renderMenu($inicio->and($inicio->children));
} }
$categorias = pages()->get('/noticias/categorias/')->children();
$etiquetas = pages()->get('/noticias/etiquetas/')->children();
$publicacions = pages()->get('/noticias/publicaciones/')->children("template='publicacion',categorias=$page,sort=-fecha_publicacion,limit=10"); $publicacions = pages()->get('/noticias/publicaciones/')->children("template='publicacion',categorias=$page,sort=-fecha_publicacion,limit=10");
?>
$contido .= renderMigasPan($page) . "\n"; <main id="contido" class="completo">
$contido .= '<article id="' . $page->name .'" class="container">' . "\n"; <nav id="migas" aria-label="<?=_x("Breadcrumb", "Breadcrumb");?>">
$contido .= '<h2 class="visually-hidden">' . ucfirst($page->title) . '</h2>' . "\n"; <?=renderMigasPan($page);?>
$contido .= '<section id="publicacions" class="row row-cols-1 row-cols-lg-2 mb-3">' . "\n"; </nav>
$contido .= renderPaxinacion($publicacions, 'superior'); <section id="<?=$page->name;?>" class="noticias destacado">
<h1 class="visually-hidden"><?=ucfirst($page->title);?></h1>
foreach($publicacions as $publicacion) <aside>
{ <?=renderCategoriasEtiquetas($categorias, true);?>
$contido .= renderArtigos($publicacion, $languages->getLocale()); <?=renderCategoriasEtiquetas($etiquetas);?>
} </aside>
$contido .= renderPaxinacion($publicacions, 'inferior'); <div>
$contido .= '</section>' . "\n"; <?php
$contido .= '</article>' . "\n"; echo renderPaxinacion($publicacions, 'superior');
foreach($publicacions as $publicacion)
{
echo renderArtigos($publicacion, $languages->getLocale());
}
echo renderPaxinacion($publicacions, 'inferior');
?>
</div>
</section>
</main>
<?php

View file

@ -19,6 +19,7 @@ if($configuracion['mantemento']['activo'] && !$user->isLoggedin())
else else
{ {
$menu = renderMenu($inicio->and($inicio->children)); $menu = renderMenu($inicio->and($inicio->children));
}
$saida = ''; $saida = '';
$captcha = $modules->get('MarkupGoogleRecaptcha'); $captcha = $modules->get('MarkupGoogleRecaptcha');
@ -36,27 +37,27 @@ else
if($enviado) if($enviado)
{ {
$saida .= '<p>' . _x('Correo enviado', 'mail sent'); $saida .= '<p>' . _x('Mail sent', 'mail sent');
} }
else else
{ {
$saida .= '<p>' . _x('Erro ao enviar o correo', 'error sending mail'); $saida .= '<p>' . _x('Error sending email', 'error sending mail');
} }
$saida .= '<br><a class="boton activo centrado" href="' . $page->url . '" >' . _x('Volver ao formulario', 'go back to form') .'</a></p>'; $saida .= '<br><a class="boton activo centrado" href="' . $page->url . '" >' . _x('Go back to form', 'go back to form') .'</a></p>';
} }
else else
{ {
$saida .= '<form method="post" action="' . $page->url . '">'; $saida .= '<form method="post" action="' . $page->url . '">';
$saida .= '<label for="nome">' . _x('Nome', 'name') . '</label>'; $saida .= '<label for="nome">' . _x('Name', 'name') . '</label>';
$saida .= '<input type="text" name="nome" id="nome" required>'; $saida .= '<input type="text" name="nome" id="nome" required>';
$saida .= '<label for="correo">' . _x('Correo electrónico', 'email') . '</label>'; $saida .= '<label for="correo">' . _x('Email', 'email') . '</label>';
$saida .= '<input type="email" name="correo" id="correo" required>'; $saida .= '<input type="email" name="correo" id="correo" required>';
$saida .= '<label for="asunto">' . _x('Asunto', 'subject') . '</label>'; $saida .= '<label for="asunto">' . _x('Subject', 'subject') . '</label>';
$saida .= '<input type="text" name="asunto" id="asunto" required>'; $saida .= '<input type="text" name="asunto" id="asunto" required>';
$saida .= '<label for="mensaxe">' . _x('Mensaxe', 'message') . '</label>'; $saida .= '<label for="mensaxe">' . _x('Message', 'message') . '</label>';
$saida .= '<textarea name="mensaxe" id="mensaxe" cols="30" rows="6" required></textarea>'; $saida .= '<textarea name="mensaxe" id="mensaxe" cols="30" rows="6" required></textarea>';
$saida .= $captcha->render(); $saida .= $captcha->render();
$saida .= '<input type="submit" id="enviar" name="enviar" class="boton activo" value="' . _x('Enviar mensaxe', 'send message') . '">'; $saida .= '<input type="submit" id="enviar" name="enviar" class="boton activo" value="' . _x('Send message', 'send message') . '">';
$saida .= '</form>' . "\n"; $saida .= '</form>' . "\n";
$saida .= $captcha->getScript(); $saida .= $captcha->getScript();
} }
@ -92,4 +93,3 @@ else
</article> </article>
</main> </main>
<?php <?php
}

View file

@ -2,7 +2,7 @@
* @FONTS * @FONTS
* ============================================================================= * =============================================================================
* *
* fonts.css v0.1.23 | GNU GPL License | * fonts.css v0.1.24 | GNU GPL License |
* *
*/ */
@ -20,13 +20,13 @@
@font-face @font-face
{ {
font-family: 'icomoon'; font-family: 'icomoon';
src: url('../fonts/icomoon.eot?rwmkoy'); /* 1 */ src: url('../fonts/icomoon.eot?su7y4h'); /* 1 */
src: url('../fonts/icomoon.eot?rwmkoy#iefix') format('embedded-opentype'), /* 2 */ src: url('../fonts/icomoon.eot?su7y4h#iefix') format('embedded-opentype'), /* 2 */
url('../fonts/icomoon.woff2?rwmkoy') format('woff2'), /* 3 */ url('../fonts/icomoon.woff2?su7y4h') format('woff2'), /* 3 */
url('../fonts/icomoon.woff?rwmkoy') format('woff'), /* 4 */ url('../fonts/icomoon.woff?su7y4h') format('woff'), /* 4 */
url('../fonts/icomoon.otf?rwmkoy') format('opentype'), /* 5 */ url('../fonts/icomoon.otf?su7y4h') format('opentype'), /* 5 */
url('../fonts/icomoon.ttf?rwmkoy') format('truetype'), /* 5 */ url('../fonts/icomoon.ttf?su7y4h') format('truetype'), /* 5 */
url('../fonts/icomoon.svg?rwmkoy#icomoon') format('svg'); /* 6 */ url('../fonts/icomoon.svg?su7y4h#icomoon') format('svg'); /* 6 */
font-display: block; font-display: block;
font-style: normal; font-style: normal;
font-weight: normal; font-weight: normal;
@ -209,6 +209,16 @@
content: "\e91e"; content: "\e91e";
} }
.icon-chevron-down:before
{
content: "\e91f";
}
.icon-chevron-up:before
{
content: "\e920";
}
.icon-picture:before .icon-picture:before
{ {
content: "\eaa1"; content: "\eaa1";

View file

@ -1,3 +1,9 @@
:root
{
--titulos: ui-rounded, 'Hiragino Maru Gothic ProN', Quicksand, Comfortaa, Manjari, 'Arial Rounded MT', 'Arial Rounded MT Bold', Calibri, source-sans-pro, sans-serif;
--corpo: Avenir, Montserrat, Corbel, 'URW Gothic', source-sans-pro, sans-serif;
}
*, *::before, *::after *, *::before, *::after
{ {
box-sizing: border-box; box-sizing: border-box;
@ -53,7 +59,7 @@ body
grid-template-rows: auto 1fr auto; grid-template-rows: auto 1fr auto;
color: rgb(var(--cor_10)); color: rgb(var(--cor_10));
font-family: Avenir, Montserrat, Corbel, 'URW Gothic', source-sans-pro, sans-serif; font-family: var(--corpo);
font-size: 1rem; font-size: 1rem;
font-weight: normal; font-weight: normal;
@ -70,11 +76,52 @@ a
h1, h2, h3, h4, h5, h6 h1, h2, h3, h4, h5, h6
{ {
color: rgb(var(--cor_30)); color: rgb(var(--cor_30));
font-family: ui-rounded, 'Hiragino Maru Gothic ProN', Quicksand, Comfortaa, Manjari, 'Arial Rounded MT', 'Arial Rounded MT Bold', Calibri, source-sans-pro, sans-serif; font-family: var(--titulos);
font-weight: bold; font-weight: bold;
text-wrap: balance; text-wrap: balance;
} }
a.boton
{
text-decoration: none;
}
dl
{
display: flex;
flex-direction: row;
flex-wrap: wrap;
gap: 10%;
max-width: 18.75rem;
margin: 0;
font-family: var(--titulos);
font-size: 0.875rem;
}
dt
{
width: 10%;
color: rgb(var(--cor_30));
}
dt::after
{
content: ": ";
}
dd
{
width: 80%;
margin: 0;
padding: 0;
}
figure figure
{ {
margin: 0; margin: 0;
@ -94,7 +141,7 @@ figure figcaption
padding: 10px 40px 20px; padding: 10px 40px 20px;
color: rgb(var(--cor_30)); color: rgb(var(--cor_30));
font-family: ui-rounded, 'Hiragino Maru Gothic ProN', Quicksand, Comfortaa, Manjari, 'Arial Rounded MT', 'Arial Rounded MT Bold', Calibri, source-sans-pro, sans-serif; font-family: var(--titulos);
font-weight: normal; font-weight: normal;
font-size: 1rem; font-size: 1rem;
text-align: center; text-align: center;
@ -108,6 +155,66 @@ figcaption
margin-inline: auto; margin-inline: auto;
} }
time
{
display: block;
position: relative;
height: 5rem;
overflow: hidden;
width: 5rem;
border-radius: 0.6em;
box-shadow: 0 1px 0 #bdbdbd, 0 2px 0 #fff, 0 3px 0 #bdbdbd, 0 4px 0 #fff, 0 5px 0 #bdbdbd, 0 0 0 1px #bdbdbd;
font-size: 0.75rem;
background-color: #fff;
}
time *
{
display: block;
width: 100%;
font-size: 0.8rem;
font-style: normal;
font-weight: bold;
text-align: center;
}
time em
{
position: absolute;
bottom: 0;
color: rgb(var(--cor_30));
}
time strong
{
position: absolute;
top: 0;
padding: 0.3rem 0;
box-shadow: 0 2px 0 rgb(var(--cor_30));
color: white;
background-color: rgb(var(--cor_30));
}
time span
{
padding-top: 1.6rem;
color: black;
font-size: 2rem;
letter-spacing: -0.05rem;
}
ul, ul,
ol ol
{ {
@ -152,7 +259,7 @@ div#cabeceira-superior
nav#menu-usuario nav#menu-usuario
{ {
display: grid; display: grid;
grid-template-columns: auto auto; grid-template-columns: repeat(2, auto);
justify-content: space-between; justify-content: space-between;
} }
@ -469,6 +576,14 @@ article#habitacions figure:hover h3
transform: scale(0.9); transform: scale(0.9);
} }
article#noticias
{
display: grid;
grid-template-columns: 1fr;
grid-template-rows: repeat(2, auto) 1fr;
gap: var(--separacion);
}
section#mantemento img section#mantemento img
{ {
margin-bottom: 1.5rem; margin-bottom: 1.5rem;
@ -779,7 +894,8 @@ section#contacto-info p
margin-bottom: var(--separacion); margin-bottom: var(--separacion);
} }
section#contacto-formulario section#contacto-formulario,
section#accceso-formulario
{ {
display: grid; display: grid;
grid-template-columns: 1fr; grid-template-columns: 1fr;
@ -793,7 +909,15 @@ section#contacto-formulario
background-color: #eeeeee; background-color: #eeeeee;
} }
section#contacto-formulario form section#accceso-formulario
{
width: min(100%, 22rem);
margin: 0 auto;
}
section#contacto-formulario form,
section#accceso-formulario form
{ {
display: grid; display: grid;
grid-template-columns: 1fr; grid-template-columns: 1fr;
@ -827,6 +951,150 @@ section#contacto-info div.elemento
width: 100%; width: 100%;
} }
section#categorias,
section#etiquetas
{
margin-bottom: var(--separacion);
}
section#categorias h2,
section#etiquetas h2
{
margin: 0;
}
section#categorias ul,
section#etiquetas ul
{
gap: var(--separacion);
}
section.acordeon > input[type="radio"]
{
position: absolute;
left: -100vw;
}
section.acordeon ul
{
overflow-y: hidden;
height: 0;
transition: height 0.3s ease;
}
section.acordeon label
{
display: block;
position: relative;
padding: var(--separacion);
border: 1px solid rgba(var(--cor_10), 0.5);
border-radius: 0.5rem 0.5rem 0 0;
background-color: #eeeeee;
}
section.acordeon label::after
{
position: absolute;
right: 0;
font-family: 'icomoon' !important;
font-variant: normal;
font-style: normal;
font-weight: normal;
line-height: 1;
text-transform: none;
content: "\e920";
}
section.acordeon > input[type="radio"]:checked ~ h2 label::after
{
content: "\e91f";
}
section.acordeon > input[type="radio"]:checked ~ ul
{
height: auto;
overflow: visible;
padding: 15px;
border: 1px solid rgba(var(--cor_10), 0.5);
border-top: 0;
}
section.noticias
{
display: grid;
grid-template-columns: 1fr;
gap: var(--separacion);
}
section.noticias aside
{
grid-column: 1;
grid-row: 1;
}
section.noticias > div
{
grid-column: 1;
grid-row: 2;
}
nav.paxinacion ul
{
justify-content: center;
gap: var(--separacion);
margin-block: var(--separacion);
}
section.noticias article.artigo header
{
display: grid;
grid-template-columns: auto 1fr;
grid-template-rows: auto;
gap: var(--separacion);
margin-bottom: var(--separacion);
}
section.noticias time
{
grid-column: 1;
grid-row: 1 / 3;
}
section.noticias h3
{
grid-column: 2;
grid-row: 1;
margin: 0;
}
section.noticias dl
{
grid-column: 2 / 3;
grid-row: 2;
}
section.noticias dt span
{
display: none;
}
section.noticias img
{
width: 100%;
}
footer#pe footer#pe
{ {
padding-block: 1.5rem; padding-block: 1.5rem;
@ -989,7 +1257,7 @@ footer#pe p#desenrolo
section[id^="reixa-"], section[id^="reixa-"],
div[id^="reixa-"] div[id^="reixa-"]
{ {
grid-template-columns: 1fr 1fr; grid-template-columns: repeat(2, 1fr);
} }
section#contacto-info section#contacto-info
@ -1048,7 +1316,7 @@ footer#pe p#desenrolo
section[id^="imaxe-"], section[id^="imaxe-"],
div[id^="imaxe-"] div[id^="imaxe-"]
{ {
grid-template-columns: 1fr 1fr; grid-template-columns: repeat(2, 1fr);
} }
section[id^="imaxe-"].superior, section[id^="imaxe-"].superior,
@ -1094,7 +1362,7 @@ footer#pe p#desenrolo
section[id^="reixa-"], section[id^="reixa-"],
div[id^="reixa-"] div[id^="reixa-"]
{ {
grid-template-columns: 1fr 1fr 1fr; grid-template-columns: repeat(3, 1fr);
} }
section[id^="destacados-"], section[id^="destacados-"],
@ -1102,10 +1370,45 @@ footer#pe p#desenrolo
{ {
grid-template-columns: repeat(2, 1fr); grid-template-columns: repeat(2, 1fr);
} }
section.noticias
{
display: grid;
grid-template-columns: 2fr 1fr;
gap: var(--separacion);
}
section.noticias aside
{
grid-column: 2;
grid-row: 1;
}
section.noticias > div
{
grid-column: 1;
grid-row: 1;
}
} }
@media (min-width: 1024px) @media (min-width: 1024px)
{ {
dl
{
gap: 0;
}
dt
{
width: 60%;
}
dd
{
width: 40%;
}
nav#menu-usuario button.boton, nav#menu-usuario button.boton,
nav#menu-principal div#menu-despregable button.boton nav#menu-principal div#menu-despregable button.boton
{ {
@ -1148,6 +1451,12 @@ footer#pe p#desenrolo
width: calc(50% - (var(--separacion) * 2)); width: calc(50% - (var(--separacion) * 2));
} }
article#noticias
{
grid-template-columns: repeat(2, 1fr);
grid-template-rows: auto 1fr;
}
section[id^="destacados-"], section[id^="destacados-"],
div[id^="destacados-"] div[id^="destacados-"]
{ {
@ -1175,6 +1484,11 @@ footer#pe p#desenrolo
{ {
width: calc(33% - (var(--separacion) / 2)); width: calc(33% - (var(--separacion) / 2));
} }
section.noticias dt span
{
display: inline;
}
} }
@keyframes zoom @keyframes zoom

View file

@ -1,31 +1,50 @@
<?php namespace ProcessWire; <?php namespace ProcessWire;
/** @var Page $page API variable */ /** @var Page $page */
/** @var Pages $pages */
/** @var Config $config */
/** @var Sanitizer $sanitizer API variable */
/** @var WireInput $input API variable */
/** @var User $user API variable */
/** @var Languages $languages API variable */
/** @var SiteConfig $configuracion */
/** @var HomePage $inicio */
$menu = ''; $menu = '';
$contido = '';
if($configuracion['mantemento']['activo'] && !$user->isLoggedin()) if($configuracion['mantemento']['activo'] && !$user->isLoggedin())
{ {
$menu = renderMenu($pages->get('/noticias')->and($pages->get('/contacto'))); $menu = renderMenu($inicio->and($pages->get('/noticias')->and($pages->get('/contacto'))));
} }
else else
{ {
$menu = renderMenu($inicio->children); $menu = renderMenu($inicio->and($inicio->children));
} }
$categorias = pages()->get('/noticias/categorias/')->children();
$etiquetas = pages()->get('/noticias/etiquetas/')->children();
$publicacions = pages()->get('/noticias/publicaciones/')->children("template='publicacion',etiquetas=$page,sort=-fecha_publicacion,limit=10"); $publicacions = pages()->get('/noticias/publicaciones/')->children("template='publicacion',etiquetas=$page,sort=-fecha_publicacion,limit=10");
?>
$contido .= renderMigasPan($page) . "\n"; <main id="contido" class="completo">
$contido .= '<article id="' . $page->name .'" class="container">' . "\n"; <nav id="migas" aria-label="<?=_x("Breadcrumb", "Breadcrumb");?>">
$contido .= '<h2 class="visually-hidden">' . ucfirst($page->title) . '</h2>' . "\n"; <?=renderMigasPan($page);?>
$contido .= '<section id="publicacions" class="row row-cols-1 row-cols-lg-2 mb-3">' . "\n"; </nav>
$contido .= renderPaxinacion($publicacions, 'superior'); <section id="<?=$page->name;?>" class="noticias destacado">
<h1 class="visually-hidden"><?=ucfirst($page->title);?></h1>
foreach($publicacions as $publicacion) <aside>
{ <?=renderCategoriasEtiquetas($categorias);?>
$contido .= renderArtigos($publicacion, $languages->getLocale()); <?=renderCategoriasEtiquetas($etiquetas, true);?>
} </aside>
$contido .= renderPaxinacion($publicacions, 'inferior'); <div>
$contido .= '</section>' . "\n"; <?php
$contido .= '</article>' . "\n"; echo renderPaxinacion($publicacions, 'superior');
foreach($publicacions as $publicacion)
{
echo renderArtigos($publicacion, $languages->getLocale());
}
echo renderPaxinacion($publicacions, 'inferior');
?>
</div>
</section>
</main>
<?php

Binary file not shown.

Binary file not shown.

View file

@ -38,6 +38,8 @@
<glyph unicode="&#xe91c;" glyph-name="chevron-left" d="M670.165 200.832l-225.835 225.835 225.835 225.835c16.683 16.683 16.683 43.691 0 60.331s-43.691 16.683-60.331 0l-256-256c-16.683-16.683-16.683-43.691 0-60.331l256-256c16.683-16.683 43.691-16.683 60.331 0s16.683 43.691 0 60.331z" /> <glyph unicode="&#xe91c;" glyph-name="chevron-left" d="M670.165 200.832l-225.835 225.835 225.835 225.835c16.683 16.683 16.683 43.691 0 60.331s-43.691 16.683-60.331 0l-256-256c-16.683-16.683-16.683-43.691 0-60.331l256-256c16.683-16.683 43.691-16.683 60.331 0s16.683 43.691 0 60.331z" />
<glyph unicode="&#xe91d;" glyph-name="chevron-right" d="M414.165 140.502l256 256c16.683 16.683 16.683 43.691 0 60.331l-256 256c-16.683 16.683-43.691 16.683-60.331 0s-16.683-43.691 0-60.331l225.835-225.835-225.835-225.835c-16.683-16.683-16.683-43.691 0-60.331s43.691-16.683 60.331 0z" /> <glyph unicode="&#xe91d;" glyph-name="chevron-right" d="M414.165 140.502l256 256c16.683 16.683 16.683 43.691 0 60.331l-256 256c-16.683 16.683-43.691 16.683-60.331 0s-16.683-43.691 0-60.331l225.835-225.835-225.835-225.835c-16.683-16.683-16.683-43.691 0-60.331s43.691-16.683 60.331 0z" />
<glyph unicode="&#xe91e;" glyph-name="square" d="M213.333 853.334c-35.328 0-67.413-14.379-90.496-37.504s-37.504-55.168-37.504-90.496v-597.333c0-35.328 14.379-67.413 37.504-90.496s55.168-37.504 90.496-37.504h597.333c35.328 0 67.413 14.379 90.496 37.504s37.504 55.168 37.504 90.496v597.333c0 35.328-14.379 67.413-37.504 90.496s-55.168 37.504-90.496 37.504zM213.333 768h597.333c11.776 0 22.4-4.736 30.165-12.501s12.501-18.389 12.501-30.165v-597.333c0-11.776-4.736-22.4-12.501-30.165s-18.389-12.501-30.165-12.501h-597.333c-11.776 0-22.4 4.736-30.165 12.501s-12.501 18.389-12.501 30.165v597.333c0 11.776 4.736 22.4 12.501 30.165s18.389 12.501 30.165 12.501z" /> <glyph unicode="&#xe91e;" glyph-name="square" d="M213.333 853.334c-35.328 0-67.413-14.379-90.496-37.504s-37.504-55.168-37.504-90.496v-597.333c0-35.328 14.379-67.413 37.504-90.496s55.168-37.504 90.496-37.504h597.333c35.328 0 67.413 14.379 90.496 37.504s37.504 55.168 37.504 90.496v597.333c0 35.328-14.379 67.413-37.504 90.496s-55.168 37.504-90.496 37.504zM213.333 768h597.333c11.776 0 22.4-4.736 30.165-12.501s12.501-18.389 12.501-30.165v-597.333c0-11.776-4.736-22.4-12.501-30.165s-18.389-12.501-30.165-12.501h-597.333c-11.776 0-22.4 4.736-30.165 12.501s-12.501 18.389-12.501 30.165v597.333c0 11.776 4.736 22.4 12.501 30.165s18.389 12.501 30.165 12.501z" />
<glyph unicode="&#xe91f;" glyph-name="chevron-down" d="M225.835 524.502l256-256c16.683-16.683 43.691-16.683 60.331 0l256 256c16.683 16.683 16.683 43.691 0 60.331s-43.691 16.683-60.331 0l-225.835-225.835-225.835 225.835c-16.683 16.683-43.691 16.683-60.331 0s-16.683-43.691 0-60.331z" />
<glyph unicode="&#xe920;" glyph-name="chevron-up" d="M798.165 328.832l-256 256c-16.683 16.683-43.691 16.683-60.331 0l-256-256c-16.683-16.683-16.683-43.691 0-60.331s43.691-16.683 60.331 0l225.835 225.835 225.835-225.835c16.683-16.683 43.691-16.683 60.331 0s16.683 43.691 0 60.331z" />
<glyph unicode="&#xeaa1;" glyph-name="picture" d="M938.667 938.667h-853.333c-47.067 0-85.333-38.267-85.333-85.333v-853.333c0-47.067 38.267-85.333 85.333-85.333h853.333c47.067 0 85.333 38.267 85.333 85.333v853.333c0 47.067-38.267 85.333-85.333 85.333zM938.667-0h-853.333l-0.133 853.333c0 0 0 0 0.133 0h853.333v-853.333zM149.333 42.667h725.333c11.733 0 21.333 9.6 21.333 21.333v725.333c0 11.733-9.6 21.333-21.333 21.333h-725.333c-11.733 0-21.333-9.6-21.333-21.333v-725.333c0-11.733 9.6-21.333 21.333-21.333zM327.333 85.334l316.4 316.267c16.133 16.133 37.467 24.933 60.267 24.933s44.267-8.8 60.267-24.933l88.933-88.933v-227.333h-525.867zM853.333 768v-395.067l-58.8 58.8c-24.133 24.133-56.267 37.467-90.533 37.467s-66.4-13.333-90.533-37.467l-346.4-346.4h-96.4v103.067l140.533 140.533c16.533 16.533 43.733 16.533 60.4 0l39.067-39.067 30.133 30.133-39.067 39.067c-33.333 33.2-87.467 33.2-120.667 0l-110.4-110.4v519.333h682.667zM362.667 469.334c58.8 0 106.667 47.867 106.667 106.667s-47.867 106.667-106.667 106.667-106.667-47.867-106.667-106.667 47.867-106.667 106.667-106.667zM362.667 640c35.333 0 64-28.667 64-64s-28.667-64-64-64-64 28.667-64 64 28.667 64 64 64z" /> <glyph unicode="&#xeaa1;" glyph-name="picture" d="M938.667 938.667h-853.333c-47.067 0-85.333-38.267-85.333-85.333v-853.333c0-47.067 38.267-85.333 85.333-85.333h853.333c47.067 0 85.333 38.267 85.333 85.333v853.333c0 47.067-38.267 85.333-85.333 85.333zM938.667-0h-853.333l-0.133 853.333c0 0 0 0 0.133 0h853.333v-853.333zM149.333 42.667h725.333c11.733 0 21.333 9.6 21.333 21.333v725.333c0 11.733-9.6 21.333-21.333 21.333h-725.333c-11.733 0-21.333-9.6-21.333-21.333v-725.333c0-11.733 9.6-21.333 21.333-21.333zM327.333 85.334l316.4 316.267c16.133 16.133 37.467 24.933 60.267 24.933s44.267-8.8 60.267-24.933l88.933-88.933v-227.333h-525.867zM853.333 768v-395.067l-58.8 58.8c-24.133 24.133-56.267 37.467-90.533 37.467s-66.4-13.333-90.533-37.467l-346.4-346.4h-96.4v103.067l140.533 140.533c16.533 16.533 43.733 16.533 60.4 0l39.067-39.067 30.133 30.133-39.067 39.067c-33.333 33.2-87.467 33.2-120.667 0l-110.4-110.4v519.333h682.667zM362.667 469.334c58.8 0 106.667 47.867 106.667 106.667s-47.867 106.667-106.667 106.667-106.667-47.867-106.667-106.667 47.867-106.667 106.667-106.667zM362.667 640c35.333 0 64-28.667 64-64s-28.667-64-64-64-64 28.667-64 64 28.667 64 64 64z" />
<glyph unicode="&#xeb07;" glyph-name="washing-machine" d="M853.333 938.667h-682.667c-47.067 0-85.333-38.267-85.333-85.333v-853.333c0-47.067 38.267-85.333 85.333-85.333h682.667c47.067 0 85.333 38.267 85.333 85.333v853.333c0 47.067-38.267 85.333-85.333 85.333zM853.333 853.334v-170.533c-94.533 27.2-215.6 42.533-341.333 42.533s-246.8-15.333-341.333-42.533v170.533h682.667zM853.333-0h-682.667v638.267c92.133 28.4 214 44.4 341.333 44.4s249.2-16 341.333-44.4v-638.267c0 0 0 0 0 0zM512 640c-79.733 0-154.8-31.067-211.2-87.467s-87.467-131.467-87.467-211.2 31.067-154.8 87.467-211.2c56.4-56.4 131.467-87.467 211.2-87.467s154.8 31.067 211.2 87.467c56.4 56.4 87.467 131.467 87.467 211.2s-31.067 154.8-87.467 211.2c-56.4 56.4-131.467 87.467-211.2 87.467zM512 128c-117.6 0-213.333 95.733-213.333 213.333s95.733 213.333 213.333 213.333c117.6 0 213.333-95.733 213.333-213.333s-95.733-213.333-213.333-213.333zM384 341.334h-42.667c0-94.133 76.533-170.667 170.667-170.667v42.667c-70.533 0-128 57.467-128 128zM768 810.667h42.667v-42.667h-42.667v42.667zM213.333 810.667h85.333v-42.667h-85.333v42.667zM341.333 810.667h42.667v-42.667h-42.667v42.667zM426.667 810.667h42.667v-42.667h-42.667v42.667z" /> <glyph unicode="&#xeb07;" glyph-name="washing-machine" d="M853.333 938.667h-682.667c-47.067 0-85.333-38.267-85.333-85.333v-853.333c0-47.067 38.267-85.333 85.333-85.333h682.667c47.067 0 85.333 38.267 85.333 85.333v853.333c0 47.067-38.267 85.333-85.333 85.333zM853.333 853.334v-170.533c-94.533 27.2-215.6 42.533-341.333 42.533s-246.8-15.333-341.333-42.533v170.533h682.667zM853.333-0h-682.667v638.267c92.133 28.4 214 44.4 341.333 44.4s249.2-16 341.333-44.4v-638.267c0 0 0 0 0 0zM512 640c-79.733 0-154.8-31.067-211.2-87.467s-87.467-131.467-87.467-211.2 31.067-154.8 87.467-211.2c56.4-56.4 131.467-87.467 211.2-87.467s154.8 31.067 211.2 87.467c56.4 56.4 87.467 131.467 87.467 211.2s-31.067 154.8-87.467 211.2c-56.4 56.4-131.467 87.467-211.2 87.467zM512 128c-117.6 0-213.333 95.733-213.333 213.333s95.733 213.333 213.333 213.333c117.6 0 213.333-95.733 213.333-213.333s-95.733-213.333-213.333-213.333zM384 341.334h-42.667c0-94.133 76.533-170.667 170.667-170.667v42.667c-70.533 0-128 57.467-128 128zM768 810.667h42.667v-42.667h-42.667v42.667zM213.333 810.667h85.333v-42.667h-85.333v42.667zM341.333 810.667h42.667v-42.667h-42.667v42.667zM426.667 810.667h42.667v-42.667h-42.667v42.667z" />
<glyph unicode="&#xebce;" glyph-name="tv" d="M938.667 725.334h-853.333c-47.067 0-85.333-38.267-85.333-85.333v-597.333c0-47.067 38.267-85.333 85.333-85.333h853.333c47.067 0 85.333 38.267 85.333 85.333v597.333c0 47.067-38.267 85.333-85.333 85.333zM938.667 42.667h-853.333v597.333h853.333v-597.333zM149.333 85.334h554.667c11.733 0 21.333 9.6 21.333 21.333v469.333c0 11.733-9.6 21.333-21.333 21.333h-554.667c-11.733 0-21.333-9.6-21.333-21.333v-469.333c0-11.733 9.6-21.333 21.333-21.333zM170.667 554.667h512v-426.667h-512v426.667zM832 426.667c35.333 0 64 28.667 64 64s-28.667 64-64 64-64-28.667-64-64 28.667-64 64-64zM832 512c11.733 0 21.333-9.6 21.333-21.333s-9.6-21.333-21.333-21.333-21.333 9.6-21.333 21.333 9.6 21.333 21.333 21.333zM768 170.667h128v-42.667h-128v42.667zM768 256h128v-42.667h-128v42.667zM733.333 867.334l-22 36.667-219.333-131.6-176.267 132.133-25.6-34.133 187.733-140.8c3.733-2.8 8.267-4.267 12.8-4.267 3.733 0 7.6 1.067 10.933 3.067l231.733 138.933z" /> <glyph unicode="&#xebce;" glyph-name="tv" d="M938.667 725.334h-853.333c-47.067 0-85.333-38.267-85.333-85.333v-597.333c0-47.067 38.267-85.333 85.333-85.333h853.333c47.067 0 85.333 38.267 85.333 85.333v597.333c0 47.067-38.267 85.333-85.333 85.333zM938.667 42.667h-853.333v597.333h853.333v-597.333zM149.333 85.334h554.667c11.733 0 21.333 9.6 21.333 21.333v469.333c0 11.733-9.6 21.333-21.333 21.333h-554.667c-11.733 0-21.333-9.6-21.333-21.333v-469.333c0-11.733 9.6-21.333 21.333-21.333zM170.667 554.667h512v-426.667h-512v426.667zM832 426.667c35.333 0 64 28.667 64 64s-28.667 64-64 64-64-28.667-64-64 28.667-64 64-64zM832 512c11.733 0 21.333-9.6 21.333-21.333s-9.6-21.333-21.333-21.333-21.333 9.6-21.333 21.333 9.6 21.333 21.333 21.333zM768 170.667h128v-42.667h-128v42.667zM768 256h128v-42.667h-128v42.667zM733.333 867.334l-22 36.667-219.333-131.6-176.267 132.133-25.6-34.133 187.733-140.8c3.733-2.8 8.267-4.267 12.8-4.267 3.733 0 7.6 1.067 10.933 3.067l231.733 138.933z" />

Before

Width:  |  Height:  |  Size: 54 KiB

After

Width:  |  Height:  |  Size: 54 KiB

Binary file not shown.

Binary file not shown.

Binary file not shown.

View file

@ -15,6 +15,14 @@ $menu = '';
if($configuracion['mantemento']['activo'] && !$user->isLoggedin()) if($configuracion['mantemento']['activo'] && !$user->isLoggedin())
{ {
$menu = renderMenu($inicio->and($pages->get('/noticias')->and($pages->get('/contacto')))); $menu = renderMenu($inicio->and($pages->get('/noticias')->and($pages->get('/contacto'))));
?>
<main id="contido" class="completo">
<article id="inicio" class="completo">
<h1 class="visually-hidden"><?=ucfirst($inicio->title);?></h1>
<?=renderTextoMantemento($configuracion['mantemento']['titular'], $configuracion['mantemento']['artigo'], $configuracion['mantemento']['imaxe']);?>
</article>
</main>
<?php
} }
else else
{ {

View file

@ -1,7 +1,6 @@
function abrirMenu() function abrirMenu()
{ {
document.getElementById("menu-despregable").classList.add("despregado"); document.getElementById("menu-despregable").classList.add("despregado");
} }
function pecharMenu() function pecharMenu()

View file

@ -257,6 +257,32 @@ function renderMigasPan($paxina, $separador = '<i class="icon-chevrons-right"></
return $saida; return $saida;
} }
/**
* @param array|PageArray $artigos
* @param int $posicion
* @return string
*/
function renderPaxinacion($artigos, $posicion)
{
$paxinacion = $artigos->renderPager(
array(
'listMarkup' => '<nav id="paxinacion-' . $posicion . '" class="paxinacion"><ul>{out}</ul></nav>',
'itemMarkup' => '<li class="{class}">{out}</li>',
'linkMarkup' => '<a href="{url}"><span>{out}</span></a>',
'nextItemLabel' => '<i class="icon-skip-forward"></i>',
'previousItemLabel' => '<i class="icon-skip-back"></i>',
'separatorItemClass' => 'separador',
'nextItemClass' => 'seguinte',
'previousItemClass' => 'anterior',
'lastItemClass' => 'derradeiro',
'currentItemClass' => 'actual'
)
);
return $paxinacion;
}
/** /**
* @param string $titulo * @param string $titulo
* @param string $texto * @param string $texto
@ -271,7 +297,10 @@ function renderTextoMantemento($titulo, $texto, $imaxe)
$saida .= '<section id="mantemento" class="centrado">'; $saida .= '<section id="mantemento" class="centrado">';
$saida .= '<h2>' . $titulo . '</h2>'; $saida .= '<h2>' . $titulo . '</h2>';
$saida .= $texto; $saida .= $texto;
$saida .= '<figure>';
$saida .= '<img src="' . $imaxe->url . '" alt="' . $imaxe->description . '" loading="lazy">'; $saida .= '<img src="' . $imaxe->url . '" alt="' . $imaxe->description . '" loading="lazy">';
$saida .= '<figcaption>' . $imaxe->description . '</figcaption>';
$saida .= '</figure>';
$saida .= '</section>'; $saida .= '</section>';
return $saida; return $saida;
@ -429,14 +458,14 @@ function renderLigazonImaxe($seccion)
{ {
$saida = ''; $saida = '';
$saida .= '<figure>' . "\n"; $saida .= '<figure>';
$saida .= '<img src="' . $seccion->imaxe->url . '" alt="' . $seccion->imaxe->description . '" loading="lazy">'; $saida .= '<img src="' . $seccion->imaxe->url . '" alt="' . $seccion->imaxe->description . '" loading="lazy">';
$saida .= '<figcaption>' . "\n"; $saida .= '<figcaption>';
$saida .= '<h2>' . $seccion->titular . '</h2>' . "\n"; $saida .= '<h2>' . $seccion->titular . '</h2>';
$saida .= '<p>' . _x('See details', 'see details') . '</p>' . "\n"; $saida .= '<p>' . _x('See details', 'see details') . '</p>';
$saida .= '<a href=' . $seccion->ligazon_interna->url . '></a>' . "\n"; $saida .= '<a href=' . $seccion->ligazon_interna->url . '></a>';
$saida .= '</figcaption>' . "\n"; $saida .= '</figcaption>';
$saida .= '</figure>' . "\n"; $saida .= '</figure>';
return $saida; return $saida;
} }
@ -498,15 +527,150 @@ function renderLigazonImaxe($seccion)
$saida .= $seccion->artigo; $saida .= $seccion->artigo;
if($seccion->botons && $seccion->botons->isEmpty()) if($seccion->botons && $seccion->botons->isEmpty())
{ {
$saida .= '<div>' . "\n"; $saida .= '<div>';
$saida .= getSeccions($seccion->botons) . "\n"; $saida .= getSeccions($seccion->botons);
$saida .= '</div>' . "\n"; $saida .= '</div>';
} }
$saida .= '</div>' . "\n"; $saida .= '</div>' ;
return $saida; return $saida;
} }
/**
* @param array|PageArray $seccion
* @return string
*/
function renderCategoriasEtiquetas($seccion, $activo = false)
{
$saida = '';
switch ($seccion->first()->template->name)
{
case 'categoria':
$icono = 'folder';
$nome = 'categorias';
break;
case 'etiqueta':
$icono = 'tag';
$nome = 'etiquetas';
break;
}
$saida .= '<section id="' . $nome . '" class="acordeon">';
$saida .= '<input type="radio" name="plegable" id="plegable-' . $nome . '" ' . ($activo ? 'checked':'') . '>';
$saida .= '<h2>';
$saida .= '<label for="plegable-' . $nome . '">' . pages()->get('/noticias/' . $nome)->title . '</label>';
$saida .= '</h2>';
$saida .= '<ul>';
foreach($seccion as $item)
{
$saida .= '<li>';
$saida .= '<a href="' . $item->url . '"><i class="icon-' . $icono . '"></i> ' . $item->title . '</a>';
$saida .= '</li>';
}
$saida .= '</ul>';
$saida .= '</section>';
return $saida;
}
/**
* @param array|PageArray $publicacion
* @param string $locale
* @param boolean $resumen
* @return string
*/
function renderArtigos($publicacion, $locale, $resumen = true)
{
$saida = '';
$data = strtotime($publicacion->fecha_publicacion);
$dateFormatter = \IntlDateFormatter::create(
$locale,
\IntlDateFormatter::NONE,
\IntlDateFormatter::NONE,
\date_default_timezone_get(),
\IntlDateFormatter::GREGORIAN
);
$saida .= '<article id="' . $publicacion->name .'" class="artigo">';
$saida .= '<header>';
$saida .= '<time datetime="' . $publicacion->fecha_publicacion . '" title="' . $publicacion->fecha_publicacion . '">' ."\n";
$dateFormatter->setPattern('EEEE');
$saida .= '<em>' . ucfirst(datefmt_format($dateFormatter, $data)) . '</em>';
$dateFormatter->setPattern('MMMM');
$saida .= '<strong>' . ucfirst(datefmt_format($dateFormatter, $data)) . '</strong>';
$dateFormatter->setPattern('dd');
$saida .= '<span>' . datefmt_format($dateFormatter, $data) . '</span>';
$saida .= '</time>';
$saida .= '<h3>';
$saida .= '<a href="' . $publicacion->url . '"><i class="icon-' . (($resumen) ? 'book' : 'book-open') . '"></i> ' . $publicacion->title . '</a>';
$saida .= '</h3>';
$saida .= '<dl>';
$saida .= '<dt title="' . pages()->get('/noticias/categorias/')->title . '"><i class="icon-folder"></i><span> ' . pages()->get('/noticias/categorias/')->title . '</span></dt>';
$saida .= '<dd><a href="' . $publicacion->categorias->url . '">' . $publicacion->categorias->title . '</a></dd>';
$saida .= '<dt title="' . pages()->get('/noticias/etiquetas/')->title . '"><i class="icon-tag"></i><span> ' . pages()->get('/noticias/etiquetas/')->title . '</span></dt>';
$saida .= '<dd>' . $publicacion->etiquetas->each("<a href='{url}'>{title}</a> ") . '</dd>';
$saida .= '</dl>';
$saida .= '</header>';
if($resumen)
{
if($publicacion->imaxe)
{
$thumb = $publicacion->imaxe->size(0, 260);
$saida .= '<img src="' . $thumb->url . '" alt="' . $publicacion->imaxe->description . '">';
}
$saida .= '<div class="resumo mb-5">';
$saida .= '<p>' . renderResumen(getTextoLimpo(getSeccions($publicacion->seccions))) . '</p>';
$saida .= '<p><a href="' . $publicacion->url . '"><i class="icon-arrow-right"></i>' . _x("Read more", "Read more") . '</a></p>' ."\n";
$saida .= '</div>';
}
else
{
if($publicacion->imaxe)
{
$thumb = $publicacion->imaxe->size(0, 260);
$saida .= '<a href="' . $publicacion->imaxe->url . '"><img class="mw-100" src="' . $thumb->url . '" alt="' . $publicacion->imaxe->description . '"></a>';
}
$saida .= '<div class="secciones mb-5">';
$saida .= getSeccions($publicacion->seccions);
$saida .= '</div>';
}
$saida .= '</article>';
return $saida;
}
/**
* @param string $texto
* @param int $limite
* @param string $fin
* @return string
*/
function renderResumen($texto = '', $limite = 120, $fin = '...')
{
$saida = '';
if($texto == '') return '';
if(strlen($texto) <= $limite) return $texto;
$saida = substr($texto, 0, $limite);
$pos = strrpos($saida, " ");
if($pos>0)
{
$saida = substr($saida, 0, $pos);
}
$saida .= $fin;
return $saida;
}
@ -587,174 +751,7 @@ function renderBoton($seccion)
/**
* @param array|PageArray $seccion
* @return string
*/
function renderCategoriasEtiquetas($seccion)
{
$saida = '';
switch ($seccion->first()->template->name)
{
case 'categoria':
$icono = 'folder';
$nome = 'categorias';
break;
case 'etiqueta':
$icono = 'tag';
$nome = 'etiquetas';
break;
default:
$icono = 'sn';
$nome = 'sin';
break;
}
$saida .= '<div id="' . $nome . '" class="col p-3">' . "\n";
$saida .= '<a class="collapse-head" data-bs-toggle="collapse" href="#collapse-' . $nome . '" role="button" aria-expanded="false" aria-controls="collapse-' . $nome . '">' . "\n";
$saida .= '<h3>' . pages()->get('/noticias/' . $nome)->title . '</h3>' . "\n";
$saida .= '</a>' . "\n";
$saida .= '<div class="collapse" id="collapse-' . $nome . '">' . "\n";
$saida .= '<ul class="list-group">' . "\n";
foreach($seccion as $item)
{
$numPosts = pages()->count('template=publicacion, ' . $nome . '=' . $item->name);
$saida .= '<li class="list-group-item d-flex justify-content-between align-items-start">' . "\n";
$saida .= '<a class="ms-2 me-auto" href="' . $item->url . '"><i class="icon-' . $icono . '"></i> ' . $item->title . '</a>' . "\n";
$saida .= '<span class="badge bg-primary rounded-pill">(' . sprintf(_n('%d post', '%d posts', $numPosts), $numPosts) . ')</span>' . "\n";
$saida .= '</li>' . "\n";
}
$saida .= '</ul>' . "\n";
$saida .= '</div>' . "\n";
$saida .= '</div>' . "\n";
return $saida;
}
/**
* @param array|PageArray $artigos
* @param int $posicion
* @return string
*/
function renderPaxinacion($artigos, $posicion)
{
$paxinacion = $artigos->renderPager(
array(
'listMarkup' => '<nav id="paxinacion-' . $posicion . '" class="paxinacion"><ul>{out}</ul></nav>',
'itemMarkup' => '<li class="{class}">{out}</li>',
'linkMarkup' => '<a href="{url}"><span>{out}</span></a>',
'nextItemLabel' => '<i class="icon-skip-forward"></i>',
'previousItemLabel' => '<i class="icon-skip-back"></i>',
'separatorItemClass' => 'separador',
'nextItemClass' => 'seguinte',
'previousItemClass' => 'anterior',
'lastItemClass' => 'derradeiro',
'currentItemClass' => 'actual'
)
);
return $paxinacion;
}
/**
* @param array|PageArray $publicacion
* @param string $locale
* @param boolean $resumen
* @return string
*/
function renderArtigos($publicacion, $locale, $resumen = true)
{
$saida = '';
$data = strtotime($publicacion->fecha_publicacion);
$dateFormatter = \IntlDateFormatter::create(
$locale,
\IntlDateFormatter::NONE,
\IntlDateFormatter::NONE,
\date_default_timezone_get(),
\IntlDateFormatter::GREGORIAN
);
$saida .= '<article id="' . $publicacion->name .'" class="container">' . "\n";
$saida .= '<header class="d-flex gap-3 mb-3">' . "\n";
$saida .= '<time datetime="' . $publicacion->fecha_publicacion . '">' ."\n";
$dateFormatter->setPattern('EEEE');
$saida .= '<em>' . ucfirst(datefmt_format($dateFormatter, $data)) . '</em>' . "\n";
$dateFormatter->setPattern('MMMM');
$saida .= '<strong>' . ucfirst(datefmt_format($dateFormatter, $data)) . '</strong>' . "\n";
$dateFormatter->setPattern('dd');
$saida .= '<span>' . datefmt_format($dateFormatter, $data) . '</span>' . "\n";
$saida .= '</time>' . "\n";
$saida .= '<div>' . "\n";
$saida .= '<h3 class="publicacion-titulo">' . "\n";
$saida .= '<a href="' . $publicacion->url . '"><i class="icon-' . (($resumen) ? 'book' : 'book-open') . '"></i> ' . $publicacion->title . '</a>' . "\n";
$saida .= '</h3>' . "\n";
$saida .= '<dl>' . "\n";
$saida .= '<dt title="' . pages()->get('/noticias/categorias/')->title . '"><i class="icon-folder"></i><span class="d-none d-lg-inline"> ' . pages()->get('/noticias/categorias/')->title . '</span></dt>' . "\n";
$saida .= '<dd><a href="' . $publicacion->categorias->url . '">' . $publicacion->categorias->title . '</a></dd>' . "\n";
$saida .= '<dt title="' . pages()->get('/noticias/etiquetas/')->title . '"><i class="icon-tag"></i><span class="d-none d-lg-inline"> ' . pages()->get('/noticias/etiquetas/')->title . '</span></dt>' . "\n";
$saida .= '<dd>' . $publicacion->etiquetas->each("<a href='{url}'>{title}</a>") . '</dd>' . "\n";
$saida .= '</dl>' . "\n";
$saida .= '</div>' . "\n";
$saida .= '</header>' . "\n";
if($resumen)
{
if($publicacion->imaxe)
{
$thumb = $publicacion->imaxe->size(466, 260);
$saida .= '<img class="mw-100" src="' . $thumb->url . '" alt="' . $publicacion->imaxe->description . '">' . "\n";
}
$saida .= '<div class="resumo mb-5">' . "\n";
$saida .= '<p>' . renderResumen(getTextoLimpo(getSeccions($publicacion->seccions))) . '</p>' . "\n";
$saida .= '<p><a href="' . $publicacion->url . '"><i class="icon-arrow-right"></i>' . _x("Read more", "Read more") . '</a></p>' ."\n";
$saida .= '</div>' . "\n";
}
else
{
if($publicacion->imaxe)
{
$thumb = $publicacion->imaxe->size(466, 260);
$saida .= '<a href="' . $publicacion->imaxe->url . '"><img class="mw-100" src="' . $thumb->url . '" alt="' . $publicacion->imaxe->description . '"></a>' . "\n";
}
$saida .= '<div class="secciones mb-5">' . "\n";
$saida .= getSeccions($publicacion->seccions) . "\n";
$saida .= '</div>' . "\n";
}
$saida .= '</article>' . "\n";
return $saida;
}
/**
* @param string $texto
* @param int $limite
* @param string $fin
* @return string
*/
function renderResumen($texto = '', $limite = 120, $fin = '...')
{
$saida = '';
if($texto == '') return '';
if(strlen($texto) <= $limite) return $texto;
$saida = substr($texto, 0, $limite);
$pos = strrpos($saida, " ");
if($pos>0)
{
$saida = substr($saida, 0, $pos);
}
$saida .= $fin;
return $saida;
}

View file

@ -1,18 +1,42 @@
<?php namespace ProcessWire; <?php namespace ProcessWire;
/** @var Page $page API variable */ /** @var Page $page */
/** @var Pages $pages */
/** @var Config $config */
/** @var Sanitizer $sanitizer API variable */
/** @var WireInput $input API variable */
/** @var User $user API variable */
/** @var Languages $languages API variable */
/** @var SiteConfig $configuracion */
/** @var HomePage $inicio */
$menu = ''; $menu = '';
$contido = '';
if($configuracion['mantemento']['activo'] && !$user->isLoggedin()) if($configuracion['mantemento']['activo'] && !$user->isLoggedin())
{ {
$menu = renderMenu($pages->get('/noticias')->and($pages->get('/contacto'))); $menu = renderMenu($inicio->and($pages->get('/noticias')->and($pages->get('/contacto'))));
} }
else else
{ {
$menu = renderMenu($inicio->children); $menu = renderMenu($inicio->and($inicio->children));
} }
$contido .= renderMigasPan($page) . "\n"; $categorias = pages()->get('/noticias/categorias/')->children();
$contido .= renderArtigos($page, $languages->getLocale(), false); $etiquetas = pages()->get('/noticias/etiquetas/')->children();
?>
<main id="contido" class="completo">
<nav id="migas" aria-label="<?=_x("Breadcrumb", "Breadcrumb");?>">
<?=renderMigasPan($page);?>
</nav>
<section id="<?=$page->name;?>" class="noticias destacado">
<h1 class="visually-hidden"><?=ucfirst($page->title);?></h1>
<aside>
<?=renderCategoriasEtiquetas($categorias);?>
<?=renderCategoriasEtiquetas($etiquetas, true);?>
</aside>
<div>
<?=renderArtigos($page, $languages->getLocale(), false);?>
</div>
</section>
</main>
<?php

View file

@ -1,103 +0,0 @@
<?php namespace ProcessWire;
define("RECAPTCHA_V3_SECRET_KEY", '6LexXqYiAAAAAOoFqs4kfWd7zW6stVRK0aViyiQo');
if($input->post->usuario && $input->post->contrasinal)
{
$user = $sanitizer->username($input->post->usuario);
$pass = $input->post->contrasinal;
}
$token = $input->post->token;
$action = $input->post->action;
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,"https://www.google.com/recaptcha/api/siteverify");
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query(array('secret' => RECAPTCHA_V3_SECRET_KEY, 'response' => $token)));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);
curl_close($ch);
$arrResponse = json_decode($response, true);
if($arrResponse["success"] == '1' && $arrResponse["action"] == $action && $arrResponse["score"] >= 0.5)
{
if($session->login($user, $pass))
{
$session->redirect($page->parent->httpUrl);
}
else
{
$mensaxe_tipo = "erro";
$mensaxe = _x('Wrong username or password', 'Wrong username or password');
}
}
else
{
$mensaxe_tipo = "alerta";
$mensaxe = _x('Wrong reCaptcha', 'Wrong reCaptcha');
}
?><!DOCTYPE html>
<html lang="<?php echo _x('en', 'HTML language code'); ?>">
<head>
<title><?php echo $titulo; ?></title>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="icon" type="image/png" sizes="32x32" href="<?php echo $config->urls->templates; ?>images/favicon-32x32.png">
<link rel="shortcut icon" href="<?php echo $config->urls->templates; ?>images/favicon.ico">
<link rel="stylesheet" type="text/css" href="<?php echo $config->urls->templates; ?>css/reset.css">
<link rel="stylesheet" type="text/css" href="<?php echo $config->urls->templates; ?>css/fonts.css">
<link rel="stylesheet" type="text/css" href="<?php echo $config->urls->templates; ?>vendors/Bootstrap/css/bootstrap.css">
<link rel="stylesheet" type="text/css" href="<?php echo $config->urls->templates; ?>vendors/Swiperjs/css/swiper-bundle.min.css">
<link title="Praia de Seselle" rel="stylesheet" type="text/css" href="<?php echo $config->urls->templates?>css/style.css">
<style>
:root
{
font-size: 16px;
--cor_60: <?php echo $configuracion['cor_fondo'] ?>;
--cor_30: <?php echo $configuracion['cor_principal'] ?>;
--cor_10: <?php echo $configuracion['cor_secundario'] ?>;
--imaxe_destacada: <?php echo $page->imaxe ? 'url("'. $page->imaxe->url . '")' : 'none'; ?>;
}
</style>
</head>
<body class="signin text-center">
<main class="form-signin w-100 m-auto">
<form id="inicio-sesion" onSubmit="getLogin(event)" action="/es/gestion/acceder/" method='post'>
<picture class="mb-4">
<source srcset="<?php echo $config->urls->templates?>images/logo-praia-seselle-150x116.jpg" media="(max-width: 767px)">
<source srcset="<?php echo $config->urls->templates?>images/logo-praia-seselle-230x179.jpg" media="(min-width: 768px)">
<img src="<?php echo $config->urls->templates?>images/logo-praia-seselle.svg" alt="<?php echo _x('Logo of Praia de Seselle Tourist Apartments', 'Site logo'); ?>">
</picture>
<h1 class="visually-hidden"><?php echo $configuracion['sitio_nome']; ?> <?php echo $configuracion['sitio_descripcion']; ?></h1>
<h2 class="h3 mb-3 fw-normal"><?php echo _x('Log in', 'Log in'); ?></h2>
<div class="form-floating">
<input type="text" class="form-control" id="usuario" placeholder="<?php echo _x('Username', 'Username') ?>">
<label for="usuario"><?php echo _x('Username', 'Username') ?>:</label>
</div>
<div class="form-floating">
<input type="password" class="form-control" id="contrasinal" placeholder="<?php echo _x('Password', 'Password') ?>">
<label for="contrasinal"><?php echo _x('Password', 'Password') ?>:</label>
</div>
<?php if($input->post->usuario): ?>
<div id="notificacions" class="<?php echo $mensaxe_tipo; ?>">
<h3><i class="icon-x-circle"></i> <?php echo $mensaxe ?></h2>
</div>
<?php endif; ?>
<div class="checkbox mb-3">
<label>
<input type="checkbox" value="remember-me"> Remember me
</label>
</div>
<input class="w-100 btn btn-lg btn-primary" type="submit" id="enviar" name="enviar" value="<?php echo _x('Log in', 'Log in'); ?>">
<p>&copy;2022 <?php echo $configuracion['sitio_nome']
. ' ' . $configuracion['sitio_descripcion']; ?>.</p>
</form>
</main>
<script src="https://www.google.com/recaptcha/api.js?render=6LexXqYiAAAAACwDpMGIg1OMnAXVJU0VmbEMQUD8"></script>
<script src="<?php echo $config->urls->templates?>vendors/Swiperjs/js/swiper-bundle.min.js"></script>
<script src="<?php echo $config->urls->templates?>js/main.js"></script>
</body>
</html>