web-dev-qa-db-fra.com

Comment puis-je définir dynamiquement le répertoire pour le champ multimédia dans admin

J'ai 2 répertoires sur ma racine:

/images/ <-- with user's images
/media/  <-- with system ( and components ) images

Le paramètre global pour la racine de l’image est défini sur media, mais je veux décider via le champ où trouver mon image.

Le XML pour le formulaire admin est

<field
    id="contest_image"
    name="contest_image"
    type="NewMedia"
    required="false"
    imgroot="images"
    directory=""
    label="Contest_image"
    description="contest_image_Desc"
    preview="true"
    exclude="" 
    stripext="0" />

Pour éviter toute confusion, j'ai dupliqué le champ d'origine dans NewMedia afin de définir celui-ci avec:

if ($this->value && file_exists(JPATH_ROOT . '/' . $this->value))
{
    $folder = $this->imgroot . '/'.$this->directory;
}
elseif (file_exists(JPATH_ROOT . '/' . $this->imgroot . '/' . $this->directory))
{
    $folder = $this->imgroot . '/'.$this->directory;
}
else
{
    //$folder = '';
    $folder = $this->imgroot ;
}

Quelqu'un peut-il m'aider ?

2
Paolo Ferlini

Dans votre modèle, vous devez remplacer la méthode getForm pour définir les valeurs de manière dynamique. Assurez-vous d'étendre votre modèle avec JModelForm ou JModelAdmin. Une fois cela fait, essayez le code suivant:

public function getForm($data = array(), $loadData = true)
{
    $form = $this->loadForm('com_yourcomponent.yourformname', 'yourformname', array('control' => 'jform', 'load_data' => $loadData));

    if (empty($form))
    {
        return false;
    }

    if (condition)
    {
        $form->setFieldAttribute('contest_image', 'directory', 'Your Value if condition is true');
    }
    else
    {
        $form->setFieldAttribute('contest_image', 'directory', 'Your Value is false');
    }

    return $form;
}
2
Sahil Purav