2010-05-28 2 views
3

J'ai une boutique en ligne Magento et je viens de créer un module personnalisé avec l'extension (Modulecreator). Ce module est livré avec une interface d'administration standard qui peut gérer les téléchargements de fichiers. J'ai découvert que si vous voulez afficher des vignettes, vous pouvez utiliser le type de champ 'image' (addField ('myfield', 'image')) au lieu du champ de type 'fichier'.addField type image et chemin de vignette

Mais maintenant j'ai un problème. Lorsque je télécharge des fichiers, je les sauvegarde dans un sous-répertoire appelé «slides» dans le répertoire «media». Mais lorsque je modifie l'élément, le chemin de l'image pour la vignette à côté du champ de téléchargement est défini sur le dossier 'média'. Pas mon dossier comme je l'ai mis à 'media/slides /'.

J'utilise le code suivant:

$fieldset->addField('filename', 'image', array(
     'label'  => Mage::helper('slideshow')->__('File'), 
     'required' => true, 
     'name'  => 'filename', 
     )); 

J'ai essayé de définir une clé « chemin » dans le tableau, mais cela ne soit pas repris par Magento. Je déteste le manque de support pour une bonne documentation facile à utiliser par Magento ...

Peut-être pourriez-vous m'aider pour trouver une solution?

Répondre

1

Ok, j'ai trouvé une solution à mon problème. J'ai changé le fichier qui crée le type de champ 'image'. Le fichier se trouve dans /lib/Varien/Data/Form/Element/Image.php. Quand vous regardez le code que vous voyez la dernière fonction est d'obtenir le « nom » clé du tableau de données donné:

public function getName() 
{ 
    return $this->getData('name'); 
} 

Je thougth si je fais une autre fonction pour obtenir un indice « path »:

public function getPath() 
{ 
    return $this->getData('path'); 
} 

Ensuite, quand vous allez la fonction _getUrl(), qui s'est l'URL d'aperçu de l'image téléchargée, vous devez modifier les éléments suivants (ajouter que la fonction getPath() avant « $ this-> getValue () '):

protected function _getUrl() 
{ 
    return $this->getPath().$this->getValue(); 
} 

Je ne pense pas que ce soit la façon la plus élégante de résoudre ce problème, mais cela répond à mes besoins pour ce projet. J'espère que ma solution fonctionne pour d'autres personnes si elles font face à ce problème aussi ...

0

c'est vrai que ce n'est pas la façon la plus élégante de résoudre ce problème, mais cela fonctionne;).

Une manière plus élégante serait de créer votre propre type de champ d'image dans votre propre module. J'ai expliqué la manière de faire cela sur un poste StackOverflow: here.

J'espère que cela vous aidera à le faire d'une manière plus élégante;)

Hugues.

3

autre solution est juste pour modifier votre chemin après appel magento $ form-> setValeurs (...) essentiellement avant le retour, ne somehting comme ceci:

$p = $form->getElement('filename')->getValue(); 
    $form->getElement('filename')->setValue('media/slides' . $p); 

.gondo

+1

C'est beaucoup plus élégant! Seulement besoin de retirer "media" de la nouvelle valeur car Magento préfixe automatiquement/media au chemin du fichier. Donc ce serait $ form-> getElement ('filename') -> setValue ('slides /'.$ p); – Michael

0

hmm i eu ce problème une fois quand je viens de commencer à travailler sur le module magento dev. L'utilisation de Varien_File_Uploader vous donnera le chemin d'un fichier enregistré avec son nom (en utilisant l'index 'fichier'). donc avant d'enregistrer les informations dans la base de données, créer un index (utilisation du nom de la colonne dans la table) dans un tableau (conservation des données post lorsque le formulaire présente dans le contrôleur, sauf l'action)

par exemple:

$upload = new Varien_File_Uploader($_FILE['custom_image']['name']); 
$p = $upload->save('in/to/the/folder'); 
$data = $this->getRequest()->getPost(); 
$data['custom_image'] = 'myfolder'. DS .'subfolder'.$p['file'] // path return after save through Varien_File_Uploader. 

après enregistrer l'opération, il va certainement stocker les informations de chemin de fichier dans sa colonne respective dans une table. J'espère que ça aide.