Giter Club home page Giter Club logo

pluxml's Introduction

PluXml

Static Badge GitHub all releases GitHub License Mastodon

PluXml is a flat CMS. Build lightweight websites easily without database.

Description

  • User friendly backoffice
  • Multi-users with grants levels
  • Articles, pages with PHP scripts, categories, tags, users, archives on the last months or for every year.
  • Comments management
  • Medias manager
  • Translated into 11 languages (French, German, English, Spanish, Italian, Dutch, Occitan, Polish, Portuguese, Romanian, Russian)
  • Customizable themes
  • Plugins
  • No database required
  • URL rewriting (requires Apache2 mod_rewrite module or NGinx)

Demonstration

Prerequisites

  • PHP 5.6.34 or higher until PHP 8.1.2. PHP 7.2.5+ is required for PHPMailer.
  • PHP GD library for resizing pictures and create thumbnails
  • PHP XML library for parsing data files
  • PHP email sending enabled (not required)
  • HTTP server as Apache2 with mod_rewrite module enabled to use URL rewriting (not required), NGinx,..

Installation

  • Download the latest release in zip format from Github or from https://www.pluxml.org and unzip it at the root of your site
  • Connect to your site. Fill in the form for the first user as webmaster.
  • Now your site in ready to serve.
  • Follow the administration link at the bottom of the homepage to access to the back-office. Enjoy it !

Update

  • IMPORTANT : Backup your PluXml data folder
  • Download and unzip the latest release as for a fresh installation
  • Connect to your site and accept for upgrading your datas with the new version of PluXml

Links

pluxml's People

Contributors

18jaguar18 avatar bazooka07 avatar dependabot[bot] avatar draky50110 avatar ensag-dev avatar fmonthel avatar francoisthareau avatar gcyrillus avatar gmilad avatar guiguid avatar haruka-7 avatar jerrywham avatar jormun-pluxml avatar kazimentou avatar lolo3129 avatar mejans avatar minikea avatar nicolasdanelon avatar nikynik avatar philippe-m avatar quent-in avatar quenty31 avatar renaudr avatar sbgodin avatar sudwebdesign avatar thatoo avatar toote avatar vovd avatar ybalrid avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

pluxml's Issues

Mauvais tri alpha des tags avec des accents

Les tags sont mal triés lorsqu'ils commencent par des accents.
Les tags avec accents sont placés en fin de liste avec un tri "alpha"

<?php $plxShow->tagList('<li class="tag #tag_size"><a class="#tag_status" href="#tag_url" title="#tag_name">#tag_name</a></li>', 20, 'alpha'); ?>

Solution:
fichier core/lib/class.plx.show.php
fonction: tagList()

après

$array=array();

ajouter

$alphasort=false;

apres

if(!isset($array['_'.$tag])) {
    $array['_'.$tag]=array('name'=>$tag,'url'=>$t,'count'=>1);
}
else
    $array['_'.$tag]['count']++;

rajouter la ligne

$alphasort[] = $t; # pour le tri alpha

et remplacer

array_multisort($array);

par

if($alphasort) array_multisort($alphasort, SORT_ASC, $array);

Erreur dans plxFeed

fichier: core\lib\class.plx.feed.php
fonction: __construct
ligne: 42

     printf(utf8_decode(L_FILE_VERSION_REQUIRED, PLX_ROOT));

au lieu de

     printf(utf8_decode(L_FILE_VERSION_REQUIRED), PLX_ROOT);

la parenthèse est au mauvais endroit

Theme par defaut et balise blockquote

Le comportement css de la balise blockquote n'est pas défini dans le thème par défaut.
Elle est définie dans reset.css, mais elle n'est pas en italique.

Mauvais affichage des catégories d'un articles

Pour reproduire le problème

  • créer un article
  • le classer dans les catégories "Page d'accueil", "Categorie 1", "Catégorie 2"

L'affichage des catégories de l'articles avec la fonction plxShow::artCat est mauvais.
Dans home.php, avec

<?php $plxShow->artCat(' | '); ?>

l'affichage donne

Catégorie 1Catégorie2 |

au lieu de

Catégorie 1 | Catégorie2

Sans affecter l'article dans "Page d'accueil", l'affichage est correct.

admin page blanche quand activation de certains plugin

Juste pour remonté ce bug sur cette version en Dev.
Bug reproduit avec le plugin ckeditor, PlxMySearch.

