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

Тема в разделе "Программирование", создана пользователем Zvuber, 09.08.2009.

  1. Offline

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

    Регистрация:
    09.08.2009
    Сообщения:
    25
    Симпатии:
    0
    Пол:
    Женский
    Дело такое Скопировал кусок кода из:
    \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 специалист

    Регистрация:
    22.01.2008
    Сообщения:
    673
    Симпатии:
    53
    Пол:
    Мужской
    опишите задачу подробнее. что вы именно хотите получить на выходе. могу предложить загрузку файла через аякс ;)
     
  4. Offline

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

    Регистрация:
    09.08.2009
    Сообщения:
    25
    Симпатии:
    0
    Пол:
    Женский
    В общем задача такая:
    Joomla, Контакты: компонет: com_conatct, в него надо поместить на админ форму редактирования контакта (1) (как в com_media, медиа менеджере) строку: текстовое поле+кнопка выбора файла(+ кнопка удаления строки 1) это в идеале) , внизу кнопка(или ссылка на действие неважно) добавления новой строки как (1) внизу кнопка загрузить (Хотя можно и не использовать, а использовать кнопку сохранить форму контакта).
    Примерно так.
    Если подробнее напишите,пожалуйста E-mail, пришлю макет.[!]
     
    Последнее редактирование: 23.08.2009
  5. omfgpanda
    Offline

    omfgpanda специалист

    Регистрация:
    22.01.2008
    Сообщения:
    673
    Симпатии:
    53
    Пол:
    Мужской
    давайте наверное лучше макет присылайте, а то не совсем понятно что да как )
     
  6. omfgpanda
    Offline

    omfgpanda специалист

    Регистрация:
    22.01.2008
    Сообщения:
    673
    Симпатии:
    53
    Пол:
    Мужской
    omfgpanda@ya.ru
     
  7. Offline

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

    Регистрация:
    09.08.2009
    Сообщения:
    25
    Симпатии:
    0
    Пол:
    Женский
    Для наглядности.
    На почту продублировал.

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

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

    Вложения:

    • 5_5.jpg
      5_5.jpg
      Размер файла:
      65.9 КБ
      Просмотров:
      57
    • 4_4.jpg
      4_4.jpg
      Размер файла:
      35.9 КБ
      Просмотров:
      41
  8. omfgpanda
    Offline

    omfgpanda специалист

    Регистрация:
    22.01.2008
    Сообщения:
    673
    Симпатии:
    53
    Пол:
    Мужской
    Вообщем вот примерный вариант аплоада, писал на коленке, так что сильно не ругайтесь ))) Там конечно нужно будет добавить несколько проверок, в том числе максимальное кол-во загружаемых файлов, размеры изображения и т.д.

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

    Вложения:

    • upload.zip
      Размер файла:
      27.5 КБ
      Просмотров:
      146
    Asylum нравится это.
  9. Offline

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

    Регистрация:
    09.08.2009
    Сообщения:
    25
    Симпатии:
    0
    Пол:
    Женский
    Огромное спасибо.
    Можно инструкцию для Меня куда чего скопировать, чтобы посмотреть как он работает?
    Сам не могу сообразить куда чего.
    И можно в ЛП или тут вашу ICQ.
    Моя icq: 579-494-853.
    [!]
     
  10. omfgpanda
    Offline

    omfgpanda специалист

    Регистрация:
    22.01.2008
    Сообщения:
    673
    Симпатии:
    53
    Пол:
    Мужской
    для начала распакуйте архив и закинте содержимое на Ваш веб-сервер, через браузер откройте upload.php и посмотрите как работает, и подумайте - надо ли Вам это вообще )
     
  11. Offline

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

    Регистрация:
    09.08.2009
    Сообщения:
    25
    Симпатии:
    0
    Пол:
    Женский

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

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

    Регистрация:
    09.08.2009
    Сообщения:
    25
    Симпатии:
    0
    Пол:
    Женский
    Хоть один человек реально помог, Огромное спасибо, всем рекомендую.[!]
    Остальные горазды советы только давать, увы.:\
     
  13. omfgpanda
    Offline

    omfgpanda специалист

    Регистрация:
    22.01.2008
    Сообщения:
    673
    Симпатии:
    53
    Пол:
    Мужской
    :|S незачто )
     
  14. Offline

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

    Регистрация:
    19.03.2009
    Сообщения:
    6
    Симпатии:
    0
    Пол:
    Мужской
    а стандартного решения используя апи джумлы нет? Та же кнопка в редакторе материале, там же есть такая возможность.

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

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

    omfgpanda специалист

    Регистрация:
    22.01.2008
    Сообщения:
    673
    Симпатии:
    53
    Пол:
    Мужской
    Код (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 Недавно здесь

    Регистрация:
    19.03.2009
    Сообщения:
    6
    Симпатии:
    0
    Пол:
    Мужской
    То есть говоря простым языком у джумлы в эту сторону вход закрыт и получать файло можно только через задний вход.
    Мне нужен доступ к медиа менеджеру, чтобы юзер могу из админки выбрать картинку которая ему больше нравится или залить новую если оной нет на сервере.
    По мне так задача должна быть тривиальной. Ваш код мне нравится своей лаконичностью, но опять же, зачем? Если есть медиа менеджер который может сделать все что мне нужно, но проблема его исопльзовать в своем компоненте.
     
  17. omfgpanda
    Offline

    omfgpanda специалист

    Регистрация:
    22.01.2008
    Сообщения:
    673
    Симпатии:
    53
    Пол:
    Мужской
    а это чем не стандартный вариант ? В медиа менеджере используется класс унаследованный у MediaController

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


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

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

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

    Регистрация:
    09.08.2009
    Сообщения:
    25
    Симпатии:
    0
    Пол:
    Женский
    Абсолютно верное решение.
    Только никак не могу заставать код Указанный выше работать.
    Весь код поместил в:
    Код (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" создавать надо? Если да, то где, в какой папке?
     
    Последнее редактирование: 16.10.2009
  19. omfgpanda
    Offline

    omfgpanda специалист

    Регистрация:
    22.01.2008
    Сообщения:
    673
    Симпатии:
    53
    Пол:
    Мужской
    скриншот? какая именно ошибка? папку "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 Недавно здесь

    Регистрация:
    09.08.2009
    Сообщения:
    25
    Симпатии:
    0
    Пол:
    Женский
    Попробовал, что-то не работает.
    Думаю может дело в том, что нехватает каких-то состовляющих компонента com_media?
    :|:|:|
     
  21. Offline

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

    Регистрация:
    19.03.2009
    Сообщения:
    6
    Симпатии:
    0
    Пол:
    Мужской
    Тот код не зависит от com_media, он лишь использует апи джумлы для загрузки файлов на сервер. А ошибку стоит показать, чтобы понять что не так. Папка должна иметь соответсвующие разрешения.
     

Поделиться этой страницей

Загрузка...