source: spip-zone/_plugins_/urls_pages/trunk/urls_pages_fonctions.php @ 99665

Last change on this file since 99665 was 99665, checked in by tcharlss@…, 4 years ago

v1.0.0 : premier jet d'une nouvelle version complètement refactorisée, et toujours aussi expérimentale.
Désolé pour le gros commit en 1 seule fois.

Les URLs des pages ne sont plus stockées dans le meta du plugin, mais dans le table spip_urls comme les autres URLs, avec type=, id_objet=0.
On ajoute une colonne 'page' utilisée uniquement pour les URLs des pages.
La migration est effectuée automatiquement lors de la mise à jour du plugin. Seules les URLs éventuellement non migrées (doublon dans la BDD) sont conservées dans la meta urls_pages. Réfléchir à leur prise en charge (message sur la page de gestion des URLs ?).

Le gros avantage de cette version, c'est qu'on à plus besoin de modifier le htaccess, ni d'indiquer le rewritebase dans la configuration.
On a juste à saisir une URL, et c'est tout.
De plus, on peut rentrer manuellement les pages, on ne se repose pas sur la détection automatique des squelettes, qui n'est donnée qu'à titre indicatif.

La fonction qui détecte les fonds de page a été refactorisée et migrée pour être utilisée dans une boucle DATA : <BOUCLE_fonds(DATA){source fonds_pages}>.
Par défaut, une boucle <BOUCLE_urls(URLS)> ne retourne pas les URLs des pages, à moins d'utiliser le critère {tout}.

On est obligé de surcharger la fonction urls_propres_dist() pour prendre en compte les pages, faute de pipeline.
Néammoins, la fonction dist est toujours utilisée pour tout autre URL que les pages.

Les URLs des pages sont gérées à partir du menu des URLs : publication -> gestion des URLs. On ajoute un menu sur cette page pour basculer entre la gestion des URLs des objets éditoriaux, et celle des URLs des pages.

Cette version est compatible SPIP >= 3.1

C'est un premier jet donc, il reste quelques pétouilles à finir.
À tester, mais pas en production !

File size: 2.5 KB
Line 
1<?php
2/**
3 * Fonctions utiles au plugin URLs Pages Personnalisées
4 *
5 * @plugin     URLs Pages Personnalisées
6 * @copyright  2016
7 * @author     tcharlss
8 * @licence    GNU/GPL
9 * @package    SPIP\Urls_pages_personnalisees\Fonctions
10 */
11
12if (!defined('_ECRIRE_INC_VERSION')) {
13        return;
14}
15
16/**
17 * Prendre en compte les URLs personnalisées pour la balise #URL_PAGE
18 *
19 * On utilise l'URL personnalisée si présente en base :
20 * `spip.php?page=X => une-belle-url-pour-la-page-X`
21 *
22 * @see http://www.openstudio.fr/Pages-personnalisees-et-reecriture.html
23 *
24 * @param string $url
25 *     URL de base : spip.php?page=X
26 * @return string $url
27 *     URL personnalisée si elle existe,
28 *     sinon l'URL de base
29 */
30function url_page_personnalisee($url) {
31
32        if (!function_exists('url_de_base')){
33                include_spip('inc/utils');
34        }
35        $url_de_base = url_de_base();
36        // retrouver la page d'après spip.php?page=X
37        $query = parse_url($url, PHP_URL_QUERY);
38        parse_str(parse_str($query));
39        if (isset($page)
40                and $url_personnalisee = sql_getfetsel('url', 'spip_urls', array('page = ' . sql_quote($page)))
41        ){
42                $url = rtrim($url_de_base, '/') . '/' . $url_personnalisee;
43        }
44
45        return $url;
46}
47
48
49/**
50 * Trouver le fond d'une page
51 *
52 * @uses trouver_fond()
53 *
54 * @return string | boolean
55 *     Chemin du squelette s'il existe
56 *     False sinon
57 */
58function trouver_fond_page($page) {
59
60        // D'abord dans les dossiers de ZCore/ZPIP
61        $dossier_z =
62                (defined('_DIR_PLUGIN_ZCORE') ? 'content' :
63                (defined('_DIR_PLUGIN_ZPIP') ? 'contenu' :
64                false));
65        if ($dossier_z) {
66                $fond = trouver_fond($page, $dossier_z);
67        }
68        // Sinon dans le dossier des squelettes
69        if (!$fond) {
70                $fond = trouver_fond($page);
71        }
72
73        return $fond;
74}
75
76
77/**
78 * Renvoie une liste des pages et le chemin de leurs squelettes.
79 *
80 * @uses inc_pages_to_array()
81 */
82function urls_pages_lister_pages(){
83        $pages_to_array = charger_fonction('fonds_pages_to_array', 'inc');
84        return $pages_to_array();
85}
86
87
88/**
89 * Renvoie une liste des objets éditoriaux et de leurs surnoms
90 *
91 * @return array
92 */
93if (!function_exists('lister_objets_types')) {
94function lister_objets_types(){
95
96        include_spip('base/objets');
97        $objets = array();
98        $tables_objets = lister_tables_objets_sql();
99        foreach($tables_objets as $table => $desc) {
100                // type de base
101                if (isset($desc['type'])
102                        and ($type = $desc['type'])
103                ) {
104                        $objets[] = $type;
105                } else {
106                        $objets[] = objet_type($table);
107                }
108                // surnoms
109                if (isset($desc['type_surnoms'])
110                        and count($type_surnoms = $desc['type_surnoms'])
111                ) {
112                        $objets = array_merge($objets, $type_surnoms);
113                }
114        }
115
116        return $objets;
117}
118}
Note: See TracBrowser for help on using the repository browser.