Aucune notice apparente, il suffit que je supprime les plugins actifs dans le fichier data/configuration/plugins.xml

.htaccess modifié

Ecran Paramètres > Configuration avancée
Quelque soit la valeur du déroulant "Activer la réécriture d'url" le fichier .htaccess est modifié au risque de perdre les modifications personnelles dans ce fichier, dès que l'on clique sur le bouton "Modifier la configuration avancée".

Il faut faire la disctintion entre "pas d'utilisation de la réécriture d'url" et "désactivation de la réécriture d'url".
Le 1er cas ne doit pas toucher au fichier .htaccess ou conserver les personnalisation de l'utilisateur dans le fichier .htaccess
Le 2ieme cas doit enlever les directives de la réécriture d'urls dans le fichier htaccess.

Warning lecture flux rss avec php 5.4

Warning affiché lors de la lecture des flux rss avec php 5.4

Warning: date() [function.date]: It is not safe to rely on the system's timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected 'Europe/Paris' for '2.0/DST' instead in \core\lib\class.plx.glob.php on line 123

Mauvais tri des répertoires dans le gestionnaire de médias

La liste des dossiers dans le déroulant "Dossier" n'est triée correctement

Solution:
fichier: core/lib/class.plx.medias.php
fonction: _getAllDirs

Remplacer la fonction actuelle par le code ci-dessous

private function _getAllDirs($dir,$level=0) {
    # Initialisation
    $folders = array();

    $alldirs = scandir($dir);
    natsort($alldirs);

    foreach($alldirs as $folder) {
        if($folder[0] != '.') {
            if(is_dir(($dir!=''?$dir.'/':$dir).$folder)) {
                $dir = (substr($dir, -1)!='/' AND $dir!='') ? $dir.'/' : $dir;
                $path = str_replace($this->path, '',$dir.$folder.'/');
                $folders[] = array(
                        'level' => $level,
                        'name' => $folder,
                        'path' => $path
                    );

                $folders = array_merge($folders, $this->_getAllDirs($dir.$folder, $level+1) );
            }
        }
    }

    return $folders;
}

NB: supprimer l'utilisation de ksort($this->aDirs) dans la fonction contentFolder() qui est inutile

contribution: rockyhorror

Faciliter l'utilisation de cron pour certaines tâches.

Bonjour,

J'ai actuellement un plugin qui récupère différentes informations du web service twitter (https://github.com/lgnap/plxTwitterInfos).
Celui ci met à jour ses infos au premier call sur le site web de la semaine.
J'aimerai le rendre indépendant de ce premier call chaque semaine et de lancer la mise à jour via un @daily cron.
J'ai besoin pour cela de certaines informations qui ont été récupérées et sauvées (en utilisant le config.php du plugin), comment pourrais je charger une partie du contexte sans lancer tout le moteur?

Serait ce possible de créer un fichier cron.php à la racine ou tout autre endroit qui chargerait certaines parties du système avant de lancer le script CRON ?

Merci d'avance

Theme par defaut erreur format html5 balise time

Erreur de validation html5

Validation Output: 1 Error 
Line 95, Column 34: Bad value 2014-14-01 for attribute datetime on element time: Month cannot be greater than 12.

<time datetime="2014-14-01">14 janvier 2014</time> 

Voilà les correctifs: fichier home.php, archive.php, article-full-width.php, article.php, categorie.php

remplacer

<time datetime="<?php $plxShow->artDate('#num_year(4)-#num_day-#num_month'); ?>">

par

<time datetime="<?php $plxShow->artDate('#num_year(4)-#num_month-#num_day'); ?>">

et un oubli dans le fichier tags.php

remplacer

<?php $plxShow->artDate('#num_day #month #num_year(4)'); ?>

par

<time datetime="<?php $plxShow->artDate('#num_year(4)-#num_month-#num_day'); ?>"><?php $plxShow->artDate('#num_day #month #num_year(4)'); ?></time> -

Liens spéciaux qui ne sont pas en *:// mal interprétés

version : PluXml 5.2
condition : avec ou sans CKEditor

Lorsque l'on crée un lien celui-ci à cette forme :

<a href="http://domain.com">http://domain.com</a>

Que ce soit ftp://, news:// ou n'importe quoi *:// il n'y a aucun problème.

Si le lien n'a pas cette forme ça va poser soucis et c'est problématique.

Dans le cas ou l'on veut faire un lien de souscription à un groupe de filtre AdBlock par exemple.

Le lien a cette forme :

