Compare commits

...

10 Commits

Author SHA1 Message Date
chankalan e34bddb933 v2.5.14 2024-03-28 18:01:03 +01:00
chankalan d3ed887275 corrections pour la page mot et liste articles 2024-03-28 17:57:43 +01:00
chankalan 7bb921474a sans adaptive images qui peine sur les installations de type
mutualisation
2023-05-15 16:14:39 +02:00
chankalan 7b17c554b5 pas de pagination dans l'url mais dans l'inclure 2023-04-03 10:17:43 +02:00
chankalan 24979e29e8 ajax sur liste articles blog 2023-04-03 10:06:03 +02:00
chankalan 094b4e62b9 coquille : .liste_articles = .liste.articles 2023-04-03 09:17:10 +02:00
chankalan 444ba6a0ad on tente une dissuasion de plus face aux spams d'inscription à la liste 2023-03-30 13:34:39 +02:00
chankalan 1018d151ea compatible SPIP 4.2 2023-03-30 11:00:44 +02:00
chankalan 108dcf5fe1 liste article resumé avec pagination page sans precedent/suivant 2022-12-05 12:05:12 +01:00
chankalan 93d7e64559 pagination visible en petit écran + v2.5.13 2022-12-05 11:54:52 +01:00
9 changed files with 177 additions and 154 deletions

View File

