Difference between revisions of "Module Sites web"
m Tags: Mobile web edit Mobile edit |
Tag: 2017 source edit |
||
(21 intermediate revisions by 2 users not shown) | |||
Line 10: | Line 10: | ||
{{TemplateModFR}} | {{TemplateModFR}} | ||
{{BasculeDevUser| | {{BasculeDevUser| | ||
− | nom= | + | nom=Sites web| |
− | + | num=10000| | |
− | devdoc=[[Module | + | devdoc=[[Module Site Web (développeur)]]| |
userdoc=Cette page|}} | userdoc=Cette page|}} | ||
− | |||
− | |||
= Introduction = | = Introduction = | ||
− | + | Le module site web ajoute un CMS (système de gestion de contenus) à l'intérieur de Dolibar ERP CRM. | |
− | + | Vous pouvez créer votre propre site web dans Dolibarr, publier votre site web en utilisant un serveur web externe comme Apache et NGinx et réutiliser toutes les données de votre ERP CRM dans notre site web. | |
= Installation = | = Installation = | ||
− | {{ | + | {{NoInstallModuleFr}} |
= Configuration = | = Configuration = | ||
− | {{ | + | {{ActivationModuleFr}} |
− | = | + | = Créer un nouveau site web = |
− | + | Allez dans le menu principal "Site web" puis utilisez le bouton "Nouveau site web" pour initialiser un nouveau site web. Vous êtes prêt à ajouter votre première page. | |
− | = | + | = Ajouter une nouvelle page / un nouveau conteneur = |
− | + | Pour ajouter votre première page, vous pouvez commencer une page à partir de zéro ou importer un site web/modèle existant que vous pourrez modifier ultérieurement. | |
− | == | + | == Importer un modèle de site web == |
− | + | C'est le moyen le plus rapide de disposer d'un site web prêt à être publié. Cliquez sur "Importer un site web". Choisissez votre modèle ou téléchargez un modèle sur une boutique de modèles ou fourni par votre agence web. | |
− | == | + | == Créer une nouvelle page à partir de zéro == |
− | + | Il suffit de cliquer sur le bouton "Ajouter une page / un conteneur". Remplissez les méta-informations et "Sauvegardez". Vous pouvez maintenant cliquer sur " Editer la source " pour ajouter votre contenu HTML. | |
... | ... | ||
− | = | + | = Inclure du contenu dynamique dans une page = |
− | + | L'une des caractéristiques les plus intéressantes de Dolibarr CMS est que vous pouvez inclure du contenu dynamique en ajoutant du code PHP, n'importe où sur votre site web. Seules les personnes autorisées le font car elles ont besoin de la permission "Ajouter du contenu dynamique" pour pouvoir le faire. | |
− | + | L'ajout de contenu dynamique est aussi simple que le développement en PHP. Il suffit d'ajouter les balises <?php / ?>. Vous pouvez utiliser, dans votre code dynamique, n'importe laquelle des variables globales prédéfinies suivantes (elles sont déjà initialisées et renseignées) : | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
$conf, $user, $db, $mysoc, $website, $websitepage, $weblangs, $pagelangs | $conf, $user, $db, $mysoc, $website, $websitepage, $weblangs, $pagelangs | ||
− | == | + | == Obtenez les propriétés de votre entreprise == |
− | + | Voici un exemple de contenu dynamique pour obtenir le nom de votre entreprise : | |
<source lang="html"> | <source lang="html"> | ||
Line 63: | Line 52: | ||
</source> | </source> | ||
− | == | + | == Accéder aux propriétés de la page web == |
− | + | Voici un autre exemple de contenu dynamique à mettre dans le source de votre page permettant d'obtenir des métadonnées d'un conteneur/page : | |
<source lang="html"> | <source lang="html"> | ||
− | __( | + | __(Titre)__ : <?php echo $websitepage->title; ?><br> |
__(Description)__ : <?php echo $websitepage->description; ?><br> | __(Description)__ : <?php echo $websitepage->description; ?><br> | ||
__(Keywords)__ : <?php echo $websitepage->keywords; ?><br> | __(Keywords)__ : <?php echo $websitepage->keywords; ?><br> | ||
Line 73: | Line 62: | ||
</source> | </source> | ||
− | == | + | == Ajouter le contenu d'une page/conteneur dans une autre page/conteneur == |
− | + | L'inclusion d'un conteneur dans un conteneur parent permet de déplacer une partie du contenu (texte ou html) d'une page dans une sous-page. Vous pouvez donc l'inclure sur plusieurs pages. La modification du contenu de la sous-page sera propagée sur toute page qui inclut la sous-page. C'est similaire à l'utilisation des "Templates" avec Mediawiki ou à l'utilisation du #include en C++. | |
+ | |||
+ | Pour inclure le contenu d'une sous-page/sous-contenu dans une autre, il suffit d'ajouter ceci à l'endroit où vous souhaitez que le sous-contenu soit inclus : | ||
+ | |||
+ | <syntaxhighlight lang="html"> | ||
+ | <?php includeContainer('alias_du_conteneur_a_inclure'); ?> | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | ==Ajouter une redirection vers une autre page== | ||
+ | Si vous souhaitez effectuer une redirection vers une autre page, vous pouvez ajouter le code suivant dans la source de la page : | ||
+ | |||
+ | <syntaxhighlight lang="html"> | ||
+ | <?php redirectToContainer('alias_of_container_to_redirect_to'); ?> | ||
+ | </syntaxhighlight> | ||
+ | ou | ||
+ | <syntaxhighlight lang="html"> | ||
+ | <?php redirectToContainer('alias_of_container_to_redirect_to', '', 0, 0, $array_of_get_params); ?> | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | == Autres astuces == | ||
+ | Pour inclure une image stockée dans le répertoire medias (répertoire ouvert au public), utilisez le chemin relatif commençant par /medias, exemple : | ||
+ | <syntaxhighlight lang="html"> | ||
+ | <img src="/medias/image/myimagepath/filename.ext"> | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | Pour une image partagée avec un lien de partage (accès ouvert via la clé de hachage de partage du fichier), utilisez le wrapper : | ||
+ | <syntaxhighlight lang="html"> | ||
+ | <img src="/viewimage.php?hashp=12345679012..."> | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | Pour obtenir l'URL de l'image d'un objet PHP, utilisez | ||
+ | <syntaxhighlight lang="html"> | ||
+ | <img src="<?php print getImagePublicURLOfObject($object, 1, "_small") ?>"> | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | Pour obtenir l'URL d'une image dans le contenu HTML d'un article, utilisez | ||
+ | <syntaxhighlight lang="html"> | ||
+ | <img src="<?php print getImageFromHtmlContent($$htmlcontent, 1) ?>"> | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | |||
+ | == Exemple de code: Dernier article du blog == | ||
+ | Voici un exemple de page qui affiche la liste des 5 derniers articles actifs (conteneur de type "blogpost"), en français, qui contient le mot-clé "monmotclé". | ||
<source lang="html"> | <source lang="html"> | ||
<!-- Blog list --> | <!-- Blog list --> | ||
<section id="sectionnews" contenteditable="true" class="main section-50 section-md-50 section-md-bottom-50"> | <section id="sectionnews" contenteditable="true" class="main section-50 section-md-50 section-md-bottom-50"> | ||
− | <h2> | + | <h2>Derniers articles du blog</h2> |
<div class="center"> | <div class="center"> | ||
<?php | <?php | ||
− | $keyword = ' | + | $keyword = 'monmotclé'; |
$weblangs->loadLangs(array("main")); | $weblangs->loadLangs(array("main")); | ||
− | $arrayofblogs = $websitepage->fetchAll($website->id, 'DESC', 'date_creation', 5, 0, array('type_container'=>'blogpost', 'keywords'=>$keyword, 'status'=>'1', 'lang'=>' | + | $arrayofblogs = $websitepage->fetchAll($website->id, 'DESC', 'date_creation', 5, 0, array('type_container'=>'blogpost', 'keywords'=>$keyword, 'status'=>'1', 'lang'=>'fr')); |
− | if (is_numeric($arrayofblogs) && $arrayofblogs < 0) | + | if (is_numeric($arrayofblogs) && $arrayofblogs < 0) { |
− | |||
print '<div class="error">'.$weblangs->trans($websitepage->error).'</div>'; | print '<div class="error">'.$weblangs->trans($websitepage->error).'</div>'; | ||
− | } | + | } elseif (is_array($arrayofblogs) && ! empty($arrayofblogs)) { |
− | |||
− | |||
$fuser = new User($db); | $fuser = new User($db); | ||
− | foreach($arrayofblogs as $blog) | + | foreach($arrayofblogs as $blog) { |
− | |||
print '<div class="row justify-content-sm-center row-40">'; | print '<div class="row justify-content-sm-center row-40">'; | ||
print '<div class="container blog-box centpercent" style="padding: 20px; transition: .3s all ease;">'; | print '<div class="container blog-box centpercent" style="padding: 20px; transition: .3s all ease;">'; | ||
− | + | print '<a href="'.$blog->pageurl.'.php">'; | |
− | + | print '<div class="post-boxed-img-wrap"><img src="'.($blog->image ? 'viewimage.php?modulepart=medias&file='.$blog->image : 'medias/image/'.$website->ref.'/calendar.svg"').'" alt="" width="120"></div>'; | |
print '<div class="post-boxed-caption">'; | print '<div class="post-boxed-caption">'; | ||
print '<div class="post-boxed-title font-weight-bold">'.$blog->title.'</div>'; | print '<div class="post-boxed-title font-weight-bold">'.$blog->title.'</div>'; | ||
Line 112: | Line 139: | ||
print '</div>'; | print '</div>'; | ||
} | } | ||
+ | } else { | ||
+ | print $weblangs->trans("NoArticlesFoundForTheKeyword", $keyword); | ||
} | } | ||
− | + | ?> | |
− | + | </div> | |
− | + | </section> | |
− | + | </source> | |
− | + | ||
− | + | == Example de code: Liste des produits == | |
− | + | Voici un exemple de page qui affiche la liste des produits en base. | |
− | + | ||
+ | <source lang="html"> | ||
+ | <!-- Blog list --> | ||
+ | <section id="sectionproducts" contenteditable="true" class="main section-50 section-md-50 section-md-bottom-50"> | ||
+ | <h2>Liste des produits</h2> | ||
+ | <div class="center"> | ||
+ | <?php | ||
+ | $weblangs->loadLangs(array("main")); | ||
+ | |||
+ | $sql = 'SELECT rowid, ref FROM '.MAIN_DB_PREFIX.'product WHERE tosell > 0'; | ||
+ | $resql = $db->query($sql); | ||
+ | if ($resql) { | ||
+ | $num_rows = $db->num_rows($resql); | ||
+ | $i = 0; | ||
+ | while ($i < $num_rows) { | ||
+ | $obj = $db->fetch_object($resql); | ||
+ | print $obj->ref."<br>\n"; | ||
+ | $i++; | ||
+ | } | ||
+ | } else { | ||
+ | print $weblangs->trans("NoRecordFound"); | ||
} | } | ||
?> | ?> | ||
Line 127: | Line 176: | ||
</source> | </source> | ||
− | == | + | == Lire une autre base de données Dolibarr distante == |
− | + | Il suffit de créer une connexion à la base de données à distance et d'utiliser celle-ci pour vos requêtes SQL | |
<source lang="html"> | <source lang="html"> | ||
Line 137: | Line 186: | ||
</source> | </source> | ||
− | + | Remarque : vous pouvez également opter pour l'utilisation des API. | |
− | = | + | = Créer une page 404 personnalisée = |
− | + | Pour créer une page 404 personnalisée, il suffit de créer une page vide standard avec le nom "404" et le type "page". Ensuite, modifiez le contenu HTML de la page avec le contenu de votre choix, et ajoutez à la fin de la page | |
<source lang="html"> | <source lang="html"> | ||
Line 146: | Line 195: | ||
</source> | </source> | ||
− | + | Ensuite, vous devez modifier la configuration de votre serveur web pour indiquer d'utiliser cette page comme la page 404. Par exemple, avec Apache, ajoutez dans la configuration de votre hôte virtuel : | |
<source lang="ini"> | <source lang="ini"> | ||
ErrorDocument 404 /404.php | ErrorDocument 404 /404.php | ||
</source> | </source> | ||
− | = | + | = Déployer | Publier votre site web = |
− | + | Pour faire déployer votre site web, vous pouvez cliquer sur le lien "Déployer/Tester mon site web". Une fenêtre contextuelle vous montrera les instructions pour configurer le serveur web, comme Apache, afin que vous puissiez rendre votre site web accessible sur l'internet. Lorsqu'un site web est en ligne, il n'est pas nécessaire que l'application Dolibarr soit en ligne, mais la base de données doit toujours être démarrée. | |
− | Note: | + | Note : Il n'est pas possible que votre site web et le backoffice Dolibarr (qui est lui-même une application web) utilisent exactement le même nom de domaine. |
− | + | En effet, c'est grâce au nom de domaine que le serveur web (comme Apache, Nginx, ...) sait où rediriger la requête (Le backoffice Dolibarr lui-même ou le site web construit par le CMS de Dolibarr). | |
− | + | Mais vous pouvez choisir le début du nom pour les différencier. Par exemple, vous pouvez utiliser : | |
− | * http://admin.example.com | + | * http://admin.example.com pour l'outil de back-office Dolibarr et |
− | * http://www.example.com | + | * http://www.example.com pour le premier site web édité par le module CMS. |
− | * http://www2.example.com | + | * http://www2.example.com pour le deuxième site web édité par le module CMS. |
− | * http://www.example2.com | + | * http://www.example2.com pour le troisième site web édité par le module CMS. |
Latest revision as of 09:41, 2 October 2024
Sites web | |
---|---|
Numéro/ID du module | 10000 |
Doc utilisateur du module | Cette page |
Doc développeur du module | Module Site Web (développeur) |
Introduction
Le module site web ajoute un CMS (système de gestion de contenus) à l'intérieur de Dolibar ERP CRM. Vous pouvez créer votre propre site web dans Dolibarr, publier votre site web en utilisant un serveur web externe comme Apache et NGinx et réutiliser toutes les données de votre ERP CRM dans notre site web.
Installation
Ce module est livré en standard avec la distribution de Dolibarr, aussi il est déjà installé.
Configuration
Pour utiliser ce module, il vous faut d'abord l'activer. Pour cela, après s'être connecté avec un compte administrateur, aller sur la page "Accueil - Configuration - Modules".
Choisissez l'onglet dans lequel apparaît le module puis cliquez sur "Activer".
Le module est alors activé.
Si un pictogramme apparaît sur la vignette ou à la fin de la ligne du module, cliquez dessus pour accéder à la page de paramétrage spécifique à ce module.
Créer un nouveau site web
Allez dans le menu principal "Site web" puis utilisez le bouton "Nouveau site web" pour initialiser un nouveau site web. Vous êtes prêt à ajouter votre première page.
Ajouter une nouvelle page / un nouveau conteneur
Pour ajouter votre première page, vous pouvez commencer une page à partir de zéro ou importer un site web/modèle existant que vous pourrez modifier ultérieurement.
Importer un modèle de site web
C'est le moyen le plus rapide de disposer d'un site web prêt à être publié. Cliquez sur "Importer un site web". Choisissez votre modèle ou téléchargez un modèle sur une boutique de modèles ou fourni par votre agence web.
Créer une nouvelle page à partir de zéro
Il suffit de cliquer sur le bouton "Ajouter une page / un conteneur". Remplissez les méta-informations et "Sauvegardez". Vous pouvez maintenant cliquer sur " Editer la source " pour ajouter votre contenu HTML. ...
Inclure du contenu dynamique dans une page
L'une des caractéristiques les plus intéressantes de Dolibarr CMS est que vous pouvez inclure du contenu dynamique en ajoutant du code PHP, n'importe où sur votre site web. Seules les personnes autorisées le font car elles ont besoin de la permission "Ajouter du contenu dynamique" pour pouvoir le faire. L'ajout de contenu dynamique est aussi simple que le développement en PHP. Il suffit d'ajouter les balises <?php / ?>. Vous pouvez utiliser, dans votre code dynamique, n'importe laquelle des variables globales prédéfinies suivantes (elles sont déjà initialisées et renseignées) :
$conf, $user, $db, $mysoc, $website, $websitepage, $weblangs, $pagelangs
Obtenez les propriétés de votre entreprise
Voici un exemple de contenu dynamique pour obtenir le nom de votre entreprise :
<?php echo $mysoc->name; ?>
Accéder aux propriétés de la page web
Voici un autre exemple de contenu dynamique à mettre dans le source de votre page permettant d'obtenir des métadonnées d'un conteneur/page :
__(Titre)__ : <?php echo $websitepage->title; ?><br>
__(Description)__ : <?php echo $websitepage->description; ?><br>
__(Keywords)__ : <?php echo $websitepage->keywords; ?><br>
__(DateCreation)__ : <?php echo dol_print_date($websitepage->date_creation, 'dayhour', $weblangs); ?><br>
Ajouter le contenu d'une page/conteneur dans une autre page/conteneur
L'inclusion d'un conteneur dans un conteneur parent permet de déplacer une partie du contenu (texte ou html) d'une page dans une sous-page. Vous pouvez donc l'inclure sur plusieurs pages. La modification du contenu de la sous-page sera propagée sur toute page qui inclut la sous-page. C'est similaire à l'utilisation des "Templates" avec Mediawiki ou à l'utilisation du #include en C++.
Pour inclure le contenu d'une sous-page/sous-contenu dans une autre, il suffit d'ajouter ceci à l'endroit où vous souhaitez que le sous-contenu soit inclus :
<?php includeContainer('alias_du_conteneur_a_inclure'); ?>
Ajouter une redirection vers une autre page
Si vous souhaitez effectuer une redirection vers une autre page, vous pouvez ajouter le code suivant dans la source de la page :
<?php redirectToContainer('alias_of_container_to_redirect_to'); ?>
ou
<?php redirectToContainer('alias_of_container_to_redirect_to', '', 0, 0, $array_of_get_params); ?>
Autres astuces
Pour inclure une image stockée dans le répertoire medias (répertoire ouvert au public), utilisez le chemin relatif commençant par /medias, exemple :
<img src="/medias/image/myimagepath/filename.ext">
Pour une image partagée avec un lien de partage (accès ouvert via la clé de hachage de partage du fichier), utilisez le wrapper :
<img src="/viewimage.php?hashp=12345679012...">
Pour obtenir l'URL de l'image d'un objet PHP, utilisez
<img src="<?php print getImagePublicURLOfObject($object, 1, "_small") ?>">
Pour obtenir l'URL d'une image dans le contenu HTML d'un article, utilisez
<img src="<?php print getImageFromHtmlContent($$htmlcontent, 1) ?>">
Exemple de code: Dernier article du blog
Voici un exemple de page qui affiche la liste des 5 derniers articles actifs (conteneur de type "blogpost"), en français, qui contient le mot-clé "monmotclé".
<!-- Blog list -->
<section id="sectionnews" contenteditable="true" class="main section-50 section-md-50 section-md-bottom-50">
<h2>Derniers articles du blog</h2>
<div class="center">
<?php
$keyword = 'monmotclé';
$weblangs->loadLangs(array("main"));
$arrayofblogs = $websitepage->fetchAll($website->id, 'DESC', 'date_creation', 5, 0, array('type_container'=>'blogpost', 'keywords'=>$keyword, 'status'=>'1', 'lang'=>'fr'));
if (is_numeric($arrayofblogs) && $arrayofblogs < 0) {
print '<div class="error">'.$weblangs->trans($websitepage->error).'</div>';
} elseif (is_array($arrayofblogs) && ! empty($arrayofblogs)) {
$fuser = new User($db);
foreach($arrayofblogs as $blog) {
print '<div class="row justify-content-sm-center row-40">';
print '<div class="container blog-box centpercent" style="padding: 20px; transition: .3s all ease;">';
print '<a href="'.$blog->pageurl.'.php">';
print '<div class="post-boxed-img-wrap"><img src="'.($blog->image ? 'viewimage.php?modulepart=medias&file='.$blog->image : 'medias/image/'.$website->ref.'/calendar.svg"').'" alt="" width="120"></div>';
print '<div class="post-boxed-caption">';
print '<div class="post-boxed-title font-weight-bold">'.$blog->title.'</div>';
print '<ul class="list-inline list-inline-dashed text-uppercase">';
print '<li>'.dol_print_date($blog->date_creation, 'daytext', 'tzserver', $weblangs).'</li>';
$fuser->fetch($blog->fk_user_creat);
print '<li><span>by<span> <span class="text-primary">'.($fuser->firstname?$fuser->firstname:$fuser->login).'</span></span></li>';
print '</ul>';
print '</div>';
//includeContainer($blog->pageurl);
print '<span class="nohover">'.$blog->description.'</span>';
print '</a>';
print '</div>';
print '</div>';
}
} else {
print $weblangs->trans("NoArticlesFoundForTheKeyword", $keyword);
}
?>
</div>
</section>
Example de code: Liste des produits
Voici un exemple de page qui affiche la liste des produits en base.
<!-- Blog list -->
<section id="sectionproducts" contenteditable="true" class="main section-50 section-md-50 section-md-bottom-50">
<h2>Liste des produits</h2>
<div class="center">
<?php
$weblangs->loadLangs(array("main"));
$sql = 'SELECT rowid, ref FROM '.MAIN_DB_PREFIX.'product WHERE tosell > 0';
$resql = $db->query($sql);
if ($resql) {
$num_rows = $db->num_rows($resql);
$i = 0;
while ($i < $num_rows) {
$obj = $db->fetch_object($resql);
print $obj->ref."<br>\n";
$i++;
}
} else {
print $weblangs->trans("NoRecordFound");
}
?>
</div>
</section>
Lire une autre base de données Dolibarr distante
Il suffit de créer une connexion à la base de données à distance et d'utiliser celle-ci pour vos requêtes SQL
global $dbmaster;
$dbmaster = getDoliDBInstance('mysqli', 'myserver', 'userread', 'abcdef', 'databasename', 3306);
$confmaster = new Conf();
if ($dbmaster) $confmaster->setValues($dbmaster);
Remarque : vous pouvez également opter pour l'utilisation des API.
Créer une page 404 personnalisée
Pour créer une page 404 personnalisée, il suffit de créer une page vide standard avec le nom "404" et le type "page". Ensuite, modifiez le contenu HTML de la page avec le contenu de votre choix, et ajoutez à la fin de la page
<?php http_response_code(404); ?>
Ensuite, vous devez modifier la configuration de votre serveur web pour indiquer d'utiliser cette page comme la page 404. Par exemple, avec Apache, ajoutez dans la configuration de votre hôte virtuel :
ErrorDocument 404 /404.php
Déployer | Publier votre site web
Pour faire déployer votre site web, vous pouvez cliquer sur le lien "Déployer/Tester mon site web". Une fenêtre contextuelle vous montrera les instructions pour configurer le serveur web, comme Apache, afin que vous puissiez rendre votre site web accessible sur l'internet. Lorsqu'un site web est en ligne, il n'est pas nécessaire que l'application Dolibarr soit en ligne, mais la base de données doit toujours être démarrée.
Note : Il n'est pas possible que votre site web et le backoffice Dolibarr (qui est lui-même une application web) utilisent exactement le même nom de domaine. En effet, c'est grâce au nom de domaine que le serveur web (comme Apache, Nginx, ...) sait où rediriger la requête (Le backoffice Dolibarr lui-même ou le site web construit par le CMS de Dolibarr). Mais vous pouvez choisir le début du nom pour les différencier. Par exemple, vous pouvez utiliser :
- http://admin.example.com pour l'outil de back-office Dolibarr et
- http://www.example.com pour le premier site web édité par le module CMS.
- http://www2.example.com pour le deuxième site web édité par le module CMS.
- http://www.example2.com pour le troisième site web édité par le module CMS.