Aller au contenu
Support de Zwii

Fred

Administrateurs
  • Compteur de contenus

    3 523
  • Inscription

  • Dernière visite

Tout ce qui a été posté par Fred

  1. Bonsoir, J'ai parcouru rapidement vos travaux, je viens de passer 7h en bagnole pour retourner à mon domicile. Trois remarques : Sylvain gèrera le débogage de la 10.4.00 Le code CSS que propose @roger devra être placé sous la ligne 272 de common.css, une smartphone en 320 ne peut pas marche en paysage ? On ne gère pas un problème qui n'existe pas ? Ce problème d'accent est vraiment pénible ! Tout dépend de la configuration du serveur Web, du système, tu as quoi toi @roger ?. Sur ma machine tout est ok, cf copie d'écran. Soit on revient sur le commit soit on utilise une fonction comme celle-ci. Je ferai de nouveaux tests demain si je peux.
  2. @roger le problème que tu exposes est lié à l'en-tête "commentaire" qui fixe la largeur de la colonne et empêche la réduction. Pour corriger ça se passe dans common.css : /* Tableau sur les écrans de petites tailles */ @media (max-width: 768px) { .table thead { font-size: 0.8em; } } @media (max-width: 668px) { .table thead { display:none; } } Par ailleurs, je reviens sur le problème des dates en FR dans un sujet que tu avais commencé : Bêtement, j'ai suivi le conseil de @Gilux ce qui était une erreur, je travaille actuellement sur un serveur sous macos dans lequel UTF-8 n'est pas déclaré dans php.ini, résultat, les dates sont en anglais. Normal, l'encodage n'est pas par défaut en UTF-8 ! Supprimer les encodage utf8_encode était donc une connerie. Cependant au lieu de les remettre en place, je préfère compléter index.php avec ceci : setlocale(LC_ALL, 'fr','fr_FR','fr_FR.utf8','fr-FR','fra'); C'est chargé mais ça devrait fonctionner avec différents OS et serveurs. Ce week-end je pourrai faire le test sous une machine linux, selon vos retours, on avisera pour clore ce problème définitivement.
  3. C'est une erreur, je vais l'ajouter.
  4. Ainsi que la fusion dans les versions à venir.
  5. Déjà pris en compte dans 10 3 04, j'ajuste le changes.md
  6. Ok @roger je ferai la modif dans la soirée.
  7. Peux-tu signaler RESOLU dans le titre ? Merci
  8. Bonjour @henry Il faut créer une page, la déclarer en barre latérale dans le menu gabarit, et puis modifier le menu juste à coté. Une fois la barre prête, on l'utilise conjointement avec une page standard dans un gabarit. Il est clair que la doc https://doc.zwiicms.fr/les-barres-laterales @Gilux n'est pas assez complète. Pour la personnalisation, il faut utiliser le CSS dans la personnalisation, les classes et les id sont ci-dessous.
  9. C’est pas juste une case à cocher ?
  10. Déplacé dans la bonne catégorie.
  11. Fred

    Customiser l'envoi de mail dans le zwii

    Customisation intégrée dans 10.3.04
  12. Bugs corrigés dans 10.3.04 Merci pour le verbeux signalement 😇
  13. Bonsoir Roger Je vais voir ça, mais s’il te plaît évite les redondances et les multiples copies d’écran.
  14. LC_TIME devrait être LC_ALL. Modification déjà prise en compte.
  15. Bonjour Une évolution de la gestion des donnés prévue dans 10400 devrait améliorer le support de http1 en limitant les requêtes disques. La branche data_engine peut déjà être testée.
  16. Bonjour, Merci d'éditer ton sujet et de préciser l'objet du bug rencontré. Pourtant la participation aux tests AVANT la publication, permettrait d'éliminer les problèmes constaté APRÈS publication. Le problème évoqué est consécutif à la mise en place du menu membre aligné à droite et provoque l'affichage dans le mauvais mode. Une simple correction du CSS sera suffisante. Pour un membre : Par la même occasion, j'ai corrigé les débordements d'icônes dans la barre de membre en mode admin suite à l'ajout d'une icône de duplication. Les modifications concernant common.css sont visibles ici elles seront publiées avec la 10304 Merci de précéder le titre du message en résolu.
  17. En effet, Mais la manière dont est écrit l’algorithme va alourdir l'écriture en multipliant les foreach. Il faudrait effectuer le travail en deux fois : 1. construire un tableau avec les id des pages 2. lire le tableau et faire un switch sur les modules pour aller chercher les données. Mais comme tu veux répertorier les commentaires, il y aura une autre boucle. Comme les commentaires sont modérés dans 10400 il faudra également appliquer ce filtre. Ce que tu peux lire : formulaire : nom des champs news : texte des news blog : les commentaire publiés galerie : les légendes Ça fait quand même beaucoup de taf !
  18. Sujet déplacé, ce n'est pas un bug.
  19. Le user-agent dépend du serveur qui adresse la demande, le cms n'envoie rien de particulier dans l'en-tête. La doc précise bien que c'est la configuration du serveur qui s'applique : user_agent chaîne de caractères Valeur à envoyer avec l'en-tête User-Agent:. Cette valeur ne doit être utilisée que si l'agent utilisateur n'est pas spécifié dans l'option de contexte header ci-dessus. Par défaut, la valeur de l'option de configuration user_agent du fichier php.ini sera utilisée.
  20. Si vous êtes chez Free et que vous effectuez une MAJ manuelle, n'oubliez pas de remplacer le nouveau fichier .htaccess dans site/tmp faute de quoi le captcha ne sera pas visible. .htaccess
  21. Bonjour, L'icône de connexion apparaît après avoir vidé le cache. Peux-tu remplacer le fichier htaccess du dossier site/tmp par celui-ci ? .htaccess Je vais ajouter un mention dans les informations concernant les updates manuels.
  22. @roger c'est parce que le module search n'est plus plus vraiment celui de @sylvainlelievre, désormais il fonctionne par expressions régulières. Les lignes 117 - 118, 132 et 133 font l'agrégation du titre de la page et de son contenu, mais jamais du contenu du module dépendant de la page 165 et 1696, sauf pour le blog. Autrement dit ne sont pas pris en compte : les commentaires les news les galeries les formulaires C'est un choix volontaire afin de diminuer la complexité de la mise en évidence des résultats gérés par la fonction occurrence : private function occurrence($url, $titre, $contenu, $motclef, $motentier) { // Nettoyage de $contenu : on enlève tout ce qui est inclus entre < et > $contenu = preg_replace ('/<[^>]*>/', ' ', $contenu); // Accentuation $contenu = html_entity_decode($contenu); // Découper le chaîne en tenant compte des quillemets $a = str_getcsv(html_entity_decode($motclef), ' '); // Construire la clé de recherche selon options de recherche $keywords = '/('; foreach ($a as $key => $value) { $keywords .= $motentier === true ? $value . '|' : '\b' . $value . '\b|' ; } $keywords = substr($keywords,0,strlen($keywords) - 1); $keywords .= ')/i'; $keywords = str_replace ('+', ' ',$keywords); // Rechercher $valid = preg_match_all($keywords,$contenu,$matches,PREG_OFFSET_CAPTURE); if ($valid > 0 ) { if (($matches[0][0][1]) > 0) { $resultat = '<h2><a href="./?'.$url.'" target="_blank" rel="noopener">' . $titre . '</a></h2>'; // Création de l'aperçu // Eviter de découper avec une valeur négative $d = $matches[0][0][1] - 50 < 0 ? 1 : $matches[0][0][1] - 50; // Rechercher l'espace le plus proche $d = $d >= 1 ? strpos($contenu,' ',$d) : $d; // Découper l'aperçu $t = substr($contenu, $d ,$this->getData(['module',$this->getUrl(0),'previewLength'])); // Applique une mise en évidence $t = preg_replace($keywords, '<span class="searchKeyword">\1</span>',$t); // Sauver résultat $resultat .= '<p class="searchResult">'.$t.'...</p>'; $resultat .= '<p class="searchTitle">' . count($matches[0]) . (count($matches[0]) === 1 ? ' correspondance<p>' : ' correspondances<p>'); //} return ([ 'matches' => count($matches[0]), 'preview' => $resultat ]); } } } et surtout de celle-ci : public function index() { // Création des valeurs de thème par défaut if ( $this->getData(['theme', 'search']) === null ) { require_once('module/search/ressource/defaultdata.php'); $this->setData(['theme', 'search', theme::$defaultData]); } // Création des valeurs de réglage par défaut if ( $this->getData(['module', 'search']) === null ) { require_once('module/search/ressource/defaultdata.php'); $this->setData(['module', $this->getUrl(0), data::$defaultData]); } if($this->isPost()) { //Initialisations variables $success = true; $result = []; $notification = ''; $total=''; // Récupération du mot clef passé par le formulaire de ...view/index.php, avec caractères accentués self::$motclef=$this->getInput('searchMotphraseclef'); // Récupération de l'état de l'option mot entier passé par le même formulaire self::$motentier=$this->getInput('searchMotentier', helper::FILTER_BOOLEAN); if (self::$motclef !== '' ) { foreach($this->getHierarchy(null,false,null) as $parentId => $childIds) { if ($this->getData(['page', $parentId, 'disable']) === false && $this->getUser('group') >= $this->getData(['page', $parentId, 'group']) && $this->getData(['page', $parentId, 'block']) !== 'bar') { $url = $parentId; $titre = $this->getData(['page', $parentId, 'title']); $contenu = ' ' . $titre . ' ' . $this->getData(['page', $parentId, 'content']); // Pages sauf pages filles et articles de blog $tempData = $this->occurrence($url, $titre, $contenu, self::$motclef, self::$motentier); if (is_array($tempData) ) { $result [] = $tempData; } } foreach($childIds as $childId) { // Sous page if ($this->getData(['page', $childId, 'disable']) === false && $this->getUser('group') >= $this->getData(['page', $parentId, 'group']) && $this->getData(['page', $parentId, 'block']) !== 'bar') { $url = $childId; $titre = $this->getData(['page', $childId, 'title']); $contenu = ' ' . $titre . ' ' . $this->getData(['page', $childId, 'content']); //Pages filles $tempData = $this->occurrence($url, $titre, $contenu, self::$motclef, self::$motentier); if (is_array($tempData) ) { $result [] = $tempData; } } // Articles d'une sous-page blog if ($this->getData(['page', $childId, 'moduleId']) === 'blog') { foreach($this->getData(['module',$childId]) as $articleId => $article) { if($this->getData(['module',$childId,$articleId,'state']) === true) { $url = $childId . '/' . $articleId; $titre = $article['title']; $contenu = ' ' . $titre . ' ' . $article['content']; // Articles de sous-page de type blog $tempData = $this->occurrence($url, $titre, $contenu, self::$motclef, self::$motentier); if (is_array($tempData) ) { $result [] = $tempData; } } } } } // Articles d'un blog if ($this->getData(['page', $parentId, 'moduleId']) === 'blog' ) { foreach($this->getData(['module',$parentId]) as $articleId => $article) { if($this->getData(['module',$parentId,$articleId,'state']) === true) { $url = $parentId. '/' . $articleId; $titre = $article['title']; $contenu = ' ' . $titre . ' ' . $article['content']; // Articles de Blog $tempData = $this->occurrence($url, $titre, $contenu, self::$motclef, self::$motentier); if (is_array($tempData) ) { $result [] = $tempData; } } } } } // Message de synthèse de la recherche if (count($result) === 0) { self::$resultTitle = 'Aucun résultat'; self::$resultError = 'Avez-vous pens&eacute; aux accents ?'; } else { self::$resultError = ''; self::$resultTitle = ' Résultat de votre recherche'; rsort($result); foreach ($result as $key => $value) { $r [] = $value['preview']; } // Générer une chaine de caractères self::$resultList= implode("", $r); } } // Valeurs en sortie, affichage du résultat $this->addOutput([ 'view' => 'index', 'showBarEditButton' => true, 'showPageContent' => !$this->getData(['module', $this->getUrl(0),'resultHideContent']) ]); } else { // Valeurs en sortie, affichage du formulaire $this->addOutput([ 'view' => 'index', 'showBarEditButton' => true, 'showPageContent' => true ]); } } Cela dit il y a sûrement moyen de faire mieux et plus court.
×
×
  • Créer...