@ -1,92 +1,106 @@
<?php
if (!defined("_ECRIRE_INC_VERSION")) return;
include_spip('base/abstract_sql');
// chargement des valeurs par defaut des champs du formulaire
function formulaires_abomailman_mini_une_liste_charger_dist($id_abomailman = ""){
//initialise les variables d'environnement pas defaut
$valeurs = array('email');
// On verifie que la liste est bien accessible
if (! sql_getfetsel('id_abomailman','spip_abomailmans','id_abomailman ='.intval($id_abomailman).' AND desactive = 0')) {
spip_log("Le numero de liste n'est pas valable : $id_abomailman","abomailmans");
$valeurs['message_erreur'] = _T("abomailmans:liste_non_existante");
}
return $valeurs;
}
function formulaires_abomailman_mini_une_liste_verifier_dist($id_abomailman = ""){
//initialise le tableau des erreurs
$erreurs = array();
// Faire une fonction de verif sur le mail pour validite
$email = _request('email');
if($email == ''){
$erreurs['erreur_email'] = _T("abomailmans:email_oublie");
spip_log("Aucun email n'est insere","abomailmans");
}
else{
include_spip('inc/filtres'); # pour email_valide()
if (!email_valide($email)){
$erreurs['erreur_email'] = _T("abomailmans:email_valide");
spip_log("Email non valide $email","abomailmans");
}
else{
spip_log("Email = $email;","abomailmans");
}
}
//message d'erreur
if (count($erreurs)) {
$erreurs['message_erreur'] .= _T('abomailmans:verifier_formulaire');
}
return $erreurs; // si c'est vide, traiter sera appele, sinon le formulaire sera resoumis
}
function formulaires_abomailman_mini_une_liste_traiter_dist($id_abomailman = ""){
include_spip('inc/abomailmans');
$nom = _request('nom');
$email = _request('email');
// Antispam basique :
// si l'input invisible a ete renseigne, ca ne peut etre qu'un bot
if (strlen(_request('nobot'))){
return array('message_erreur'=>_T('abomailmans:erreur_nobot'));
}
$message = null;
// on initialise l'envoi
// on traite chaque liste via une fonction reutilisable ailleurs
// on passe abonnement a true d'office
$traiter = abomailman_traiter_abonnement($id_abomailman,true);
$titre = $traiter[0];
$proprio_email = $traiter[1];
$liste_email = $traiter[2];
$sujet = $traiter[3];
$body = "$nom - $email ".$traiter[4];
$headers = $traiter[5];
if (abomailman_mail($nom, $email, $proprio_email, $liste_email, $sujet, $body, $headers)){
$message_listes .= "<p><strong>$titre</strong><p>";
} else {
$message_listes .= "<p><strong>". _T('pass_erreur_probleme_technique')."</strong></p>";
$probleme=true;
}
$message .= "<p>" . _T("abomailmans:message_confirm_suite") . "</p>";
if ($probleme==false) {
return array('message_ok' => $message);
} else {
return array('message_erreur' => $message_listes);
}
}
<?php
if (!defined("_ECRIRE_INC_VERSION")) return;
include_spip('base/abstract_sql');
// chargement des valeurs par defaut des champs du formulaire
function formulaires_abomailman_mini_une_liste_charger_dist($id_abomailman = ""){
//initialise les variables d'environnement pas defaut
$valeurs = array('email');
// On verifie que la liste est bien accessible
if (! sql_getfetsel('id_abomailman','spip_abomailmans','id_abomailman ='.intval($id_abomailman).' AND desactive = 0')) {
spip_log("Le numero de liste n'est pas valable : $id_abomailman","abomailmans");
$valeurs['message_erreur'] = _T("abomailmans:liste_non_existante");
}
return $valeurs;
}
function formulaires_abomailman_mini_une_liste_verifier_dist($id_abomailman = ""){
//initialise le tableau des erreurs
$erreurs = array();
// Faire une fonction de verif sur le mail pour validite
$email = _request('email');
if($email == ''){
$erreurs['erreur_email'] = _T("abomailmans:email_oublie");
spip_log("Aucun email n'est insere","abomailmans");
}
else{
include_spip('inc/filtres'); # pour email_valide()
if (!email_valide($email)){
$erreurs['erreur_email'] = _T("abomailmans:email_valide");
spip_log("Email non valide $email","abomailmans");
}
else{
spip_log("Email = $email;","abomailmans");
}
}
//message d'erreur
if (count($erreurs)) {
$erreurs['message_erreur'] .= _T('abomailmans:verifier_formulaire');
}
return $erreurs; // si c'est vide, traiter sera appele, sinon le formulaire sera resoumis
}
function formulaires_abomailman_mini_une_liste_traiter_dist($id_abomailman = ""){
include_spip('inc/abomailmans');
function baz_april_abo() {
$nom = _request('nom');
$email = _request('email');
// Antispam basique :
// si l'input invisible a ete renseigne, ca ne peut etre qu'un bot
if (strlen(_request('nobot'))){
return array('message_erreur'=>_T('abomailmans:erreur_nobot'));
}
$message = null;
// on initialise l'envoi
// on traite chaque liste via une fonction reutilisable ailleurs
// on passe abonnement a true d'office
$traiter = abomailman_traiter_abonnement($id_abomailman,true);
$titre = $traiter[0];
$proprio_email = $traiter[1];
$liste_email = $traiter[2];
$sujet = $traiter[3];
$body = "$nom - $email ".$traiter[4];
$headers = $traiter[5];
if (abomailman_mail($nom, $email, $proprio_email, $liste_email, $sujet, $body, $headers)){
$message_listes .= "<p><strong>$titre</strong><p>";
} else {
$message_listes .= "<p><strong>". _T('pass_erreur_probleme_technique')."</strong></p>";
$probleme=true;
}
$message .= "<p>" . _T("abomailmans:message_confirm_suite") . "</p>";
if ($probleme==false) {
return array('message_ok' => $message);
} else {
return array('message_erreur' => $message_listes);
}
}
// conditionner l'action au rechargement de la page
// https://contrib.spip.net/NoSPAM#S-assurer-que-l-internaute-recharge-la-page-avant-de-lancer-l-action
include_spip('inc/nospam');
if (function_exists('nospam_confirm_action_html')) {
$html_confirm = nospam_confirm_action_html("baz_april_abo", "action abomailmans", $args);
$res['message_ok'] .= $html_confirm;
}
else {
// ICI lancer normalement mafonction()
baz_april_abo();
}
}

