it-swarm-es.tech

Cómo guardar la imagen en la carpeta especificada en el directorio de joomla y guardar el nombre del archivo en db

Estoy trabajando en un componente personalizado, donde en la interfaz del backend, queremos que el usuario administrador pueda cargar la imagen y dejar que esa imagen se guarde directamente en una carpeta específica,/images/uploads/variantes/y también para guardar el nombre del archivo, por ejemplo. - 1327171407s_Rubytoys.jpg en la base de datos en el campo de columna - v_small_img

Lo que hemos hecho hasta ahora es En el directorio de ruta /administrator/component/models/form/variant.xml el campo se establece junto con otros campos en el archivo 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"/>

El campo v_small_img muestra un botón de carga. Pero no se:

  1. Cómo configurar la ruta del archivo de carga para guardar - public_html/images/uploads/variantes /

  2. Cómo guardar el nombre del archivo solo en db - v_small_img (solo se debe guardar el nombre del archivo, no el archivo, ya que debe cargarse en un directorio separado -/images/uploads/variantes /)

He intentado modificar la función de guardar en controller/variantes.php pero tampoco ayuda.

    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();
}
3
Ruchika

Puede extender el método save () para obtener esta funcionalidad:

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;
}

espero que ayude

1
Joomler

Para mí, parece ser una copia casi individual de las vistas de "lista de elementos/elemento de edición" de com_banners. Excepto que desea cargar una imagen en lugar de usar el administrador de medios interno.

  1. Cree esas 2 vistas y las tareas y métodos necesarios con el campo de imagen como un campo de texto normal.
  2. Cuando esto funciona como lo desea, agrega la carga de la imagen.
  3. La parte más difícil es verificar el archivo físico cargado. (No confíe en ningún encabezado u otra información) - errores, - tamaño mínimo y máximo en bytes y píxeles, - tipos mime permitidos. Tenga en cuenta los problemas de nombres de archivos (caracteres permitidos y conflictos).
  4. Si todo está bien, mueva el archivo a la carpeta correcta, agregue el nombre del archivo al registro db e insértelo.
  5. ¿Desinfectar la imagen? Pulgares?
  6. Descubra cómo desea manejar las ediciones y eliminaciones de los registros db. ¿Mantener o eliminar las imágenes?
  7. Probablemente necesitará algunos programas de utilidad para verificar la correlación entre la tabla db y los archivos de imagen física en un futuro próximo, si se trata de más de unas pocas imágenes.

No agregue ninguna funcionalidad de Ajax hasta que funcione al 100%.

Puede utilizar los métodos en la clase Joomlas JImage.

1
schnuti