Vous n'êtes pas identifié(e).
13 février 2024 Sortie de Dotclear 2.29
> fix
Si les urls concernées sont des billets avec des post_type(s) particuliers, celles-ci ( les urls) devraient être disponibles à modification. Est-ce le cas?
Dernière modification par adjaya (2012-07-08 21:30:48)
Photo, Art et Création Numérique : http://benoit-grelier.photo7.fr/
Hors ligne
Il faut que gallery s'adapte à la méthode getUrlFor disponible avec la 2.4.1.2 .
=> Demander à dsls de reprendre son plugin gallery :)
Hors ligne
Y aurait-il moyen de supprimer également le type "archives" des URLs ?
A défaut, une rewrite rule serait-elle possible ?
Alors, petit rappel de vocabulaire :)
Pour un "type", on supprime le mot de représentation de l'URL.
Ainsi, tu souhaites pour le type d'URL "archive" (sans '-s') supprimer le mot "archive" de l'URL.
Effectivement, ça peut préter à confusion, le type et la représentation sont souvent identiques.
Après, pour le plugin du compère adjaya, j'imagine que c'est un oubli ?
Hors ligne
Hors ligne
fix a écrit :Y aurait-il moyen de supprimer également le type "archives" des URLs ?
A défaut, une rewrite rule serait-elle possible ?Alors, petit rappel de vocabulaire :)
Pour un "type", on supprime le mot de représentation de l'URL.
Ainsi, tu souhaites pour le type d'URL "archive" (sans '-s') supprimer le mot "archive" de l'URL.Effectivement, ça peut préter à confusion, le type et la représentation sont souvent identiques.
Après, pour le plugin du compère adjaya, j'imagine que c'est un oubli ?
Oui, le mot type peux prêter à confusion : post_ type, type d'url...
Pour l'oubli, pas vraiment, j'ai regardé cette possibilité, et les éventuelles complications que cela représente.
Sans rentrer dans les détails de code, changer une url avec dotclear est assez simple ( il y a même un plugin pour faire cela), mais dans le cas de freeUrls, supprimer un mot de la représentation de l'url enlève la possibilité de la reconnaitre sans ajouter des vérifications. Cette possibilité est ébauchée dans le plugin en utilisant un behavior qui en théorie permet d'étendre les possibilités du plugin, mais comme je l'ai dit, je n'ai fait encore aucun tests la-dessus...
PS: je n'ai pas vraiment le loisir avant cet hivers de trouver de la disponibilité de reprendre le dev de mes projets, donc patience...
Dernière modification par adjaya (2012-07-12 22:33:19)
Photo, Art et Création Numérique : http://benoit-grelier.photo7.fr/
Hors ligne
Je n'arrive malheureusement pas à le faire marcher...
J'ai les erreurs suivantes :
Warning: array_merge() [function.array-merge]: Argument #2 is not an array in /homez.184/xxx/www/blog/plugins/freeUrls/_prepend.php on line 106
Warning: Cannot modify header information - headers already sent by (output started at /homez.184/xxx/www/blog/plugins/freeUrls/_prepend.php:106) in /homez.184/xxx/www/blog/inc/libs/clearbricks/common/lib.http.php on line 253
Warning: Cannot modify header information - headers already sent by (output started at /homez.184/xxx/www/blog/plugins/freeUrls/_prepend.php:106) in /homez.184/xxx/www/blog/inc/libs/clearbricks/common/lib.http.php on line 255
Warning: Cannot modify header information - headers already sent by (output started at /homez.184/xxx/www/blog/plugins/freeUrls/_prepend.php:106) in /homez.184/xxx/www/blog/inc/public/lib.urlhandlers.php on line 108
Warning: Cannot modify header information - headers already sent by (output started at /homez.184/xxx/www/blog/plugins/freeUrls/_prepend.php:106) in /homez.184/xxx/www/blog/inc/libs/clearbricks/common/lib.http.php on line 278
J'ai désactivé mon .htaccess pensant que ça pouvait provenir de là, mais ça n'a rien changé.
En fait, je souhaitais enlever le suffixe /post/. Donc, concrètement, ça l'enlève bien, mais par contre, je n'accède plus aux articles (erreur 404 systématique).
Dernière modification par Kysban (2012-09-06 01:47:09)
Hors ligne
@ kysban
Ce bug est connu, et en attendant une correction il faut mettre les mains dans le cambouis et ajouter du code comme suis dans le fichier _prepend.php juste après la déclaration de la fonction freePublicUrlRegister($core)
public static function freePublicUrlRegister($core)
{
//ligne à ajouter:
$freeTypes = array();
Photo, Art et Création Numérique : http://benoit-grelier.photo7.fr/
Hors ligne
Désolé je n'avais pas vu... ;(
Merci beaucoup, ça corrige le tir ! :)
Hors ligne
Bonjour,
Cherchant à utiliser FreeURLs pour enlever /post/ des URL, je constate le bug dont on parle ici.
Sous la version 2.4.4, dans le fichier /inc/public/prepend.php, je ne sais pas où insérer la correction. Je ne trouve pas la déclaration de la fonction freePublicUrlRegister($core).
Merci de votre éclairage.
Cordialement
Geba
Hors ligne
Salut geba,
C'est le fichier _prepend.php du plugin qu'il faut modifier (/plugins/freeUrls). ;)
Ayant moi même eu besoin d'installer le plugin sur un autre de mes blogs, je confirme que la bidouille continue de fonctionner en 2.4.4. :)
Hors ligne
Bonjour.
Je viens de trouver via le premier message de ce fil la version 0.0.2
Questions :
Le plugin n’étant pas distribué sur dotaddict, est-ce que ...
- C'est bien la dernière version du plugin ?
- Il comporte des risques éventuels ?
Autre problème :
Je constate un souci avec l'utilisation du plugin et le breadcrumb.
Un lien de type :
ndd.com/category/ma-categorie
Deviens alors :
ndd.com//ma-categorie
Il y a donc un "double slash" qui viens faussé les liens et la navigation, y a t-il un moyen de réparer ce soucis ?
Merci pour vos lumières.
Hors ligne
Je me répond à moi même.
Autre problème :
Je constate un souci avec l'utilisation du plugin et le breadcrumb.
Un lien de type :
ndd.com/category/ma-categorie
Deviens alors :
ndd.com//ma-categorie
Il y a donc un "double slash" qui viens faussé les liens et la navigation, y a t-il un moyen de réparer ce soucis ?
Concernant le double slash, le plugin FreeUrls n'est pas en cause mais il semblerait que ce soit Breadcrumb qui "déconne".
Plus de détails ici http://forum.dotclear.org/viewtopic.php … 28#p339728
Désolé d'avoir pollué ce fil à ce propos.
Par contre en ce qui concerne la version de FreeUrls 0.0.2, est-ce elle la dernière version en date ?
Et y a t-il une raison particulière pour ce plugin ne soit pas disponible sur dotaddict ?
Merci pour votre intérêt.
Hors ligne
Par contre en ce qui concerne la version de FreeUrls 0.0.2, est-ce elle la dernière version en date ?
Et y a t-il une raison particulière pour ce plugin ne soit pas disponible sur dotaddict ?
Le plugin n'a pas été mis à jour depuis longtemps, je vais regarder ça, afin de prendre en compte les évolutions de dc2 depuis.
Photo, Art et Création Numérique : http://benoit-grelier.photo7.fr/
Hors ligne
Merci pour ton suivit adjaya.
Hors ligne
Bonjour adjaya, je reviens aux nouvelles pour savoir si une nouvelle version sera a l'intérieur d'un oeuf de pâques ?
Hors ligne
Bonjour adjaya, je reviens aux nouvelles pour savoir si une nouvelle version sera a l'intérieur d'un oeuf de pâques ?
Dans l'état j'ai pas vu d'incompatibilité avec la dernière version de dotclear, donc , excepté un retour de bug sérieux, pas d'urgence...
Photo, Art et Création Numérique : http://benoit-grelier.photo7.fr/
Hors ligne
Bonjour adjaya
Il semblerait qu'il y est une "coquille" entre le plugin FreeUrls et Sitemaps.
Ma configuration :
ovh perso mutu
Php Version 7.0.15
Version dotclear 2.11.2
Je suis en https et j'utilise le plugin FreeUrls pour enlever les /category/, /post/, /pages/ etc..
Je viens d'installer le plugin Sitemaps et lors de la consultation du lien "NDD.com/sitemap.xml", je me rend compte qu'il y a un problème de double slash.
Exemple :
<loc>https://www.NDD.com//mon-titre-de-billet</loc>
<loc>https://www.NDD.com//un-autre-article</loc>
j'ai suggéré la piste évoquée dans le sujet de Breadcrumb problème double slash avec FreeUrls.
Ou les getBase() étaient obsolètes et qu’il s'agissait de changer en getURLFor() pour les nouveaux behaviors.
Le problème vient du fait que Breadcrumb n'est pas à jour et utilise la méthode getBase() qui est obsolète pour FreeUrls, Il faut à la place utiliser la méthode getURLFor().
C'est un pré-requis incontournable pour que FreeUrls fonctionne correctement.
Suite à ça, Franck a sortie la version Sitemaps 1.3, mais le souci n'ai pas résolu pour le "double slash".
J'ai donc essayé de faire une "rustine" pas propre du tout .
Pour cela j'ai modifié le class.dc.sitemaps.php en /*commentant*/ les lignes ci-dessous
// Default post types
$this->addPostType(
'post',
$this->blog->url.$this->core->url->getURLFor('post')/* .'/' */,
$this->blog->settings->sitemaps->sitemaps_posts_fq,
$this->blog->settings->sitemaps->sitemaps_posts_pr
);
$this->addPostType(
'page',
$this->blog->url.$this->core->url->getURLFor('pages')/* .'/' */,
$this->blog->settings->sitemaps->sitemaps_pages_fq,
$this->blog->settings->sitemaps->sitemaps_pages_pr
);
}
// Categories URLs
if ($this->core->blog->settings->sitemaps->sitemaps_cats_url)
{
$freq = $this->getFrequency($this->blog->settings->sitemaps->sitemaps_cats_fq);
$prio = $this->getPriority($this->blog->settings->sitemaps->sitemaps_cats_pr);
$cats = $this->blog->getCategories(array('post_type'=>'post'));
while ($cats->fetch()) {
$this->addEntry(
$this->blog->url.$this->core->url->getURLFor("category")/* ."/" */.$cats->cat_url,
$prio,$freq);
}
}
if ($this->core->plugins->moduleExists('tags') && $this->core->blog->settings->sitemaps->sitemaps_tags_url)
{
$freq = $this->getFrequency($this->blog->settings->sitemaps->sitemaps_tags_fq);
$prio = $this->getPriority($this->blog->settings->sitemaps->sitemaps_tags_pr);
$meta = new dcMeta($this->core);
$tags = $meta->getMeta('tag');
while ($tags->fetch()) {
$this->addEntry(
$this->blog->url.$this->core->url->getURLFor("tag")/* ."/" */.rawurlencode($tags->meta_id),
$prio,$freq);
}
}
Sur la papier les liens du sitemap semblent bons :
pour les catégories
<url><loc>https://www.NDD.com/category-1</loc><priority>0.6</priority><changefreq>weekly</changefreq></url>
<url><loc>https://www.NDD.com/category-2</loc><priority>0.6</priority><changefreq>weekly</changefreq></url>
<url><loc>https://www.NDD.com/category-3</loc><priority>0.6</priority><changefreq>weekly</changefreq></url>
pour les posts
<url><loc>https://www.NDD.com/titre-du-billet-1</loc><priority>1.0</priority><changefreq>daily</changefreq><lastmod>2017-04-17T09:20:02+02:00</lastmod></url>
<url><loc>https://www.NDD.com/titre-du-billet-2</loc><priority>1.0</priority><changefreq>daily</changefreq><lastmod>2017-04-26T09:19:45+02:00</lastmod></url>
Dans la foulée, Franck fait une remarque comme quoi le plugin FreeUrls pourrait être en cause.
Le pb de faire cette modif est qu'elle liée au plugin freeurl et que ça fonctionne correctement dans les autres cas.
Il va falloir regarder ça de plus près, mais c'est peut-être du côté de freeurl qu'il faut corriger et plus du côté sitemap, qui certes avait besoin de cette mise à jour pour tenir compte du behavior, mais qui ne me semble pas être la cause du problème.
Donc, y a t'il une rustine ou une façon "plus propre" que ma modif ci-dessus pour rendre le plugin FreeUrls et Sitemaps 1.3 compatible.
Cordialement
Hors ligne
La méthode getURLFor() ne gère correctement les '/', qu'à condition d'en utiliser les deux arguments quand l'url est composée .
C'est d'ailleurs dans ce but quelle a été crée, et ainsi parer au bug du double /.
En d'autres termes, c'est normal que
getURLFor("category") ."/" .$cats->cat_url par exemple ne fonctionne pas quand le type "category" est vide, ce que permet freeUrl.
La bonne écriture est
getURLFor("category", $cats->cat_url );
Photo, Art et Création Numérique : http://benoit-grelier.photo7.fr/
Hors ligne
La méthode getURLFor() ne gère correctement les '/', qu'à condition d'en utiliser les deux arguments quand l'url est composée .
C'est d'ailleurs dans ce but quelle a été crée, et ainsi parer au bug du double /.
En d'autres termes, c'est normal que
getURLFor("category") ."/" .$cats->cat_url par exemple ne fonctionne pas quand le type "category" est vide, ce que permet freeUrl.La bonne écriture est
getURLFor("category", $cats->cat_url );
Faut que je retourne voir ce que fait sitemap dans ce cas…
Dotclear addicted since 2004
Hors ligne
Bonjour adjaya et Franck,
Je me permet une brève parenthèse sur ce fil ... .
Adjaya dit que getURLFor("category") ."/" .$cats->cat_url devrait être getURLFor("category", $cats->cat_url );
Adjaya, serrait-tu m'indiquer comment devrais-je réécrire ?
- getURLFor('post').'/',
- getURLFor('pages').'/',
- getURLFor("tag")."/".rawurlencode($tags->meta_id)
Afin que je puisse rendre sitemaps fonctionnel (le temps que Franck sorte une mise à jour).
Car les outils de Google sont dans le rouge, tous les liens renvoyés par le sitemaps sont faux due à ce double slash.
Merci pour votre attention.
Hors ligne
essaye avec ca: (si ca marche pas, faut pas m'en vouloir, modif faite en 10 minutes et non testée! )
class.dc.sitemaps.php
<?php
# -- BEGIN LICENSE BLOCK ----------------------------------
#
# This file is part of Sitemaps, a plugin for DotClear2.
# Copyright (c) 2006-2015 Pep and contributors.
# Licensed under the GPL version 2.0 license.
# See LICENSE file or
# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
#
# -- END LICENSE BLOCK ------------------------------------
if (!defined('DC_RC_PATH')) {return;}
class dcSitemaps
{
protected $core;
protected $blog;
protected $urls;
protected $freqs;
protected $post_types;
public function __construct($core)
{
$this->core = $core;
$this->blog = $core->blog;
$this->urls = array();
$this->freqs = array('','always','hourly','daily','weekly','monthly','never');
$post_types = array();
// Default post types
$this->addPostType(
'post',
'post',
$this->blog->settings->sitemaps->sitemaps_posts_fq,
$this->blog->settings->sitemaps->sitemaps_posts_pr
);
$this->addPostType(
'page',
'pages',
$this->blog->settings->sitemaps->sitemaps_pages_fq,
$this->blog->settings->sitemaps->sitemaps_pages_pr
);
}
public function getURLs()
{
if ($this->blog->settings->sitemaps->sitemaps_active && empty($this->urls)) {
$this->collectURLs();
}
return $this->urls;
}
public function addPostType($type,$base_url,$freq = 0, $priority = 0.3)
{
if (preg_match('!^([a-z_-]+)$!',$type)) {
$this->post_types[$type]['base_url'] = $base_url;
$this->post_types[$type]['frequency'] = $this->getFrequency($freq);
$this->post_types[$type]['priority'] = $this->getPriority($priority);
return true;
}
return false;
}
public function addEntry($loc,$priority,$frequency,$lastmod = '')
{
$this->urls[] = array(
'loc' => $loc,
'priority' => $priority,
'frequency' => ($frequency == '')?null:$frequency,
'lastmod' => ($lastmod == '')?null:$lastmod
);
}
public function getPriority($value)
{
return(sprintf('%.1f',min(abs((float)$value),1)));
}
public function getFrequency($value)
{
return $this->freqs[min(abs(intval($value)),6)];
}
public function collectEntriesURLs($type = 'post')
{
if (!array_key_exists($type,$this->post_types)) {
return;
}
$freq = $this->post_types[$type]['frequency'];
$prio = $this->post_types[$type]['priority'];
$base_url = $this->post_types[$type]['base_url'];
// Let's have fun !
$query =
"SELECT p.post_id, p.post_url, p.post_tz, ".
"p.post_upddt, MAX(c.comment_upddt) AS comments_dt ".
"FROM ".$this->blog->prefix."post AS p ".
"LEFT OUTER JOIN ".$this->blog->prefix."comment AS c ON c.post_id = p.post_id ".
"WHERE p.blog_id = '".$this->blog->con->escape($this->blog->id)."' ".
"AND p.post_type = '".$type."' AND p.post_status = 1 AND p.post_password IS NULL ".
'GROUP BY p.post_id, p.post_url, p.post_tz, p.post_upddt, p.post_dt '.
'ORDER BY p.post_dt ASC';
$rs = $this->blog->con->select($query);
while ($rs->fetch()) {
if ($rs->comments_dt !== null) {
$last_ts = max(strtotime($rs->post_upddt),strtotime($rs->comments_dt));
} else {
$last_ts = strtotime($rs->post_upddt);
}
$last_dt = dt::iso8601($last_ts,$rs->post_tz);
$url = $this->blog->url.$this->core->url->getURLFor($base_url, html::sanitizeURL($rs->post_url));
$this->addEntry($url,$prio,$freq,$last_dt);
}
}
protected function collectURLs()
{
// Homepage URL
if ($this->blog->settings->sitemaps->sitemaps_home_url)
{
$freq = $this->getFrequency($this->blog->settings->sitemaps->sitemaps_home_fq);
$prio = $this->getPriority($this->blog->settings->sitemaps->sitemaps_home_pr);
$this->addEntry($this->blog->url,$prio,$freq);
}
// Main syndication feeds URLs
if ($this->core->blog->settings->sitemaps->sitemaps_feeds_url)
{
$freq = $this->getFrequency($this->blog->settings->sitemaps->sitemaps_feeds_fq);
$prio = $this->getPriority($this->blog->settings->sitemaps->sitemaps_feeds_pr);
$this->addEntry(
$this->blog->url.$this->core->url->getURLFor('feed', 'rss2'),
$prio,$freq);
$this->addEntry(
$this->blog->url.$this->core->url->getURLFor('feed', 'atom'),
$prio,$freq);
}
// Posts entries URLs
if ($this->core->blog->settings->sitemaps->sitemaps_posts_url) {
$this->collectEntriesURLs('post');
}
// Pages entries URLs
if ($this->core->plugins->moduleExists('pages') && $this->core->blog->settings->sitemaps->sitemaps_pages_url) {
$this->collectEntriesURLs('page');
}
// Categories URLs
if ($this->core->blog->settings->sitemaps->sitemaps_cats_url)
{
$freq = $this->getFrequency($this->blog->settings->sitemaps->sitemaps_cats_fq);
$prio = $this->getPriority($this->blog->settings->sitemaps->sitemaps_cats_pr);
$cats = $this->blog->getCategories(array('post_type'=>'post'));
while ($cats->fetch()) {
$this->addEntry(
$this->blog->url.$this->core->url->getURLFor("category", $cats->cat_url),
$prio,$freq);
}
}
if ($this->core->plugins->moduleExists('tags') && $this->core->blog->settings->sitemaps->sitemaps_tags_url)
{
$freq = $this->getFrequency($this->blog->settings->sitemaps->sitemaps_tags_fq);
$prio = $this->getPriority($this->blog->settings->sitemaps->sitemaps_tags_pr);
$meta = new dcMeta($this->core);
$tags = $meta->getMeta('tag');
while ($tags->fetch()) {
$this->addEntry(
$this->blog->url.$this->core->url->getURLFor("tag", rawurlencode($tags->meta_id)),
$prio,$freq);
}
}
// External parts ?
# --BEHAVIOR-- sitemapsURLsCollect
$this->core->callBehavior('sitemapsURLsCollect', $this);
}
}
Dernière modification par adjaya (2017-05-16 09:20:07)
Photo, Art et Création Numérique : http://benoit-grelier.photo7.fr/
Hors ligne
Vous n'êtes pas identifié(e).