Je travaille sur un composant personnalisé où, à l’interface dorsale, nous souhaitons que l’administrateur puisse télécharger une image et la laisser enregistrer directement dans un dossier spécifié -/images/uploads/variants/et également enregistrer le nom du fichier, par exemple. - 1327171407s_Rubytoys.jpg dans la colonne "colonne" - v_small_img
ce que nous avons fait à l'heure actuelle Dans le répertoire chemin /administrator/component/models/form/variant.xml, le champ est défini avec les autres champs du fichier variant.xml
<field name="v_name" type="text" label="Variant" description="COM_NEWTOY_FORM_DESC_VARIANT_V_NAME" hint="COM_NEWTOY_FORM_LBL_VARIANT_V_NAME"/>
<field name="v_descr" type="editor" filter="safehtml" label="COM_NEWTOY_FORM_LBL_VARIANT_V_DESCR" description="COM_NEWTOY_FORM_DESC_VARIANT_V_DESCR" hint="COM_NEWTOY_FORM_LBL_VARIANT_V_DESCR"/>
<field name="v_price" type="text" label="Price" description="COM_NEWTOY_FORM_DESC_VARIANT_V_PRICE" hint="COM_NEWTOY_FORM_LBL_VARIANT_V_PRICE"/>
<field name="v_small_img" type="file" label="COM_NEWTOY_FORM_LBL_VARIANT_V_SMALL_IMG" description="COM_NEWTOY_FORM_DESC_VARIANT_V_SMALL_IMG" hint="COM_NEWCAR_FORM_LBL_VARIANT_V_SMALL_IMG"/>
Le champ v_small_img affiche un bouton de téléchargement. Mais je ne sais pas:
Comment définir le chemin du fichier de téléchargement à enregistrer dans - public_html/images/uploads/variants /
Comment enregistrer le nom de fichier uniquement dans la base de données - v_small_img (seul le nom de fichier doit être enregistré, pas le fichier car il doit être chargé dans un répertoire séparé -/images/uploads/variants /)
J'ai essayé de modifier la fonction de sauvegarde dans le fichier controller/variants.php, mais cela ne m'aide pas non plus.
public function saveOrderAjax()
{
// Get the input
$input = JFactory::getApplication()->input;
$pks = $input->post->get('cid', array(), 'array');
$order = $input->post->get('order', array(), 'array');
$files = $input->files->get('jform');
$file = $files['image'];
$filename = JFile::makeSafe($file['name']);
$src = $file['tmp_name'];
$dest = JPATH_SITE."images/uploads/variants/".$filename;
if (JFile::upload($src, $dest)) {
$thisID = JRequest::getVar('id');
$db = JFactory::getDbo();
$query = $db->getQuery(true);
$v_small_img = array($db->quoteName('image') . " = " . $db->quote($filename));
$conditions = array($db->quoteName('id') . " = " . $thisID);
$query->update($db->quoteName('#__NEWTOY_variants'))->set($v_small_img)->where($conditions);
$db->setQuery($query);
$db->execute($query);
} else {
//Redirect and throw an error message
}
// Sanitize the input
ArrayHelper::toInteger($pks);
ArrayHelper::toInteger($order);
// Get the model
$model = $this->getModel();
// Save the ordering
$return = $model->saveorder($pks, $order);
if ($return)
{
echo "1";
}
// Close the application
JFactory::getApplication()->close();
}
Vous pouvez étendre la méthode save () pour obtenir cette fonctionnalité:
public function save($data = array(), $key = 'id')
{
// Neccesary libraries and variables
jimport('joomla.filesystem.file');
//Debugging
ini_set("display_error" , 1);
error_reporting(E_ALL);
// Get input object
$jinput = JFactory::getApplication()->input;
// Get posted data
$data = $jinput->get('jform', null, 'raw');
$file = $jinput->files->get('jform');
// renaming the file
$file_ext=strtolower(end(explode('.',JFile::makeSafe($file['pdf_file_path']['name']))));
$filename = round(microtime(true)) . '.' . $file_ext;
// Move the uploaded file into a permanent location.
if ( $filename != '' ) {
// Make sure that the full file path is safe.
$filepath = JPath::clean( JPATH_ROOT."/images/uploads/variants/". $filename );
// Move the uploaded file.
if (JFile::upload( $file['pdf_file_path']['tmp_name'], $filepath )) {
//DB save method
} else {
//Error Reporting
}
}
JRequest::setVar('jform', $data, 'post');
$return = parent::save($data);
return $return;
}
j'espère que ça va aider
Pour moi, cela semble être presque une copie un à une du backend "liste des éléments/modifier un élément" vues de com_banners. Sauf que vous souhaitez télécharger une image au lieu d'utiliser le gestionnaire de médias interne.
N'ajoutez aucune fonctionnalité Ajax jusqu'à ce que cela fonctionne à 100%.
Vous pouvez utiliser les méthodes de la classe Joomlas JImage.