View File

@ -1,10 +1,10 @@
<paquet
prefix="baz_april"
categorie="squelette"
version="2.5.12"
version="2.5.14"
schema="1.0.1"
etat="stable"
compatibilite="[3.2.0;4.1.*]"
compatibilite="[3.2.0;4.2.*]"
logo="prive/themes/spip/images/baz_april-64.png"
documentation=""
>
@ -25,7 +25,7 @@
<necessite nom="tri_par_rubrique"/>
<necessite nom="scssphp"/>
<necessite nom="zcore"/>
<necessite nom="adaptive_images" />
<!-- <necessite nom="adaptive_images" /> -->
<necessite nom="centre_image"/>
<necessite nom="pages" />
<necessite nom="porte_plume_intertitres" />

View File

@ -4,9 +4,9 @@
[<div class="ps">
<div class="#EDIT{ps} article__ps">(#PS|image_reduire{#CONST{_CONTENT_WIDTH},0})</div>
</div>]
[(#REM) Articles dans la meme rubrique ]
<INCLURE{fond=inclure/liste/articles-resume,env,ajax,parpage=5} />
<INCLURE{fond=inclure/liste/articles-resume, env, ajax, parpage=5, debut_articlesdate=@#ID_ARTICLE, debut_articles=@#ID_ARTICLE} />
[(#PS|ou{#GET{plusdun}|=={oui}}|oui)</aside>]
</BOUCLE_article>

View File

@ -11,7 +11,18 @@
<aside>
[(#REM) Articles lies au mot-cle ]
<INCLURE{fond=inclure/liste/articles-resume,env,ajax,id_mot,titre=<:baz_april:articles_lies:>} />
<B_articles>
<div class="liste articles">#ANCRE_PAGINATION
<h2 class="h2"><:baz_april:articles_lies:></h2>
<ul class="liste-items">
<BOUCLE_articles(ARTICLES){id_mot}{lang}{!par date}{pagination 10}>
<li class="item"><INCLURE{fond=inclure/resume/article, id_article, env, h=h3, expose=#EXPOSE} /></li>
</BOUCLE_articles>
</ul>
[<nav class="pagination" role="pagination">(#PAGINATION{page})</nav>]
</div>
</B_articles>
[(#REM) Rubriques liees au mot-cle ]
<B_rubriques>

View File

@ -9,33 +9,11 @@
<div class="main">
[<div class="#EDIT{texte} chapo">(#TEXTE|adaptive_images{#CONST{_CONTENT_WIDTH}})</div>]
#SET{'debut_mois', (#ENV{datetri}|baz_moisdecal{0,'Y-m-d'})}
#SET{'fin_mois', (#ENV{datetri}|baz_moisdecal{1,'Y-m-d'})}
<B_articlesdate>
<div class="liste articles blog">
[<h2 class="h2[ (#ENV{datetri}|oui)date]">(#ENV{datetri}|affdate{nom_mois})[(#ENV{datetri}|affdate{Y}|!={[(#VAL{Y}|date)]}|oui)[ (#ENV{datetri}|affdate{Y})]]</h2>]
<ul class="liste-items">
<BOUCLE_articlesdate(ARTICLES){si #ENV{datetri}|?{' '}}{date < #GET{fin_mois}}{date >= #GET{debut_mois}}{id_rubrique}{tri_rubrique}>
<li class="item clearfix">#INCLURE{fond=inclure/resume/article,id_article,env,composition=blog,h=h3,pagination=oui}</li>
</BOUCLE_articlesdate>
</ul>
</div>
</B_articlesdate>
<div class="liste articles blog">
[<h2 class="h2[ (#ENV{datetri}|oui)date]"><:baz_april:aucun_article_dans_cette_periode:> : (#ENV{datetri}|affdate{nom_mois})[(#ENV{datetri}|affdate{Y}|!={[(#VAL{Y}|date)]}|oui)[ (#ENV{datetri}|affdate{Y})]]</h2>]
<B_articles>#ANCRE_PAGINATION
<ul class="liste-items">
<BOUCLE_articles(ARTICLES){id_rubrique}{lang}{tri_rubrique}{pagination 10}>
<li class="item clearfix">#INCLURE{fond=inclure/resume/article,id_article,env,composition=blog,h=h3,pagination=oui}</li>
</BOUCLE_articles>
</ul>
[<nav class="pagination">(#PAGINATION)</nav>]
</B_articles>
</div>
<//B_articlesdate>
[(#REM) inclure en ajax la liste des articles]
<INCLURE{fond=inclure/liste/articles-blog, env, ajax} />
[(#REM) pour les sous-rubriques, on utilise le modele <rubriqueXX|rubriques> dans le texte si on veut]
</div><!-- .main -->
<aside>

View File

@ -0,0 +1,26 @@
<BOUCLE_rubrique(RUBRIQUES){id_rubrique}>
#SET{'debut_mois', (#ENV{datetri}|baz_moisdecal{0,'Y-m-d'})}
#SET{'fin_mois', (#ENV{datetri}|baz_moisdecal{1,'Y-m-d'})}
<B_articlesdate>
<div class="liste articles blog">
[<h2 class="h2[ (#ENV{datetri}|oui)date]">(#ENV{datetri}|affdate{nom_mois})[(#ENV{datetri}|affdate{Y}|!={[(#VAL{Y}|date)]}|oui)[ (#ENV{datetri}|affdate{Y})]]</h2>]
<ul class="liste-items">
<BOUCLE_articlesdate(ARTICLES){si #ENV{datetri}|?{' '}}{date < #GET{fin_mois}}{date >= #GET{debut_mois}}{id_rubrique}{tri_rubrique}>
<li class="item clearfix">#INCLURE{fond=inclure/resume/article,id_article,env,composition=blog,h=h3,pagination=oui}</li>
</BOUCLE_articlesdate>
</ul>
</div>
</B_articlesdate>
<div class="liste articles blog">
[<h2 class="h2[ (#ENV{datetri}|oui)date]"><:baz_april:aucun_article_dans_cette_periode:> : (#ENV{datetri}|affdate{nom_mois})[(#ENV{datetri}|affdate{Y}|!={[(#VAL{Y}|date)]}|oui)[ (#ENV{datetri}|affdate{Y})]]</h2>]
<B_articles>#ANCRE_PAGINATION
<ul class="liste-items">
<BOUCLE_articles(ARTICLES){id_rubrique}{lang}{tri_rubrique}{pagination 10}>
<li class="item clearfix">#INCLURE{fond=inclure/resume/article,id_article,env,composition=blog,h=h3,pagination=oui}</li>
</BOUCLE_articles>
</ul>
[<nav class="pagination">(#PAGINATION)</nav>]
</B_articles>
</div>
<//B_articlesdate>
</BOUCLE_rubrique>

View File

@ -1,12 +1,12 @@
<B_articles>
<div class="liste_articles">#ANCRE_PAGINATION
<div class="liste articles">#ANCRE_PAGINATION
[(#ENV{titre}|!={non}|oui)[<h2 class="h2">(#ENV{titre})</h2>]]
<ul class="liste-items[ (#ENV{liste_class})]">
<BOUCLE_articles(ARTICLES){id_rubrique!=-1}{id_rubrique?}{id_secteur?}{id_mot?}{lang}{tri_rubrique}{! par date}{0,#ENV{nb,1001}}{pagination #ENV{parpage,10}}>
<li class="item"><INCLURE{fond=inclure/resume/article, id_article, env, couper=#ENV{couper}, compteur=#COMPTEUR_BOUCLE, h=h3,pagination=oui,expose=#EXPOSE} /></li>
</BOUCLE_articles>
</ul>
[<nav class="pagination" role="pagination">(#PAGINATION{page_precedent_suivant})</nav>]
[<nav class="pagination" role="pagination">(#PAGINATION{page})</nav>]
[(#ENV{voirtous}|oui)#MODELE{bouton,lienobjet=#ENV{lienobjet}|sinon{rubrique},lienidobjet=#ENV{lienidobjet}|sinon{#ENV{id_rubrique}}|sinon{#ENV{id_secteur}},align=#ENV{align,right},class=voirtous #ENV{class},icone=#ENV{icone},texte=#ENV{voirtous}}]
</div>
</B_articles>

View File

@ -12,7 +12,7 @@
]
[(#ENV{compteur}|=={1}|et{#ENV{hero}|=={oui}}|oui)</a>][(#LOGO_ARTICLE_NORMAL|oui)</div>]
<div class="article-resume__texte">
<[(#ENV{h,h2})] class="article-resume__titre"><a href="[(#ENV{pagination}|=={oui}|oui)[(#URL_ARTICLE)]][(#ENV{pagination}|!={oui}|oui)#URL_ARTICLE]" class="[(#ENV{hero}|=={oui}|oui)[(#ENV{compteur}|=={1}|non)block-link]][(#ENV{hero}|=={oui}|non)block-link][ (#ENV{class_link})][ (#ENV{expose})]">#TITRE</a></[(#ENV{h,h2})]>
<[(#ENV{h,h2})] class="article-resume__titre"><a href="#URL_ARTICLE" class="[(#ENV{hero}|=={oui}|oui)[(#ENV{compteur}|=={1}|non)block-link]][(#ENV{hero}|=={oui}|non)block-link][ (#ENV{class_link})][ (#ENV{expose})]">#TITRE</a></[(#ENV{h,h2})]>
[<p class="article-resume__soustitre">(#SOUSTITRE)</p>][(#ENV{compteur}|=={1}|et{#ENV{hero}|=={oui}}|oui)[(#COMPOSITION|=={blog}|non)
<a href="#URL_ARTICLE" class="btn[ (#ENV{class_link})][ (#EXPOSE)]"><:baz_april:lire:></a>]]
[(#GET{date}|=={oui}|oui)<div class="article-resume__infos">

View File

@ -31,6 +31,7 @@
display: flex;
justify-content: space-between;
align-items: center;
flex-wrap: wrap;
.on {
color: #FFF;
background-color: $couleur-lien;
@ -51,19 +52,12 @@
color: #838383;
}
@include media($bp-small) {
.pages .lien_pagination,
.pages .tbc {
display: none;
}
}
}
.pagination_ancre {
@include visuallyhidden;
padding:0 !important;
margin:0 !important;
padding: 0 !important;
margin: 0 !important;
}
.col .prev,
@ -75,31 +69,31 @@
.pagination, .aside .nav .pagination {
margin: 2em 0;
.pagination-items {
display:flex;
justify-content:center;
flex-wrap:wrap;
list-style:none;
display: flex;
justify-content: center;
flex-wrap: wrap;
list-style: none;
}
.pagination-item {
padding:0;
background:none;
margin:0 0.15em 0.5em;
padding: 0;
background: none;
margin: 0 0.15em 0.5em;
}
.pagination-items a, .pagination-items span.on {
display:inline-block;
text-decoration:none;
border:none;
padding:0.5em;
display: inline-block;
text-decoration: none;
border: none;
padding: 0.5em;
@include vendor-prefix(border-radius,0.25em);
font-size:1em;
font-weight:700;
line-height:1.5;
color:$couleur-lien;
font-size: 1em;
font-weight: 700;
line-height: 1.5;
color: $couleur-lien;
}
.pagination-items a:hover, .pagination-items span.on {
background:$grayLighter !important;
color:$couleur-lien-hover;
text-decoration:none;
background: $grayLighter !important;
color: $couleur-lien-hover;
text-decoration: none;
}
.tbc {
line-height: 2.4;