ManageFile - version 0.3
Par Tin le mercredi, juin 8 2005, 11:13 - Dotclear - Lien permanent
on d'accord, je l'avoue, j'ai été froudroyé par une crise de flemingite aigue, mais voici enfin le hack pour la gestion des fichiers sous dotclear 1.2.1
Pour les impatients, il suffit de désarchiver le fichier ManageFile-v0.3.tar.gz dans le répertoire principal de dotclear. Puis de configurer le nom du répertoire des fichiers dans blogconf.
Attention si vous avez déjà fait des modifications sur le coeur de dotclear, elles seront supprimées étant donnée que les fichiers inclus dans l'archive ont été modifiés immmédiatement après l'installation de dotclear 1.2.1.
Pour ceux qui ont un peu plus de courage et qui veulent comprendre comment ca marche, voici la procédure à suivre :
Copie des nouveaux fichiers
- Copier les fichiers ico_file.png, bt_file.png et file.png dans le répertoire /ecrire/images/.
- Copier les fichiers files.php et files-popup.php dans /ecrire/
- Copier le fichier class.dc.filemanager.php dans /inc/classes/
Modification des fichiers originaux
- Editer le fichier /ecrire/index.php.
Ajouter après la ligne 46 :
__('Manage images'),'images.php','images/ico_image.png',false);
les lignes :
$mySubMenu->addItem(
__('Manage files'),'files.php','images/ico_file.png',false);
- Editer le fichier /ecrire/poster.php.
Ajouter après la ligne 428 :
tb.btImg('".str_replace("'","\'",__('Internal image'))."','images-popup.php');
la ligne :
tb.btFile('".str_replace("'","\'",__('Internal file'))."','files-popup.php');
- Editer le fichier ecrire/js/toolbar.js.
Après la ligne 40 :
this.insImg = function() {}
ajouter les lignes :
this.btFile = function() {}
this.insFile = function() {}
Après la ligne 318 :
}
et avant la ligne 320 :
// methods
Insérer les lignes :
function btFile(label,url)
{
addButton(img_path+'bt_file.png',label,
function() {
popup(url);
});
}
function insFile(src, msg_name)
{
if (document.all) {
var name = window.prompt(msg_name, '');
textarea.focus();
if (getFormat() == 'wiki') {
textarea.value = textarea.value+'['+name+'|'+src+']';
} else {
textarea.value = textarea.value+'<a href ="'+src+'">'+name+'</a>"';
}
} else {
encloseSelection('','',
function() {
var name = window.prompt(msg_name, '');
if (!name) { name = src }
if (getFormat() == 'wiki') {
return '['+name+'|'+src+']';
} else {
return '<a href="'+src+'">'+name+'</a>';
}
});
}
}
Après la ligne 369 :
this.insImg = insImg;
Ajouter les lignes :
this.btFile = btFile; this.insFile = insFile;
- Editer le fichier /inc/classes/class.filemanager.php
Ajouter :
# Types de fichier office (Word,Excel,Powerpoint,Acrobat,Openoffice) $this->_types['office'] = '.doc|.xls|.pps|.ppt|.pdf|.sxw|.sxc|.sxi';
après la ligne 39 :
$this->_types['txt'] = '.htm|.html|.php|.php3|.inc|.xml|.txt|.xhtml|.css';
Ajouter :
function isOffice()
{
return ($this->__getType($this->root.$this->base_path) == 'office');
}
après les lignes 177-178 :
return ($this->__getType($this->root.$this->base_path) == 'txt'); }
Ajouter :
} elseif (preg_match('/('.$this->types['office'].')$/i',basename($f)))
{
return 'office';
après les lignes 268-269 :
} elseif (preg_match('/('.$this->_types['txt'].')$/i',basename($f))) {
return 'txt';
Création du répertoire des fichiers
- Créer le répertoire /files/
- Donner lui les droits de l'utilisateur adéquates
Modification des fichiers de configurations
- Editer le fichier /inc/post_config.php
Rajouter à la fin du fichier avant le ?> final :
#dc_files_root
if (!defined('dc_files_path')) {
define('dc_files_root',$_SERVER['DOCUMENT_ROOT'].'/'.dc_files_url);
} elseif (strpos(dc_files_path,'/') === 0) {
define('dc_files_root',dc_files_path);
} else {
define('dc_files_root',$_SERVER['DOCUMENT_ROOT'].'/'.dc_files_path);
}
- Editer le fichier ecrire/tools/blogconf/index.php
Ajouter la ligne :
$p_files_url = trim($_POST['p_files_url']);
après la ligne 43 :
$p_img_url = trim($_POST['p_img_url']);
Ajouter les lignes :
if ($p_files_url == '') {
$arry_err[] = __('You must give an files location');
}
après les lignes 73-74 :
$arry_err[] = __('You must give an images location');
}
Ajouter les lignes :
$p_files_url = preg_replace('|/+$|','',$p_files_url);
$p_files_url = preg_replace('|^/+|','',$p_files_url);
$p_files_url = '/'.$p_files_url.'/';
après la ligne 101 :
$p_img_url = '/'.$p_img_url.'/';
Ajouter :
$objIni->editVar('dc_files_url',$p_files_url);
après la ligne 111 :
$objIni->editVar('dc_img_url',$p_img_url);
Ajouter les lignes :
'<p class="field"><label for="p_files_url"><strong>'.__('Files location').' :</strong> '.
'('.sprintf(__('From %s'),'http://'.$_SERVER['HTTP_HOST']).') '.
helpLink('index&plugin=blogconf','files_url').'</label>'.
form::field('p_files_url',40,'',htmlspecialchars(dc_files_url)).'</p>'.
après la ligne 234 :
form::field('p_img_url',40,'',htmlspecialchars(dc_img_url)).'</p>'.
Modifier les fichiers de langues[1]
Il ne vous reste plus qu'à aller dans l'outil blogconf et de configurer l'emplacement des fichiers[2]. Et voilà, maintenant vous pouvez insérer des fichiers dans vos billets.


