Главное меню
все форумы все темы форума добавить тему
jQuery
Скажите, а у вас нет в планах полностью перейти на jQuery вместо mootools? Я так понимаю если я сам переделаю весь сайт на jQuery, то после очередного обновления всё сломается.
random2:
Скажите, а у вас нет в планах полностью перейти на jQuery вместо mootools? Я так понимаю если я сам переделаю весь сайт на jQuery, то после очередного обновления всё сломается.

В планах нет, но Вы можете использовать любой удобный фреймворк - ничего критически важного на него не завязано (кроме тулбара в форме ответа, но он тоже не критичный ). По возможности, стараюсь все скрипты писать независимыми от фреймворка, так как понимаю, что не все являются фанатами mootools.
По этой же причине не использую ajax на клиентской части.
Вот организовал аплоад фото в модуле, все работает, решил прикрепить jquery плагин Uploadify, все настроил кроме указания пути к пхп обработчику..Опять те же грабли, так сказать. Не знаю или это нужно плагин сам копать..
Javascript

$(document).ready(function() {
    $("#uploadify").uploadify({
       'script'   : '/mymodule-upload_image', // путь к обрабочтику фото
     
    });
 });
 

Почему то так не срабатывает в шаблоне..
А под /mymodule имеется ввиду адрес узла или Вы пытаетесь обратиться напрямую к каталогу с модулем?
Вообще у меня аналогичная конструкция с плагином Fancyaupload работает нормально.
/mymodule-upload_image.ajax. В конце желательно указывать один из типов: xml, json, ajax, js - тогда в ответе сервера не будет содержаться отладочной информации ломающей парсинг js.
Да, адрес узла.
получается url в браузере: mysite.ru/mymodule-upload_image.167/
Где 167 - уник id к которому "цепляется" фото.
Тип .js указан.
В настройках плагина тоже указал :
Javascript

method          : 'GET', // The method for sending variables to the backend upload script
 

Так все работает и показуется загрузка файла. Но вот бэкэнд видимо найти он не может.:/
Defari:
получается url в браузере: mysite.ru/mymodule-upload_image.167/

Должен получиться mysite.ru/mymodule-upload_image.167.js
 
Defari:
Так все работает и показуется загрузка файла. Но вот бэкэнд видимо найти он не может.:/

Ну тут лучше бы не гадать, а проверить чем-то вроде консоли firebug.
Loki:
random2:
Скажите, а у вас нет в планах полностью перейти на jQuery вместо mootools? Я так понимаю если я сам переделаю весь сайт на jQuery, то после очередного обновления всё сломается.

В планах нет, но Вы можете использовать любой удобный фреймворк - ничего критически важного на него не завязано (кроме тулбара в форме ответа, но он тоже не критичный ). По возможности, стараюсь все скрипты писать независимыми от фреймворка, так как понимаю, что не все являются фанатами mootools.
По этой же причине не использую ajax на клиентской части.

 
Спасибо. Вы меня успокоили. Не могу я эти mootools Ваши. jQuery наше всё.
А "тулбар в форме ответа" это где? В форуме? Так у меня форума не будет.
random2:
Спасибо. Вы меня успокоили. Не могу я эти mootools Ваши. jQuery наше всё.
А "тулбар в форме ответа" это где? В форуме? Так у меня форума не будет.

В форуме, гостевой и прочих местах, где есть пользовательский ввод. За его генерацию отвечает скрипт bbcode.js. Если его убрать, то никакого тулбара просто не будет - ничего не обрушится Только из шаблона с формой надо будет убрать его вызов.
Этот скрипт я написал с использованием mootools, но он очень простой и, думаю, Вам не составит труда, при необходимости, адаптировать его для работы с jQuery.
странно..firebug вообще ничего не показывает.
Кстати у меня идет переадресация на этот адрес (/mymodule-upload_image) после заполнения первой формы
PHP

//перезагрузка на загрузку картинки
refresh(false, LabCMS::instance()->url(array(),'upload_image'.'.'.$adv_info['id']));
 

Может быть в этом проблема?
Генерация URL правильно выглядит так:
PHP

LabCMS::i()->url(array($adv_info['id']),'upload_image');
 

или вот так
PHP

//если параметр всего один, то его не обязательно помещать в массив
LabCMS::i()->url($adv_info['id'],'upload_image');
 

 
Defari:
странно..firebug вообще ничего не показывает.
Кстати у меня идет переадресация на этот адрес (/mymodule-upload_image) после заполнения первой формы