<a href="abp:subscribe?location=https://easylist-downloads.adblockplus.org/easyprivacy.txt&title=EasyPrivacy">EasyPrivacy</a>

Malheureusement celui-ci sera mal interprété.

Au lieu de :

<a href="abp:subscribe?location=https://easylist-downloads.adblockplus.org/easyprivacy.txt&title=EasyPrivacy">EasyPrivacy</a>

Je vais avoir :

<a href="http(s)://monsite.com/abp:subscribe?location=https://easylist-downloads.adblockplus.org/easyprivacy.txt&title=EasyPrivacy">EasyPrivacy</a>

J'ai mis un exemple avec AdBlock mais le problème doit se poser pour pleins d'autres choses.

Duplicate content avec page statique en page d'accueil

Lorsqu'une page statique est mise en page d'accueil elle est accessble à partir de 2 urls
Exemple:
http://monsite.com
et
http://monsite.com/index.php?static1/homepage

Cela créer au niveau référencement un duplicate content

Solution

Fichier: core/lib/class.plx.motor.php
Ligne: 166

En dessous de

$this->cible = str_pad($capture[1],3,'0',STR_PAD_LEFT); # On complete sur 3 
caracteres

Ajouter

if(!empty($this->aConf['homestatic']) AND $capture[1]){
                if((int)$this->aConf['homestatic']==$capture[1]){
                header('Status: 301 Moved Permanently', false, 301);
                    header('Location: /');
                    exit();
                }
            }

contribution: Ethno Urban

Pas de validation de token

Le token retourné dans la fonction getTokenPostMethod() du fichier core/lib/class.plx.token.php n'est pas vérifié.

Installation: Warning date_default_timezone_get()

Affichage d'un warning sur la page d'installation avec php 5.4

Warning: date_default_timezone_get(): It is not safe to rely on the system's timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier

Notice à l'activation d'un plugin

Le message suivant est affiché quand on active un plugin

Notice: Undefined index: nomduplugin in /Volumes/Travail/www/test/core/lib/class.plx.plugins.php on line 144

plxShow::artCat liste les catégories inactives

la fonction plxShow::artCat liste les catégories inactives

Solution:
dans plxShow::artCat remplacer

  $catIds = explode(',', $this->plxMotor->plxRecord_arts->f('categorie'));

par

  $catIds = $this->artActiveCatIds();

Ajouter trois hook dans la liste des pages statiques en admin

Voir ici le pourquoi : http://forum.pluxml.org/viewtopic.php?id=4161

# ---- Hook pour gérer l'entête du tableau
<th><?php echo L_STATICS_MENU ?></th>

<?php
# Hook Plugins
eval($plxAdmin->plxPlugins->callHook('AdminStaticsListHeader'));
?>
# ----- Hook pour injecter du code avant le lien "Editier / Voir"
# Hook Plugins
eval($plxAdmin->plxPlugins->callHook('AdminStaticsListBody'));
# ---- Hook pour gérer le pied du tableau
plxUtils::printSelect($new_staticid.'_menu', array('oui'=>L_DISPLAY,'non'=>L_HIDE), '1');
?>
</td>
<?php
# Hook Plugins
eval($plxAdmin->plxPlugins->callHook('AdminStaticsListFooter'));
?>
<td>&nbsp;</td>

Accès écran admin des commentaires

L'accès à l'écran d'administration des commentaires est impossible si les commentaires sont désactivés dans les paramètres de base de PluXml

Raison:
fichier core/admin/comments.php

# Interdire de l'accès à la page si les commentaires sont désactivés
if(!$plxAdmin->aConf['allow_com']) {
    header('Location: index.php');
    exit;
}

Voir pourquoi cette restriction a été mise en place

Connexion impossible suite à modification du login admin

Pour récréer le bug :

Administration > Paramètres > Comptes utilisateurs

  1. créer un nouvel utilisateur n°2 avec le profil administrateur
  2. se déconnecter de PluXml et se logguer avec le profil du nouvel utilisateur créé en 1)
  3. modifier le login de l'utilisateur n°1 et valider

Dans /data/configuration/user.xml le login est bien changé MAIS les champs "active" et "profil" de la balise user sont vidés (pas de "0" ni de "1" mais "").

Admin: Filtre catégorie page Articles

Problème avec le filtre sur les catégories quand il y a plusieurs page à l'affichage des articles

Solution: revenir à la page 1 après l'application du filtre

Amélioration de l'indexation des dates dans Google