Commentaires
Tout d'abord, très bonne idée d'avoir proposé cette modif de l'excellent Dotclear afin de télécharger et mettre en ligne des documents. C'est vraiment un plus pour le travail coopératif via Dotclear !
J'aimerai simplement signaler une anomalie lors de l'insertion d'un document interne, le lien inséré dans le post est de la forme : <a href="mon_chemin/ecrire/files/mon_doc.pdf"</a>Mon document</a>.
Forcement, il est très simple de corriger le pb en supprimant le "</a" qui pose problème. Est-il possible de corriger cela simplement dans le fichier "toolbar.js" ?
Enfin je pense à une évolution possible. Il s'agit d'ajouter une case à cocher juste sous le form du lien, cette case permettrait de savoir si le document est ouvert dans la même fenêtre que le blog, ou dans un autre fenêtre (ajout de target="_blank" dans le lien)
Très cordialement,
Fred
Merci Fred, je n'avais effectivement pas vu cette coquille se glisser dans mon code. Cela a été corrigé dans le texte et dans l'archive. Pour ce qui est d'ouvrir le document dans une autre fenêtre, je suis en train de chercher une solution alternative au "target=_blank" car ce n'est pas comptatible XHTML Strict.
C'est une bonne idée d'avoir trouvé ce système pour l'inserion de fichiers. Mais je ne comprends de quels fichier parles tu quand tu dis: "Il ne vous reste plus qu'à aller l'outil blogconf et de configurer l'emplacement des fichiers"
En attente d'une prompt réponse.
Merci d'avance.
Je ne fais pas référence à un fichier, mais à l'outil de configuration de dotclear "blogconf". Il te suffit de cliquer sur l'onglet "Outils" puis "Configuration de dotclear"
Ok. Mais c'est quel partie que je dois changer : URL vers le weblogue, Emplacement de l'application ou Files location.
Tu dis aussi que : "Si vous avez suivi mes explications à la lettre,il devrait s'agir de /dotclear/files/", mais moi dans le dossier "files" de /dotclear/files je n'ai rien du tout donc qu'est-ce que je dois y mettre.
Cordialement,
Sab.
Désolé, c'est vrai que mon explication n'est pas très clair à ce niveau la. Il s'agit du champ "files location",qui se trouve être vide, où tu y renseignes la destination de tes fichiers soit "/dotclear/files/". Je n'ai pas encore eu le temps de m'occuper des fichiers de langues mais cela ne devrait pas tarder. De plus, il est normal que ton répertoire /files soit vide car tu n'y as pas encore mis de fichiers.
Pour ma part, le champ "files location" n'est pas vide car il y a déjà "dotclear" d'inscrit dedans.
Et quand je rajoute "/files/" après dotclear et que j'enregistre, il ne le prend pas en compte il me remet a chaque fois "dotclear" et non "/dotclear/files/", donc qu'est-ce que je dois faire ?????
Sinon dans ma page "/dotclear/ecrire/" kan je clique sur manage files, il me met un message d'erreur que je n'arrive pas à trouver, c'est-à-dire (Fatal error: Call to a member function on a non-object in c:\easyphp1-8\www\dotclear\inc\classes\class.blog.php on line 283)
qu'est-ce que je peux faire pour résoudre le problème.
En espérant que vous puissiez m'aider,
cordialement, Sab.
- Premièrement le répertoire à créer n'est pas "/ecrire/files/" mais "/files/".
- Deuxième erreur, dans le fichier "/ecrire/tools/blogconf/index.php" au environ de la ligne 73, c'est "$arry_err[] =" qu'il faut mettre j'ai oublié de mettre les crochets.
Normalement cela devrait fonctionner.
Je suis désolé mais cela ne fonctionne toujours pas. Les crochets je les avais déjà mis. Et je viens de déplacer le dossier files dans /dotclear/files/ et non dans dotclear/ecrire/files/ mais ce que je voulais dire c'est que dans mon blog quand je met l'adresse .../dotclear/ecrire/ et que je clique sur le lien "Manage files" cela me met l'erreur que je vous ai dit précedement et qui ne change pas.
- De plus, dans outils, Configuration de DotClear le champ "files location" n'est pas vide car il y a déjà "dotclear" d'inscrit dedans.
Et quand je rajoute "/files/" après dotclear et que j'enregistre, il ne le prend pas en compte il me remet a chaque fois "dotclear" en me disant "Fichier de configuration mis à jour avec succès."
et non "/dotclear/files/", donc qu'est-ce que je dois faire ?????
D'autre part, vous avez oublié un tiret du 8 dans le fichier inc/classes/class.filemanager.php entre la flèche et types['office'] ("} elseif (preg_match('/('.$this->types['office'].')$/i',basename($f)))")
Et je voulais aussi vous dire qu'il a fallu que je fasse la déclaration de la variable de dc_files_url dans le fichier /inc/post-config.php
(#déclaration de dc_files_url
define('dc_files_url',"dotclear");), je pense que vous l'avez oublié.
La déclaration de dc_files_url se fait justment via blogconf, et c'est pour cela que tu as dotclear au lieu d'avoir "Files location" vide. Donc tu peux toujours y mettre ce que tu veux, vu que tu l'as définis en dur dans ton fichier post-config.php cela ne change rien. Essaye en supprimant la déclaration de dc_files_url.
C'est bon maintenant dans "Files location" j'ai bien /dotclear/files/ mais par contre j'ai toujours la même erreur quand je vais dans l'onglet "Billets" puis "Manage files" c'est toujours la même : (Fatal error: Call to a member function on a non-object in c:\easyphp1-8\www\dotclear\inc\classes\class.blog.php on line 283). J'ai tout revérifier dans le code que j'ai rajouté et je ne trouve pas d'erreur. Donc je ne comprends plus rien là !!!!
Cordialement, Sab.
Essaye de récupérer de nouveau les fichiers php, à savoir "files.php", "files-popup.php" et "class.dc.filemanager.php". Il s'avère que je les avait mis avec l'extension php donc ton navigateur essaye de les interpréter, même en faisant un "enregistrer la cible du lien sous....". Ils sont maintenant avec l'extension .txt donc il faut les renommer en .php, une fois télécharger sur ton poste.
Merci, franchement c'est trop gentil car maintenant cela fonctionne.
Mais par contre quand je veux insérez un fichier ca me met 2 erreurs: (Notice: Undefined variable: dest_img in c:\easyphp1-8\www\dotclear\ecrire\files.php on line 76, et, Warning: Cannot modify header information - headers already sent by (output started at c:\easyphp1-8\www\dotclear\ecrire\files.php:76) in c:\easyphp1-8\www\dotclear\ecrire\files.php on line 89)
Tout en fonctionnant car quand je fais précédent le fichier a été inséré. Est-ce normal !!!
cordialement, Sab
Bonjour,
Je voulais savoir si vous saviez comment on peut faire pour ajouter des statistiques dans notre blog.
Cordialement, Sab.
Merci d'avance.
Le mieux pour les stats, c'est le plugins BBclone. Tu le trouveras sur le site de dotclear dans la rubrique plugins.
bonjour j'ai du mal à installer mes images et ma musique sur mon blog merci davance
Un peu cours comme probleme faudrait que tu me donnes des details. Ou le plus simple que tu ailles faire un tour sur le forum de dotclear. C'est la que tu trouveras les experts, enfin pour se qui concerne la partie images. Pour la musique, en esperant que ce ne soit pas du piratage, il s'agit de fichier donc mon hack devrait aider. Le mieux c'est que tu lises tout le post et que tu me disent ou ca bloque.
Excellent plug-ins !
J'en rêvais et je n'avais pas la patience d'attendre la sortie de Dotclear 2
Merci pour ce travail.
Merci, ca fait toujours plaisir d'avoir des compliments. Mais je continue à dire que ce n'est pas un plug-in, car cela touche directement au coeur de dotclear. Alors attention en faisant les modifs.
Fil des commentaires de ce billet