Судя по описанию, у вас вообще не работает ajax  запрос - получается обычная отправка формы. Отсюда и пустые показания firebug (вы же раздел "сеть" в нем смотрите?) и перезагрузка страницы с формой.
Вот что мне еще подумалось: вполне возможно что этот скрипт использует flash загрузчик - это вполне может стать причиной пустой консоли firebug. Этот загрузчик в конце работы ожидает от скрипта некий ответ, а Вы вместо этого отправляете ему код переадресации. Надо посмотреть какой ответ отдает оригинальный скрипт. Ваш модуль должен отдавать точно такой же.
Loki:
Вот что мне еще подумалось: вполне возможно что этот скрипт использует flash загрузчик - это вполне может стать причиной пустой консоли firebug. Этот загрузчик в конце работы ожидает от скрипта некий ответ, а Вы вместо этого отправляете ему код переадресации. Надо посмотреть какой ответ отдает оригинальный скрип. Ваш модуль должен отдавать точно такой же.

да, именно flash и используется. Попробую, спасибо Вам за наводку
Хм.. "поковырялся" немного, вроде бы ничего особенного.. Обработчик просто ловит то что передано аплоадером... Проверил - .swf, конечная папка куда все ложится, - все пути указаны верно. Но словить что идет в  'script'         : '/mymodule-upload_image.js' не получается.
Значит просто ничего не идет обработчику, и проблема наверное во flash..
Думаю, флеш не виноват. Попробуйте вставить в файл index.php в корне сайта что-то вроде
PHP
file_put_contents($_SERVER['DOCUMENT_ROOT'].'/storage/request.log', print_r($_GET, true).print_r($_POST, true));

и посмотрите что приходит в результате запроса от флешки.
 
Или же попробуйте использовать "тяжелую артиллерию" для анализа запросов (что-то на подобие IEInspector HTTP Analyzer).
Почти наверняка данные просто куда-то не туда посылаются. Там еще может быть проблема с передачей сессии - флеш этим тоже грешит.
И еще одно - флеш плеер посылает другой юзерагент, нежели браузер, так что обратите внимание в настройках сайта на опцию "Защита сессии": стоит установить ее в режим "ip", или вообще отключить на период тестирования.
Вот что получилось:
PHP

Array
(
    [fileext] => *.jpg; *.jpeg; *.JPG; *.JPE; *.jpe
    [folder] => /mymodule-upload_image.167/image
    [data_type] => js
    [url] => /mymodule
    [action] => upload_image
)
Array
(
    [Filename] => 310_99.JPG
    [Upload] => Submit Query
)
 
 

Значит вся проблема в параметре 'folder', хотя я задавал 'folder' : 'image',.
Действительно данные нетуда отправляются.
Наверное баг в самом плагине.
Спасибо Вам за помощь
Да нет, вроде бы все нормально как раз... Осталось проверить содержимое массива $_FILES...
хм я думал что   [folder] => /mymodule-upload_image.167/image - так не правильно.
Тогда, сейчас проверю $_FILES.
Вот что в массиве $_FILES
PHP

 
Array
(
    [Filedata] => Array
        (
            [name] => DIRT04.JPG
            [type] => application/octet-stream
            [tmp_name] => Z:\tmp\php6BD2.tmp
            [error] => 0
            [size] => 392452
        )
 
)
 
 
Ну вот видите... файл присылает. Теперь надо тоже самое проверить внутри модуля и посмотреть куда он сохраняет файл. А затем отдать флешке корректный ответ.
Loki:
Ну вот видите... файл присылает. Теперь надо тоже самое проверить внутри модуля и посмотреть куда он сохраняет файл. А затем отдать флешке корректный ответ.

Очень благодарен Вам за помощь, сам тут бы точно не разобрался...
Посмотрел что приходит в пхп обработчик фото, - передается $_GET. Остальные 2 массива пусты.
Loki:
Ну вот видите... файл присылает. Теперь надо тоже самое проверить внутри модуля и посмотреть куда он сохраняет файл. А затем отдать флешке корректный ответ.

Очень благодарен Вам за помощь, сам тут бы точно не разобрался...
Посмотрел что приходит в пхп обработчик фото, - передается $_GET,$_REQUEST. Остальные 2 массива пусты. А каким образом теперь проследить путь куда сохраняется сам файл? Т.к. на сервер он не доходит...?
Defari:
Посмотрел что приходит в пхп обработчик фото, - передается $_GET,$_REQUEST. Остальные 2 массива пусты. А каким образом теперь проследить путь куда сохраняется сам файл? Т.к. на сервер он не доходит...?

На сервер файл доходит:
Text

//вот это он и есть во временной директории
[tmp_name] => Z:\tmp\php6BD2.tmp
 

