Joomla 1.5 Создание Кнопки загрузки картинки на сайт как в com_media, как в Медиа менеджере.

Discussion in 'Программирование' started by Zvuber, Aug 9, 2009.

  1. Offline

    Zvuber Недавно здесь

    Joined:
    Aug 9, 2009
    Messages:
    25
    Likes Received:
    0
    Gender:
    Female
    Дело такое Скопировал кусок кода из:
    \administrator\components\com_media\views\media\tmpl\default.php такой:

    <!-- File Upload Form -->
    <form action="<?php echo JURI::base(); ?>index.php?option=com_media&amp;task=file.upload&amp;tmpl=component&amp;<?php echo $this->session->getName().'='.$this->session->getId(); ?>&amp;<?php echo JUtility::getToken();?>=1" id="uploadForm" method="post" enctype="multipart/form-data">
    <fieldset>
    <legend><?php echo JText::_( 'Upload File' ); ?> [ <?php echo JText::_( 'Max' ); ?>&nbsp;<?php echo ($this->config->get('upload_maxsize') / 1000000); ?>M ]</legend>
    <fieldset class="actions">
    <input type="file" id="file-upload" name="Filedata" />
    <input type="submit" id="file-upload-submit" value="<?php echo JText::_('Start Upload'); ?>"/>
    <span id="upload-clear"></span>
    </fieldset>
    <ul class="upload-queue" id="upload-queue">
    <li style="display: none" />
    </ul>
    </fieldset>
    <input type="hidden" name="return-url" value="<?php echo base64_encode('index.php?option=com_media'); ?>" />
    </form>

    Который создаёт кнопку "Обзор" и кнопку "загрузить". Скопировал в дргой стандартный компанент.
    При создании его элемента выдаётся ошибка: fatal error: Using $this when not in object context ....
    В общем в коде ругается на строку <form action="<?php echo JURI::base(); ?>index.php?option=com_media&amp;task=file.upload&amp;tmpl=component&amp;<?php echo $this->session->getName().'='.$this->session->getId(); ?>&amp;<?php echo JUtility::getToken();?>=1" id="uploadForm" method="post" enctype="multipart/form-data">, а именно на: $this->session->getName().'='.$this->session->getId().

    B Вся форма в Кракозябрах.
    Если убрать строчки: $this->session->getName().'='.$this->session->getId().
    Создаётся всё нормально. кнопка есть, но естественно не работает загрузка файлов.

    Я в Джумуле не мастер.
    Куда чего прописать и что подключить, чтобы использовать эту кнопку?:'(:'(:'(:'(:'
     
  2.  
  3. omfgpanda
    Offline

    omfgpanda Недавно здесь => Cпециалист <=

    Joined:
    Jan 22, 2008
    Messages:
    673
    Likes Received:
    53
    Gender:
    Male
    опишите задачу подробнее. что вы именно хотите получить на выходе. могу предложить загрузку файла через аякс ;)
     
  4. Offline

    Zvuber Недавно здесь

    Joined:
    Aug 9, 2009
    Messages:
    25
    Likes Received:
    0
    Gender:
    Female
    В общем задача такая:
    Joomla, Контакты: компонет: com_conatct, в него надо поместить на админ форму редактирования контакта (1) (как в com_media, медиа менеджере) строку: текстовое поле+кнопка выбора файла(+ кнопка удаления строки 1) это в идеале) , внизу кнопка(или ссылка на действие неважно) добавления новой строки как (1) внизу кнопка загрузить (Хотя можно и не использовать, а использовать кнопку сохранить форму контакта).
    Примерно так.
    Если подробнее напишите,пожалуйста E-mail, пришлю макет.[!]
     
    Last edited: Aug 23, 2009
  5. omfgpanda
    Offline

    omfgpanda Недавно здесь => Cпециалист <=

    Joined:
    Jan 22, 2008
    Messages:
    673
    Likes Received:
    53
    Gender:
    Male
    давайте наверное лучше макет присылайте, а то не совсем понятно что да как )
     
  6. omfgpanda
    Offline

    omfgpanda Недавно здесь => Cпециалист <=

    Joined:
    Jan 22, 2008
    Messages:
    673
    Likes Received:
    53
    Gender:
    Male
    omfgpanda@ya.ru
     
  7. Offline

    Zvuber Недавно здесь

    Joined:
    Aug 9, 2009
    Messages:
    25
    Likes Received:
    0
    Gender:
    Female
    Для наглядности.
    На почту продублировал.

    Это те элементы которые в Идеале нужно поместить на форму редактирования элемента "Контакты".
    1. Файл задача в идеале.
    2. файл, задача минимум.

    Такая кнопка есть в компоненте com_media, менеджер загрузки картинок. кнопка внизу.
    Просто может надо немного к решению не так подходить?
     

    Attached Files:

    • 5_5.jpg
      5_5.jpg
      File size:
      65.9 KB
      Views:
      57
    • 4_4.jpg
      4_4.jpg
      File size:
      35.9 KB
      Views:
      41
  8. omfgpanda
    Offline

    omfgpanda Недавно здесь => Cпециалист <=

    Joined:
    Jan 22, 2008
    Messages:
    673
    Likes Received:
    53
    Gender:
    Male
    Вообщем вот примерный вариант аплоада, писал на коленке, так что сильно не ругайтесь ))) Там конечно нужно будет добавить несколько проверок, в том числе максимальное кол-во загружаемых файлов, размеры изображения и т.д.

    Также использовалась библиотека AjaxUpload, фак тут
     

    Attached Files:

    Asylum likes this.
  9. Offline

    Zvuber Недавно здесь

    Joined:
    Aug 9, 2009
    Messages:
    25
    Likes Received:
    0
    Gender:
    Female
    Огромное спасибо.
    Можно инструкцию для Меня куда чего скопировать, чтобы посмотреть как он работает?
    Сам не могу сообразить куда чего.
    И можно в ЛП или тут вашу ICQ.
    Моя icq: 579-494-853.
    [!]
     
  10. omfgpanda
    Offline

    omfgpanda Недавно здесь => Cпециалист <=

    Joined:
    Jan 22, 2008
    Messages:
    673
    Likes Received:
    53
    Gender:
    Male
    для начала распакуйте архив и закинте содержимое на Ваш веб-сервер, через браузер откройте upload.php и посмотрите как работает, и подумайте - надо ли Вам это вообще )
     
  11. Offline

    Zvuber Недавно здесь

    Joined:
    Aug 9, 2009
    Messages:
    25
    Likes Received:
    0
    Gender:
    Female

    Выложил на вэб сервер, У меня Денвер.
    Тестирую, открываю "говорит нет функции J... чегото".
    Я понимаю через jooml-у надо запускать?
    :'(
     
  12. Offline

    Zvuber Недавно здесь

    Joined:
    Aug 9, 2009
    Messages:
    25
    Likes Received:
    0
    Gender:
    Female
    Хоть один человек реально помог, Огромное спасибо, всем рекомендую.[!]
    Остальные горазды советы только давать, увы.:\
     
  13. omfgpanda
    Offline

    omfgpanda Недавно здесь => Cпециалист <=

    Joined:
    Jan 22, 2008
    Messages:
    673
    Likes Received:
    53
    Gender:
    Male
    :|S незачто )
     
  14. Offline

    cristoff Недавно здесь

    Joined:
    Mar 19, 2009
    Messages:
    6
    Likes Received:
    0
    Gender:
    Male
    а стандартного решения используя апи джумлы нет? Та же кнопка в редакторе материале, там же есть такая возможность.

    Создавать отдельный аплоадер не вижу смысла, когда под рукой есть жумловский.

    Подскажите пример использования медиа менеджера в своему компоненте, плиз.
     
  15. omfgpanda
    Offline

    omfgpanda Недавно здесь => Cпециалист <=

    Joined:
    Jan 22, 2008
    Messages:
    673
    Likes Received:
    53
    Gender:
    Male
    Код (html):
    1. <form name="sbmtBtn" action="index.php?option=com_cityphone&Itemid=104" method="post" enctype="multipart/form-data">
    2. <input type="file" class="inputbox" value="" name="file_upload">
    3. <input type="submit" name="Upload" class="button" value="GOGOGO">
    4. </form>


    в джумлу вшит мутулс, поэтому

    Код (html):
    1. <input type="file" class="inputbox" value="" name="file_upload">


    type="file" - обязателен, для того что бы вызвать диалог выбора файлов
    name="file_upload" - обязателен, для того что бы перехватить на бэкенде параметр.

    Код (PHP):
    1. $file = JRequest::getVar('file_upload', null, 'files', 'array'); // получаем параметры формы
    2.  
    3. jimport('joomla.filesystem.file'); // подключаем библиотеку для работы с файловой системой
    4.  
    5. $filename = JFile::makeSafe($file['name']); // очищаем имя файла от всякой фигни
    6.  
    7. $src = $file['tmp_name']; //откуда ;)
    8. $dest = "files" . DS . $filename; // куда (;
    9.  
    10. // вот этой конструкцией можно проверить расширение файла
    11. // для использования нескольких типов файлов можно заюзать массив...
    12. if ( strtolower(JFile::getExt($filename) ) == 'zip') {
    13.    if ( JFile::upload($src, $dest) )
    14.    {
    15.       //если все хорошо и файл залился - сообщаем юзеру что все гут или еще ченить на ваше усмотрение
    16.    } else
    17.    {
    18.       //если что то вдруг пошло не так, то райзим сообщение об ошибочке или еще ченить )
    19.    }
    20. } else {
    21.    // ну тут тоже все понятно - если тип файла не соответствует условию, то ченить выводим.
    22. }


    Фак по JFile тут

    Эта конструкция предназначена для аплоада одного файла за 1 запрос. Думаю для нескольких файлов модифицировать будет не сложно )
     
  16. Offline

    cristoff Недавно здесь

    Joined:
    Mar 19, 2009
    Messages:
    6
    Likes Received:
    0
    Gender:
    Male
    То есть говоря простым языком у джумлы в эту сторону вход закрыт и получать файло можно только через задний вход.
    Мне нужен доступ к медиа менеджеру, чтобы юзер могу из админки выбрать картинку которая ему больше нравится или залить новую если оной нет на сервере.
    По мне так задача должна быть тривиальной. Ваш код мне нравится своей лаконичностью, но опять же, зачем? Если есть медиа менеджер который может сделать все что мне нужно, но проблема его исопльзовать в своем компоненте.
     
  17. omfgpanda
    Offline

    omfgpanda Недавно здесь => Cпециалист <=

    Joined:
    Jan 22, 2008
    Messages:
    673
    Likes Received:
    53
    Gender:
    Male
    а это чем не стандартный вариант ? В медиа менеджере используется класс унаследованный у MediaController

    Код (PHP):
    1. class MediaControllerFile extends MediaController


    данный класс имеет два метода - upload и delete, работа этих методов сводится к использованию класса JFile.

    Т.о. то, что я Вам написал выше, есть основа Медиа менеджера и всех других компонентов использующих API Joomla.
     
  18. Offline

    Zvuber Недавно здесь

    Joined:
    Aug 9, 2009
    Messages:
    25
    Likes Received:
    0
    Gender:
    Female
    Абсолютно верное решение.
    Только никак не могу заставать код Указанный выше работать.
    Весь код поместил в:
    Код (CODE):
    1. \www\administrator\components\com_contact\admin.contact.html.php

    таким образом,
    идёт стандартный код:
    Код (PHP):
    1. <td class="key">
    2.                         <label for="webpage">
    3.                             <?php echo JText::_( 'Webpage' ); ?>:
    4.                         </label>
    5.                     </td>
    6.                     <td>
    7.                         <input class="inputbox" type="text" name="webpage" id="webpage" size="60" maxlength="255" value="<?php echo $row->webpage; ?>" />
    8.                     </td>
    9.                 </tr>

    Вставленный код с топика выше:
    Код (PHP):
    1. <tr>
    2.                     <td class="key">
    3.                     sdff
    4.                     </td>
    5.                     <td>
    6.                     <form name="sbmtBtn" action="index.php?option=com_cityphone&Itemid=104" method="post" enctype="multipart/form-data">
    7.                     <input type="file" class="inputbox" value="" name="file_upload">
    8.                     <input type="submit" name="Upload" class="button" value="GOGOGO">
    9.                    
    10.                     <?php
    11.                     $file = JRequest::getVar('file_upload', null, 'files', 'array'); // получаем параметры формы
    12.                     jimport('joomla.filesystem.file'); // подключаем библиотеку для работы с файловой системой
    13.                     $filename = JFile::makeSafe($file['name']); // очищаем имя файла от всякой фигни
    14.                     $src = $file['tmp_name']; //откуда ;)
    15.                     $dest = 'files' . DS . $filename; // куда (;
    16.                     // вот этой конструкцией можно проверить расширение файла
    17.                     // для использования нескольких типов файлов можно заюзать массив...
    18.                     if ( strtolower(JFile::getExt($filename) ) == 'jpg')
    19.                     {
    20.                         if ( JFile::upload($src, $dest) )
    21.                         {
    22.                         //если все хорошо и файл залился - сообщаем юзеру что все гут или еще ченить на ваше усмотрение
    23.                          echo('Всё залилось1');
    24.                         } else {
    25.                                 //если что то вдруг пошло не так, то райзим сообщение об ошибочке или еще ченить
    26.                                 echo('Всё залилось2');
    27.                                 }
    28.                         } else {
    29.                         // ну тут тоже все понятно - если тип файла не соответствует условию, то ченить выводим.
    30.                         echo('Всё залилось3');
    31.                                 }
    32.                     ?>
    33.                     </form>

    продолжение стандартного кода:
    Код (PHP):
    1. </td>
    2.                 </tr>
    3.                
    4.                 <tr>
    5.                     <td  class="key" valign="top">
    6.                         <label for="misc">
    7.                             <?php echo JText::_( 'Misce

    В чём мои ошибки? :'( Указанную директорию "files" создавать надо? Если да, то где, в какой папке?
     
    Last edited: Oct 16, 2009
  19. omfgpanda
    Offline

    omfgpanda Недавно здесь => Cпециалист <=

    Joined:
    Jan 22, 2008
    Messages:
    673
    Likes Received:
    53
    Gender:
    Male
    скриншот? какая именно ошибка? папку "files" нужно создавать в \www\administrator\components\com_contact\

    Код (PHP):
    1. <table>
    2.   <tr>
    3.      <td class="key">
    4.                     sdff
    5.      </td>
    6.      <td>
    7.          <form name="sbmtBtn" action="index.php?option=com_cityphone&Itemid=104"
    8.              method="post" enctype="multipart/form-data">
    9.          <input type="file" class="inputbox" value="" name="file_upload">
    10.          <input type="submit" name="Upload" class="button" value="GOGOGO">
    11.          </form>
    12.      </td>
    13.   </tr>
    14. </table>
    15.  
    16. <?php
    17.                     $file = JRequest::getVar('file_upload', null, 'files', 'array'); // получаем параметры формы
    18.                    
    19.                     if (strlen($file['name']) > 0)
    20.                     {
    21.                     jimport('joomla.filesystem.file'); // подключаем библиотеку для работы с файловой системой
    22.                     $filename = JFile::makeSafe($file['name']); // очищаем имя файла от всякой фигни
    23.                     $src = $file['tmp_name']; //откуда ;)
    24.                     $dest = 'files' . DS . $filename; // куда (;
    25.                     // вот этой конструкцией можно проверить расширение файла
    26.                     // для использования нескольких типов файлов можно заюзать массив...
    27.                     if ( strtolower(JFile::getExt($filename) ) == 'jpg')
    28.                     {
    29.                         if ( JFile::upload($src, $dest) )
    30.                         {
    31.                         //если все хорошо и файл залился - сообщаем юзеру что все гут или еще ченить на ваше усмотрение
    32.                          echo('Всё залилось1');
    33.                         } else {
    34.                                 //если что то вдруг пошло не так, то райзим сообщение об ошибочке или еще ченить
    35.                                 echo('Всё залилось2');
    36.                                 }
    37.                         } else {
    38.                         // ну тут тоже все понятно - если тип файла не соответствует условию, то ченить выводим.
    39.                         echo('Всё залилось3');
    40.                                 }
    41.                     }
    42.                     ?>
     
  20. Offline

    Zvuber Недавно здесь

    Joined:
    Aug 9, 2009
    Messages:
    25
    Likes Received:
    0
    Gender:
    Female
    Попробовал, что-то не работает.
    Думаю может дело в том, что нехватает каких-то состовляющих компонента com_media?
    :|:|:|
     
  21. Offline

    cristoff Недавно здесь

    Joined:
    Mar 19, 2009
    Messages:
    6
    Likes Received:
    0
    Gender:
    Male
    Тот код не зависит от com_media, он лишь использует апи джумлы для загрузки файлов на сервер. А ошибку стоит показать, чтобы понять что не так. Папка должна иметь соответсвующие разрешения.
     

Share This Page

Loading...