Bonjour,

Proposition d'évolution :
Encadrer les dates de publications des articles d'une balise date, le but étant d'améliorer l'indexation des dates dans Google, pour faciliter l'affichage de la date de publication des articles, dans les résultats de recherches (source : http://41mag.fr/html5-20-conseils-et-astuces-pour-coder-proprement-ses-pages.html)

Pages impactées :
home.php, categories.php, tags.php, archives.php, articles.php

Code à modifier :
avant :
artDate('#num_day #month #num_year(4)'); ?>
après :
artDate('#num_day #month #num_year(4)'); ?>

Résultat :
13 décembre 2013

Url et séparateur de répertoire sous windows

Problème avec la gestion des urls, plus précisément avec le « séparateur de répertoire » -sous linux (…) « / » et sous windows « \ »- ce qui retourne l’URL « http://localhost\/ » sur tous les liens :/

La solution est simple, il suffit d’éditer le fichier « core/lib/class.plx.utils.php » et de modifier
$racine = rtrim($protocol.$servername.$serverport.$dirname, '/').'/';
par
$racine = rtrim($protocol.$servername.$serverport.$dirname, '/').'/';

nb: solution à rendre compatible linux + windows

Thème par défaut: espace en trop

Dans le fichier header.php à la fin des lignes suivantes il y a un espace en trop avant " />

<link rel="alternate" type="application/rss+xml" title="<?php $plxShow->lang('ARTICLES_RSS_FEEDS') ?>" href="<?php $plxShow->urlRewrite('feed.php?rss') ?> " />
<link rel="alternate" type="application/rss+xml" title="<?php $plxShow->lang('COMMENTS_RSS_FEEDS') ?>" href="<?php $plxShow->urlRewrite('feed.php?rss/commentaires') ?> " />

Err dans la traduction du thème en italien

fichier: themes/defaut/lang/it.php :
remplacer:

# erreur.php
'ERROR'    => 'E&egrave; stato rilevato un errore',

par

# erreur.php
'ERROR'    => '&Egrave; stato rilevato un errore'

Liens avec des simples quote non réécrits

Exemple

<img  src="data/image1.jpg" />

<img  src='data/image1.jpg' />

avec la réécriture d'url activée, on obtient:

<img src="http://localhost/data/image1.jpg" /> 

<img src='data/image1.jpg' /> 

Le lien de la deuxieme image n'est pas réécrit car on a des simples quotes au lieu des doubles

Erreur si fichier version non présent

Notice: Use of undefined constant L_FILE_VERSION_REQUIRED - assumed 'L_FILE_VERSION_REQUIRED' in core\lib\class.plx.motor.php on line 72

Le fichier de langue n'est pas chargé au moment du traitement de controle de la présence du fichier version

<br> non pris ne compte sur les commentaires avec plxEditor

Le plugin plxEditor ne conserve pas les sauts de lignes, à l'enregistrement d'un commentaire saisi depuis l'admin.

Solution par Stéphane :
Dans la fonction editCommentaire, ligne 915, remplacer :
$comment['content'] = strip_tags(trim($content['content']),'<a>,<strong>');
par
$comment['content'] = strip_tags(trim($content['content']),'<a>,<strong>,<br />');

Thème par défaut: mauvais padding balise <code>

Le padding actuel de la balise code fait déborder son encadrement sur fond gris sur la ligne du dessus et du dessous.

Solution: remplacer le padding actuel par:
padding: 0 5px 0 5px;

Exemple pour reproduire le problème:

<p>Pourtant elle n'est pas active par défaut... Pour y remédier, vous devrez ajouter <code>discard</code> sur la ligne de votre partition dans le fichier /etc/fstab.<br />
Remplacer :<br />
<code>errors=remount-ro</code><br />
par :<br />
<code>errors=remount-ro,discard</code></p>

Ajout commentaire: mauvais controle existence fichier

fichier: core/lib/classplx.motor.php
fonction: newCommentaire()

Le test sur l'existence du fichier de commentaire ne spécifie pas le chemin complet, du coup lorsqu'il y à plusieurs commentaires/sec, ils sont écrasés.

Remplacer:

while(file_exists($comment['filename']));

par

while(file_exists(PLX_ROOT.$this->aConf['racine_commentaires'].$comment['filename']));

Tri dans l'affichage des derniers articles

Pouvoir trier l'affichage des derniers articles dans la fonction plxShow::lastArtList par ordre croissant ou décroissant en ajoutant un nouveau paramètre dans l'appel de la fonction

public function lastArtList($format='<li><a href="#art_url" title="#art_title">#art_title</a></li>',$max=5,$cat_id='',$ending='', $order='rsort') {

remplacer

if($aFiles = $plxGlob_arts->query($motif,'art','rsort',0,$max,'before')) {

par

if($aFiles = $plxGlob_arts->query($motif,'art',$order,0,$max,'before')) {

Article écrasé lors de la création d'un nouvel article

Si dans le dossier data/articles il existe des fichiers xml qui ont été renommés manuellement en les préfixant par un ou plusieurs caractères, la création d'un nouvel article vient écraser l'article 0001

exemple de fichier perturbant la recherche du prochain n° d'article à créer:
xx0058.000.001.201309121405.nouvel-article2

=> ne pas tenir compte de ces fichiers dans plxGlob::initCache pour le type 'arts'

Visibilité des articles dans les flux rss

Les articles appartenant à une catégorie où les articles ne doivent pas être affichés sur la page d'accueil (gestion des catégories > options > déroulant "Afficher les articles de cette catégorie sur la page d'accueil" (oui/non), sont visibles dans les flux rss

=> ne pas afficher ces articles

Confirmation avant suppression

Je viens d'assister à une suppression par erreur d'un article, et de tout le chagrin qui s'en est suivi.

Serait-il possible d'avoir une alerte de confirmation avant toute suppression d'article ? Histoire d'éviter d'autres chagrins.

Merci :)

La virgule fatale ;)

Salut,

Il manque une virgule à la ligne 114 dans le fichier install.php :

'hometemplate'=>'home.php'

templateCss + réécriture d'url

La fonction plxShow::templateCss ne tient pas compte de la réécriture d'url

Dans la fonction plxShow::templateCss, remplacer la ligne

echo "\t".'<link rel="stylesheet" type="text/css" href="'.$theme.$css_dir.$css.'" media="screen" />'."\n";

par

echo "\t".'<link rel="stylesheet" type="text/css" href="'.$this->plxMotor->urlRewrite($theme.$css_dir.$css).'" media="screen" />'."\n";

Infos sur le serveur

Obtenir des infos sur le serveur où est installé PluXml à partir de la page Paramètres > Informations pour avoir la ligne:

Serveur : Apache/2.2.17 (Win32) PHP/5.3.5

Dans le fichier core/admin/parametres_infos.php
En dessous de

<li><?php echo L_INFO_PHP_VERSION; ?> : <?php echo phpversion(); ?></li>

Ajouter

<?php if (!empty($_SERVER['SERVER_SOFTWARE'])) { ?>
<li><?php echo L_INFO_SERVER_SIGNATURE; ?> : <?php echo $_SERVER['SERVER_SOFTWARE']; ?></li>
<?php } ?>  

Dans le fichier core.php des dossiers lang/xx/
En dessous de

'L_INFO_PHP_VERSION'            => 'Version de php',

Ajouter

'L_INFO_SERVER_SIGNATURE'       => 'Serveur',

Ne pas afficher le meta du site en mode article, static, categorie

S'il n'y a pas de meta description spécifique indiquée pour la page, ne rien mettre plutôt que la meta du site qui ne décrit pas la page à proprement parler

Exemple: remplacer

        if($this->plxMotor->mode == 'article') {
            if($meta=='author')
                echo '<meta name="author" content="'.$this->artAuthor(false).'" />'."\n";
            else {
                $meta_content=trim($this->plxMotor->plxRecord_arts->f('meta_'.$meta));
                if(!empty($meta_content))
                    echo '<meta name="'.$meta.'" content="'.plxUtils::strCheck($meta_content).'" />'."\n";
                elseif(!empty($this->plxMotor->aConf['meta_'.$meta]))
                    echo '<meta name="'.$meta.'" content="'.plxUtils::strCheck($this->plxMotor->aConf['meta_'.$meta]).'" />'."\n";
            }
            return;
        }

par

        if($this->plxMotor->mode == 'article') {
            if($meta=='author')
                echo '<meta name="author" content="'.$this->artAuthor(false).'" />'."\n";
            else {
                $meta_content=trim($this->plxMotor->plxRecord_arts->f('meta_'.$meta));
                if(!empty($meta_content))
                    echo '<meta name="'.$meta.'" content="'.plxUtils::strCheck($meta_content).'" />'."\n";
            }
            return;
        }

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.