Надо проверять на каком этапе у Вас теряются данные. Попробуйте предложенный код вставить в начало index.php модуля. Причем, немного его модифицировать:
PHP

file_put_contents($_SERVER['DOCUMENT_ROOT'].'/storage/request.log', print_r($_GET, true).print_r($_POST, true).print_r($_FILES, true)."\r\n------\r\n", FILE_APPEND);
 

Так файл не будет перезаписываться при каждом запросе и Вы сможете отследить все запросы (если где-то сдвоенные проскакивают).
Понял, от всей души благодарен Вам за помощь. Буду набираться опыта и знаний
Попробую довести поставленную задачу
Добрый вечер! Все таки что - то да не так. Без jquery плагина, при загрузке в php аплоадер приходит массив $_FILES, и все ок.
PHP

Array
(
    [my_field] => Array
        (
            [name] => Безымянный.png
            [type] => image/png
            [tmp_name] => Z:\tmp\phpA4CF.tmp
            [error] => 0
            [size] => 344761
        )
 
)
 
 

С этим же плагином при идентичных php файлах далее index.php модуля ничего не доходит, в сам аплоадер доходит пустой массив...Данные теряються после index.php в корне модуля.
То есть я правильно понимаю: в index.php модуля данные еще есть?
Я уже писал выше о проблемах которые надо решить при загрузке через флеш, но попробую написать еще раз:
 
1. Флеш корректно не передает идентификатор сессии. То есть отправляете файл как зарегистрированный пользователь, а приходит он уже от имени "гостя" - если у Вас стоит какая-то проверка прав, то их просто не хватит. Необходимо идентификатор сессии прикручивать к запросу ручками (наверняка в плагине есть такая опция).
Собственно, об этом написано в самом первом пункте руководства по скрипту.
 
2. Флеш шлет другой юзерагент, нежели браузер, так что валидировать сессию по методу "ip+user_agent" нельзя, так как от браузера и от флеш-плагина они приходят разные. В итоге разрыв сессии и все прелести описанные в первом пункте.
Loki:
Я уже писал выше о проблемах которые надо решить при загрузке через флеш, но попробую написать еще раз:
1. Флеш корректно не передает идентификатор сессии. То есть отправляете файл как зарегистрированный пользователь, а приходит он уже от имени "гостя" - если у Вас стоит какая-то проверка прав, то их просто не хватит. Необходимо идентификатор сессии прикручивать к запросу ручками (наверняка в плагине есть такая опция)
2. Флеш шлет другой юзерагент, нежели браузер, так что валидировать сессию по методу "ip+user_agent" нельзя, так как от браузера и от флеш-плагина они приходят разные. В итоге разрыв сессии и все прелести описанные в первом пункте.

я сразу установил на "ip", что же, тогда буду дальше разбираться, спасибо!
Да, в index.php все есть.
А права как-то проверяете? если в index.php все приходит, а в обработчик нет - значит показывайте index.php
Loki:
А права как-то проверяете? если в index.php все приходит, а в обработчик нет - значит показывайте index.php

ok
PHP

$_GET['var1']=(!empty($_GET['var1']))?$_GET['var1']:0;
$page=(!empty($_GET['var2']))?intval($_GET['var2']):0;
switch($_GET['action'])
        {
case('upload_image'):
case(''):
$user_id=User::instance()->id;
if ($_GET['var1']) {
$adv_info=Db::instance()->selectRow("SELECT ra.id,ra.id_user,ra.comment,ra.datenow,ra.type,rt.id_type,rt.type FROM ?_rent_ads ra JOIN ?_realt_types rt ON  ra.type=rt.id_type WHERE ra.id=? AND id_user=?", $_GET['var1'], $user_id);
break;
}
}
 
 Tpl::instance()->assign('access_add', (access("edit")?access("delete"):access("add")));  
 Tpl::instance()->assign('access_read', access("read"));
 
switch (true)
{
 //подзагрузка фото
        case($_GET['action']=='upload_image' && access('add')):
            $mode="upload_image";
            include dirname(__FILE__)."/upload_img.php";
        break;
 
default:
      include dirname(__FILE__)."/adverts.php";
}
 
Спорим что $user_id у Вас равен -1 и, как следствие, access('add') возвращает false?
 
Если я прав - смотрите мое предыдущее сообщение.
Loki:
Спорим что $user_id у Вас равен -1 и, как следствие, access('add') возвращает false?
 
Если я прав - смотрите мое предыдущее сообщение.

Да, верно, ух и голову же я Вам заморочил своими вопросами
Благодарю Вас.