Intégration des pages en colonne

This commit is contained in:
fredtempez 2019-01-04 22:12:04 +01:00
commit 1fc8061236
12 changed files with 316 additions and 42 deletions

View File

@ -5,6 +5,7 @@
- Stockage distinct du thème et des autres données (core, config, page, module et users ) avec import des données d'une version 8 - Stockage distinct du thème et des autres données (core, config, page, module et users ) avec import des données d'une version 8
- Exporter un thème (avec les images) sous forme d'une archive ZIP à télécharger ou stocker dans Fichiers. - Exporter un thème (avec les images) sous forme d'une archive ZIP à télécharger ou stocker dans Fichiers.
- Importer un thème à partir des fichiers - Importer un thème à partir des fichiers
- Deux blocs (colonnes) à droite ou à gauche contenant des informations fixes, le paramétage est dans le thème, mais les contenus sont stockés dans les pages.
## Verison 8.5.3 ## Verison 8.5.3
* Modification : * Modification :

View File

@ -176,6 +176,38 @@ class common {
'group' => self::GROUP_VISITOR, 'group' => self::GROUP_VISITOR,
'targetBlank' => false, 'targetBlank' => false,
'title' => 'Contact' 'title' => 'Contact'
],
'blockRight' => [
'typeMenu' => '',
'iconUrl' => '',
'disable' => false,
'content' => '<p>Bloc à droite du site</p>',
'hideTitle' => false,
'metaDescription' => '',
'metaTitle' => '',
'moduleId' => '',
'modulePosition' => '',
'parentPageId' => '',
'position' => 0,
'group' => self::GROUP_VISITOR,
'targetBlank' => false,
'title' => 'blockRight'
],
'blockLeft' => [
'typeMenu' => '',
'iconUrl' => '',
'disable' => false,
'content' => '<p>Bloc à gauche du site</p>',
'hideTitle' => false,
'metaDescription' => '',
'metaTitle' => '',
'moduleId' => '',
'modulePosition' => '',
'parentPageId' => '',
'position' => 0,
'group' => self::GROUP_VISITOR,
'targetBlank' => false,
'title' => 'blockLeft'
] ]
], ],
'module' => [ 'module' => [
@ -349,7 +381,8 @@ class common {
'backgroundColor' => 'rgba(255, 255, 255, 1)', 'backgroundColor' => 'rgba(255, 255, 255, 1)',
'radius' => '0', 'radius' => '0',
'shadow' => '0', 'shadow' => '0',
'width' => '1170px' 'width' => '1170px',
'blocks' => '100'
], ],
'text' => [ 'text' => [
'font' => 'Open+Sans', 'font' => 'Open+Sans',
@ -994,7 +1027,7 @@ class common {
} }
// Version 9.0.0 // Version 9.0.0
if($this->getData(['core', 'dataVersion']) < 900) { if($this->getData(['core', 'dataVersion']) < 900) {
$this->setData(['theme', 'site', 'blocks','100']);
$this->setData(['core', 'dataVersion', 900]); $this->setData(['core', 'dataVersion', 900]);
$this->SaveData(); $this->SaveData();
} }
@ -1999,8 +2032,6 @@ class layout extends common {
$targetBlank = $this->getData(['page', $childKey, 'targetBlank']) ? ' target="_blank"' : ''; $targetBlank = $this->getData(['page', $childKey, 'targetBlank']) ? ' target="_blank"' : '';
// Mise en page du sous-item // Mise en page du sous-item
// Menu Image
if ( $this->getData(['page',$childKey,'disable']) === true if ( $this->getData(['page',$childKey,'disable']) === true
AND $this->getUser('password') !== $this->getInput('ZWII_USER_PASSWORD') ) AND $this->getUser('password') !== $this->getInput('ZWII_USER_PASSWORD') )
@ -2133,11 +2164,15 @@ class layout extends common {
$leftItems .= '<option value="">Choisissez une page</option>'; $leftItems .= '<option value="">Choisissez une page</option>';
$currentPageId = $this->getData(['page', $this->getUrl(0)]) ? $this->getUrl(0) : $this->getUrl(2); $currentPageId = $this->getData(['page', $this->getUrl(0)]) ? $this->getUrl(0) : $this->getUrl(2);
foreach($this->getHierarchy(null, false) as $parentPageId => $childrenPageIds) { foreach($this->getHierarchy(null, false) as $parentPageId => $childrenPageIds) {
if ($parentPageId === 'blockLeft'
OR $parentPageId === 'blockRight') { continue; }
$leftItems .= '<option value="' . helper::baseUrl() . $parentPageId . '"' . ($parentPageId === $currentPageId ? ' selected' : false) . '>' . $this->getData(['page', $parentPageId, 'title']) . '</option>'; $leftItems .= '<option value="' . helper::baseUrl() . $parentPageId . '"' . ($parentPageId === $currentPageId ? ' selected' : false) . '>' . $this->getData(['page', $parentPageId, 'title']) . '</option>';
foreach($childrenPageIds as $childKey) { foreach($childrenPageIds as $childKey) {
$leftItems .= '<option value="' . helper::baseUrl() . $childKey . '"' . ($childKey === $currentPageId ? ' selected' : false) . '>&nbsp;&nbsp;&nbsp;&nbsp;' . $this->getData(['page', $childKey, 'title']) . '</option>'; $leftItems .= '<option value="' . helper::baseUrl() . $childKey . '"' . ($childKey === $currentPageId ? ' selected' : false) . '>&nbsp;&nbsp;&nbsp;&nbsp;' . $this->getData(['page', $childKey, 'title']) . '</option>';
} }
} }
$leftItems .= '<option value="">-------------------</option>';
$leftItems .= '<option value="' . helper::baseUrl() . 'page/block">&Eacute;dition des blocs</option>';
$leftItems .= '</select></li>'; $leftItems .= '</select></li>';
$leftItems .= '<li><a href="' . helper::baseUrl() . 'page/add" title="Créer une page">' . template::ico('plus') . '</a></li>'; $leftItems .= '<li><a href="' . helper::baseUrl() . 'page/add" title="Créer une page">' . template::ico('plus') . '</a></li>';
if( if(

View File

@ -33,11 +33,9 @@
<?php if($this->getData(['theme', 'header', 'position']) === 'body'): ?> <?php if($this->getData(['theme', 'header', 'position']) === 'body'): ?>
<!-- Bannière dans le fond du site --> <!-- Bannière dans le fond du site -->
<!-- menu image -->
<?php <?php
if ($this->getData(['theme','header','linkHome'])){ if ($this->getData(['theme','header','linkHome'])){
echo "<a href='" . helper::baseUrl(false) . "'>" ;} ?> echo "<a href='" . helper::baseUrl(false) . "'>" ;} ?>
<!-- menu image -->
<header> <header>
<?php if( <?php if(
@ -45,22 +43,16 @@
// Affiche toujours le titre de la bannière pour l'édition du thème // Affiche toujours le titre de la bannière pour l'édition du thème
OR ($this->getUrl(0) === 'theme' AND $this->getUrl(1) === 'header') OR ($this->getUrl(0) === 'theme' AND $this->getUrl(1) === 'header')
): ?> ): ?>
<div class="container"> <div class="container">
<span><?php echo $this->getData(['config', 'title']); ?></span> <span><?php echo $this->getData(['config', 'title']); ?></span>
</div> </div>
<?php endif; ?> <?php endif; ?>
</header> </header>
<!-- menu image -->
<?php <?php
if ($this->getData(['theme','header','linkHome'])){echo "</a>";} if ($this->getData(['theme','header','linkHome'])){echo "</a>";}
?> ?>
<!-- menu image -->
<?php endif; ?> <?php endif; ?>
<?php if($this->getData(['theme', 'menu', 'position']) === 'body-second'): ?> <?php if($this->getData(['theme', 'menu', 'position']) === 'body-second'): ?>
<!-- Menu dans le fond du site après la bannière --> <!-- Menu dans le fond du site après la bannière -->
<nav> <nav>
@ -90,12 +82,9 @@
) )
): ?> ): ?>
<!-- Bannière dans le site --> <!-- Bannière dans le site -->
<!-- menu image -->
<?php <?php
if ($this->getData(['theme','header','linkHome'])){ if ($this->getData(['theme','header','linkHome'])){
echo "<a href='" . helper::baseUrl(false) . "'>" ;} ?> echo "<a href='" . helper::baseUrl(false) . "'>" ;} ?>
<!-- menu image -->
<header <?php if($this->getData(['theme', 'header', 'position']) === 'hide'): ?>class="displayNone"<?php endif; ?>> <header <?php if($this->getData(['theme', 'header', 'position']) === 'hide'): ?>class="displayNone"<?php endif; ?>>
<?php if( <?php if(
$this->getData(['theme', 'header', 'textHide']) === false $this->getData(['theme', 'header', 'textHide']) === false
@ -127,7 +116,44 @@
</nav> </nav>
<?php endif; ?> <?php endif; ?>
<!-- Corps --> <!-- Corps -->
<?php if ($this->getUrl(0) === 'theme' OR
$this->getUrl(0) === 'config' OR
$this->getUrl(0) === 'install' OR
$this->getUrl(0) === 'maintenance' OR
$this->getUrl(0) === 'page' OR
$this->getUrl(0) === 'user' ) { ?> <!-- Pas de multi colonne-->
<section><?php $layout->showContent(); ?></section> <section><?php $layout->showContent(); ?></section>
<?php } else {
$blocks = explode('-',$this->getData(['theme','site','blocks']));
$blockleft=$blockright="";
switch (sizeof($blocks)) {
case 1 : // une colonne
$content = 'col'. $blocks[0] ;
break;
case 2 : // 2 blocks
if ($blocks[0] < $blocks[1]) { // détermine la position de la colonne
$blockleft = 'col'. $blocks[0];
$content = 'col'. $blocks[1] ;
} else {
$content = 'col' . $blocks[0];
$blockright = 'col' . $blocks[1];
}
break;
case 3 : // 3 blocks
$blockleft = 'col' . $blocks[0];
$content = 'col' . $blocks[1];
$blockright = 'col' . $blocks[2];
}
?>
<section>
<div class="row">
<?php if ($blockleft !== "") :?> <div class="<?php echo $blockleft; ?>" id="contentleft"><?php echo $this->getData(['page','blockLeft','content']);?></div> <?php endif; ?>
<div class="<?php echo $content; ?>" id="contentsite"><?php $layout->showContent(); ?></div>
<?php if ($blockright !== "") :?> <div class="<?php echo $blockright; ?>" id="contentright"><?php echo $this->getData(['page','blockRight','content']);?></div> <?php endif; ?>
</div>
</section>
<?php } ?>
<!-- footer -->
<?php if( <?php if(
$this->getData(['theme', 'footer', 'position']) === 'site' $this->getData(['theme', 'footer', 'position']) === 'site'
// Affiche toujours le pied de page pour l'édition du thème // Affiche toujours le pied de page pour l'édition du thème

View File

@ -17,26 +17,26 @@ class page extends common {
public static $actions = [ public static $actions = [
'add' => self::GROUP_MODERATOR, 'add' => self::GROUP_MODERATOR,
'delete' => self::GROUP_MODERATOR, 'delete' => self::GROUP_MODERATOR,
'edit' => self::GROUP_MODERATOR 'edit' => self::GROUP_MODERATOR,
'block' => self::GROUP_ADMIN
]; ];
public static $pagesNoParentId = [ public static $pagesNoParentId = [
'' => 'Aucune' '' => 'Aucune'
]; ];
public static $moduleIds = []; public static $moduleIds = [];
// Menu image
public static $typeMenu = [ public static $typeMenu = [
'text' => 'Texte', 'text' => 'Texte',
'icon' => 'Icône', 'icon' => 'Icône',
'icontitle' => 'Icône et bulle' 'icontitle' => 'Icône et bulle'
]; ];
// menu image
// Position du module // Position du module
public static $modulePosition = [ public static $modulePosition = [
'bottom' => 'En bas', 'bottom' => 'En bas',
'top' => 'En haut', 'top' => 'En haut',
'free' => 'Libre' 'free' => 'Libre'
]; ];
/** /**
* Création * Création
*/ */
@ -47,11 +47,9 @@ class page extends common {
'page', 'page',
$pageId, $pageId,
[ [
// Menu icon
'typeMenu' => 'text', 'typeMenu' => 'text',
'iconUrl' => '', 'iconUrl' => '',
'disable' => false, 'disable' => false,
// Menu icon
'content' => 'Contenu de votre nouvelle page.', 'content' => 'Contenu de votre nouvelle page.',
'hideTitle' => false, 'hideTitle' => false,
'metaDescription' => '', 'metaDescription' => '',
@ -77,7 +75,6 @@ class page extends common {
* Suppression * Suppression
*/ */
public function delete() { public function delete() {
if($this->isPost()) {
// La page n'existe pas // La page n'existe pas
if($this->getData(['page', $this->getUrl(2)]) === null) { if($this->getData(['page', $this->getUrl(2)]) === null) {
// Valeurs en sortie // Valeurs en sortie
@ -112,14 +109,68 @@ class page extends common {
'state' => true 'state' => true
]); ]);
} }
} else { }
// Valeurs en sortie
/**
* Édition des blocs
*/
public function block () {
if($this->isPost()) {
$this->setData([
'page',
'blockLeft', [
'typeMenu' => 'text',
'iconUrl' => '',
'disable' => true,
'hideTitle' => false,
'metaDescription' => '',
'metaTitle' => '',
'moduleId' => '',
'parentPageId' => '',
'modulePosition' => 'bottom',
'position' => 0,
'group' => self::GROUP_VISITOR,
'targetBlank' => false,
'title' => 'blockLeft',
'content' => (empty($this->getInput('pageBlockLeftContent', null)) ? "<p></p>" : $this->getInput('pageBlockLeftContent', null))]
]);
$this->setData([
'page',
'blockRight', [
'typeMenu' => 'text',
'iconUrl' => '',
'disable' => true,
'hideTitle' => false,
'metaDescription' => '',
'metaTitle' => '',
'moduleId' => '',
'parentPageId' => '',
'modulePosition' => 'bottom',
'position' => 0,
'group' => self::GROUP_VISITOR,
'targetBlank' => false,
'title' => 'blockRight',
'content' => (empty($this->getInput('pageBlockRightContent', null)) ? "<p></p>" : $this->getInput('pageBlockRightContent', null))]
]);
$this->addOutput([ $this->addOutput([
'access' => false 'redirect' => helper::baseUrl(),
'notification' => 'Modifications enregistrées',
'state' => true
]); ]);
} }
// Valeurs en sortie
$this->addOutput([
'title' => 'Édition des blocs',
'vendor' => [
'tinymce'
],
'view' => 'block'
]);
} }
/** /**
* Édition * Édition
*/ */

View File

@ -0,0 +1,102 @@
/**
* This file is part of Zwii.
*
* For full copyright and license information, please see the LICENSE
* file that was distributed with this source code.
*
* @author Rémi Jean <remi.jean@outlook.com>
* @copyright Copyright (C) 2008-2018, Rémi Jean
* @license GNU General Public License, version 3
* @link http://zwiicms.com/
*/
/**
* Confirmation de suppression
*/
$("#pageEditDelete").on("click", function() {
var _this = $(this);
return core.confirm("Êtes-vous sûr de vouloir supprimer cette page ?", function() {
$(location).attr("href", _this.attr("href"));
});
});
/**
* Bloque/Débloque le bouton de configuration au changement de module
*/
var pageEditModuleIdDOM = $("#pageEditModuleId");
pageEditModuleIdDOM.on("change", function() {
if($(this).val() === "") {
$("#pageEditModuleConfig").addClass("disabled");
$("#pageEditContentContainer").slideDown();
}
else {
$("#pageEditModuleConfig").removeClass("disabled");
$("#pageEditContentContainer").slideUp();
}
});
/**
* Soumission du formulaire pour éditer le module
*/
$("#pageEditModuleConfig").on("click", function() {
$("#pageEditModuleRedirect").val(1);
$("#pageEditForm").trigger("submit");
});
/**
* Affiche les pages en fonction de la page parent dans le choix de la position
*/
var hierarchy = <?php echo json_encode($this->getHierarchy()); ?>;
var pages = <?php echo json_encode($this->getData(['page'])); ?>;
$("#pageEditParentPageId").on("change", function() {
var positionDOM = $("#pageEditPosition");
positionDOM.empty().append(
$("<option>").val(0).text("Ne pas afficher"),
$("<option>").val(1).text("Au début")
);
var parentSelected = $(this).val();
var positionSelected = 0;
var positionPrevious = 1;
// Aucune page parent selectionnée
if(parentSelected === "") {
// Liste des pages sans parents
for(var key in hierarchy) {
if(hierarchy.hasOwnProperty(key)) {
// Sélectionne la page avant si il s'agit de la page courante
if(key === "<?php echo $this->getUrl(2); ?>") {
positionSelected = positionPrevious;
}
// Sinon ajoute la page à la liste
else {
// Enregistre la position de cette page afin de la sélectionner si la prochaine page de la liste est la page courante
positionPrevious++;
// Ajout à la liste
positionDOM.append(
$("<option>").val(positionPrevious).text("Après \"" + pages[key].title + "\"")
);
}
}
}
}
// Un page parent est selectionnée
else {
// Liste des pages enfants de la page parent
for(var i = 0; i < hierarchy[parentSelected].length; i++) {
// Pour page courante sélectionne la page précédente (pas de - 1 à positionSelected à cause des options par défaut)
if(hierarchy[parentSelected][i] === "<?php echo $this->getUrl(2); ?>") {
positionSelected = positionPrevious;
}
// Sinon ajoute la page à la liste
else {
// Enregistre la position de cette page afin de la sélectionner si la prochaine page de la liste est la page courante
positionPrevious++;
// Ajout à la liste
positionDOM.append(
$("<option>").val(positionPrevious).text("Après \"" + pages[hierarchy[parentSelected][i]].title + "\"")
);
}
}
}
// Sélectionne la bonne position
positionDOM.val(positionSelected);
}).trigger("change");

View File

@ -0,0 +1,33 @@
<?php echo template::formOpen('pageblockEditForm'); ?>
<div class="row">
<div class="col2">
<?php $href = helper::baseUrl() . $this->getUrl(2); ?>
<?php if ($this->getData(['page', $this->getUrl(2), 'moduleId']) === 'redirection')$href = helper::baseUrl(); ?>
<?php echo template::button('pageblockEditBack', [
'class' => 'buttonGrey',
'href' => $href,
'ico' => 'left',
'value' => 'Retour'
]); ?>
</div>
<div class="col2 offset8">
<?php echo template::submit('pageblockEditSubmit'); ?>
</div>
</div>
<div class='row'>
<div class="col6">
<?php echo template::textarea('pageBlockLeftContent', [
'label' => 'Contenu du bloc à gauche :',
'class' => 'editorWysiwyg',
'value' => $this->getData(['page','blockLeft', 'content'])
]); ?>
</div>
<div class="col6">
<?php echo template::textarea('pageBlockRightContent', [
'label' => 'Contenu du bloc à droite :',
'class' => 'editorWysiwyg',
'value' => $this->getData(['page','blockRight', 'content'])
]); ?>
</div>
</div>
<?php echo template::formClose(); ?>

View File

@ -56,7 +56,6 @@
</div> </div>
<div class="row"> <div class="row">
<div class="col6"> <div class="col6">
<?php echo template::select('pageTypeMenu', $module::$typeMenu,[ <?php echo template::select('pageTypeMenu', $module::$typeMenu,[
'help' => 'Sélectionnez le type de menu.', 'help' => 'Sélectionnez le type de menu.',
'label' => 'Type de menu', 'label' => 'Type de menu',
@ -64,7 +63,6 @@
]); ?> ]); ?>
</div> </div>
<div class="col6"> <div class="col6">
<?php echo template::file('pageIconUrl', [ <?php echo template::file('pageIconUrl', [
'label' => 'Icône', 'label' => 'Icône',
'value' => $this->getData(['page', $this->getUrl(2), 'iconUrl']) 'value' => $this->getData(['page', $this->getUrl(2), 'iconUrl'])

View File

@ -15,6 +15,14 @@ body {
#site { #site {
} }
/* Blocs dans le site */
#contentleft {
}
#contentright {
}
#contentsite {
}
/* Bannière */ /* Bannière */
header { header {
} }

View File

@ -201,9 +201,18 @@ class theme extends common {
'contain' => 'Image entière', 'contain' => 'Image entière',
'cover' => 'Largeur adaptée au fond', 'cover' => 'Largeur adaptée au fond',
'100% 100%' => 'Taille adaptée au fond' '100% 100%' => 'Taille adaptée au fond'
]; ];
public static $siteBlocks = [
'12' => 'Un seul bloc, uniquement le site',
'4-8' => 'Deux blocs : 1/3 - 2/3',
'8-4' => 'Deux blocs : 2/3 - 1/3',
'3-9' => 'Deux blocs : 1/4 - 3/4',
'9-3' => 'Deux blocs : 3/4 - 1/2',
'3-6-3' => 'Trois blocs : 1/4 - 1/2 - 1/4'
];
/** /**
* Mode avancé * Mode avancé
*/ */
@ -424,7 +433,8 @@ class theme extends common {
'backgroundColor' => $this->getInput('themeSiteBackgroundColor'), 'backgroundColor' => $this->getInput('themeSiteBackgroundColor'),
'radius' => $this->getInput('themeSiteRadius'), 'radius' => $this->getInput('themeSiteRadius'),
'shadow' => $this->getInput('themeSiteShadow'), 'shadow' => $this->getInput('themeSiteShadow'),
'width' => $this->getInput('themeSiteWidth') 'width' => $this->getInput('themeSiteWidth'),
'blocks' => $this->getInput('themeSiteBlocks')
]]); ]]);
// Valeurs en sortie // Valeurs en sortie
$this->addOutput([ $this->addOutput([
@ -437,7 +447,8 @@ class theme extends common {
$this->addOutput([ $this->addOutput([
'title' => 'Personnalisation du site', 'title' => 'Personnalisation du site',
'vendor' => [ 'vendor' => [
'tinycolorpicker' 'tinycolorpicker',
'tinymce'
], ],
'view' => 'site' 'view' => 'site'
]); ]);

View File

@ -40,7 +40,7 @@
</div> </div>
</div> </div>
<div class="row"> <div class="row">
<div class="col4"> <div class="col4 offset2">
<?php echo template::text('themeButtonBackgroundColor', [ <?php echo template::text('themeButtonBackgroundColor', [
'class' => 'colorPicker', 'class' => 'colorPicker',
'label' => 'Boutons', 'label' => 'Boutons',
@ -82,6 +82,15 @@
]); ?> ]); ?>
</div> </div>
</div> </div>
<div class='row'>
<div class="col4 offset4">
<?php echo template::select('themeSiteBlocks', $module::$siteBlocks, [
'label' => 'Répartition des blocs :',
'help' => 'Pour éditer le contenu des blocs, sélectionnez \'Édition des blocs\' dans la liste des pages.',
'selected' => $this->getData(['theme', 'site', 'blocks'])
]); ?>
</div>
</div>
</div> </div>
</div> </div>
</div> </div>

View File

@ -8,7 +8,7 @@ mb_http_input('UTF-8');
mb_language('uni'); mb_language('uni');
mb_regex_encoding('UTF-8'); mb_regex_encoding('UTF-8');
ob_start('mb_output_handler'); ob_start('mb_output_handler');
date_default_timezone_set('Europe/Rome'); date_default_timezone_set('Europe/Paris');
setlocale(LC_CTYPE, 'fr_FR'); //correct transliteration setlocale(LC_CTYPE, 'fr_FR'); //correct transliteration
/* /*

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.8 KiB

After

Width:  |  Height:  |  Size: 3.8 KiB