Ошибка: disabled.push is not a function

Added by Константин Sammy95 about 1 year ago

Здравствуйте.

Установил ваш elFinder в CMS магазина. В обычном режиме всё работает, а вот при попытке запретить вносить любые изменения, файрбаг сообщает об ошибке (сразу после запуска elfinder-а).

Подробности:
Браузер: firefox 3.6.16
elFinder: 1.1 (2010-03-22)

После запуска elfinder от сервера приходит корректный JSON:

1 {"disabled":{"0":"read","1":"edit","2":"archive","3":"extract","4":"resize","5":"mkfile","6":"mkdir","8":"rename","9":"upload","10":"paste","11":"rm","12":"duplicate"},"params":{"dotFiles":false,"uplMaxSize":"2M","archives":[],"extract":[],"url":"http:\/\/trunk.intra.zone:88\/image\/data\/"},"cwd":{"hash":"c52cbdf272e5b8f5e6ecdcc3915504e0","name":"mine folder","mime":"directory","rel":"Home\/mine folder","size":0,"date":"16 Apr 2011 11:31","read":true,"write":true,"rm":true},"cdc":[{"name":"a.b.c.d.png","hash":"2f0ef7a6d6fe8b0d10791859d7723d0b","mime":"image\/png","date":"16 Apr 2011 11:31","size":1791,"read":true,"write":true,"rm":true,"url":"http:\/\/trunk.intra.zone:88\/image\/data\/mine folder\/a.b.c.d.png","dim":"134x30","resize":true,"tmb":"http:\/\/trunk.intra.zone:88\/image\/data\/.tmb\/2f0ef7a6d6fe8b0d10791859d7723d0b.png"},{"name":"apple_logo.jpg","hash":"8bd4f4d39920fd91c2dacb79e8d4c354","mime":"image\/jpeg","date":"10 Oct 2010 18:12","size":22074,"read":true,"write":true,"rm":true,"url":"http:\/\/trunk.intra.zone:88\/image\/data\/mine folder\/apple_logo.jpg","dim":"320x320","resize":true,"tmb":"http:\/\/trunk.intra.zone:88\/image\/data\/.tmb\/8bd4f4d39920fd91c2dacb79e8d4c354.png"},{"name":"canon_logo.jpg","hash":"eb426bb77568019635d60cea481d656a","mime":"image\/jpeg","date":"10 Oct 2010 18:12","size":22599,"read":true,"write":true,"rm":true,"url":"http:\/\/trunk.intra.zone:88\/image\/data\/mine folder\/canon_logo.jpg","dim":"320x180","resize":true,"tmb":"http:\/\/trunk.intra.zone:88\/image\/data\/.tmb\/eb426bb77568019635d60cea481d656a.png"},{"name":"hp_logo.jpg","hash":"1cf85400ec643b980d6589bc722a2238","mime":"image\/jpeg","date":"10 Oct 2010 18:12","size":19442,"read":true,"write":true,"rm":true,"url":"http:\/\/trunk.intra.zone:88\/image\/data\/mine folder\/hp_logo.jpg","dim":"475x386","resize":true,"tmb":"http:\/\/trunk.intra.zone:88\/image\/data\/.tmb\/1cf85400ec643b980d6589bc722a2238.png"},{"name":"htc_logo.jpg","hash":"e4ee02ad3d0284606c645b904267956f","mime":"image\/jpeg","date":"10 Oct 2010 18:12","size":60587,"read":true,"write":true,"rm":true,"url":"http:\/\/trunk.intra.zone:88\/image\/data\/mine folder\/htc_logo.jpg","dim":"640x360","resize":true,"tmb":"http:\/\/trunk.intra.zone:88\/image\/data\/.tmb\/e4ee02ad3d0284606c645b904267956f.png"}],"tree":{"hash":"7a3b9ffa629248cf2fd333ced138b181","name":"Home","read":true,"write":true,"dirs":[{"hash":"c52cbdf272e5b8f5e6ecdcc3915504e0","name":"mine folder","read":true,"write":true,"dirs":[]}]}}

но файрбаг сообщает ошибку:

1 disabled.push is not a function
2    init(disabled=Object { 0="read", 1="edit", more...})
3    (?)(data=Object { disabled={...}, params={...}, more...})
4    success(data=Object { disabled={...}, params={...}, more...})
5    ajax()
6    onreadystatechange(q=readystatechange )
7 disabled.push('archive');

И файлменеджер вообще никак не работает (см. приложенный скриншот).

elfinder-screen.png - Окно ElFinder после запуска (55 kB)


Replies (5)

RE: Ошибка: disabled.push is not a function - Added by Troex Nevelin about 1 year ago

при попытке запретить вносить любые изменения

А как вы это делаете? Покажите пример опций коннектора?

RE: Ошибка: disabled.push is not a function - Added by Константин Sammy95 about 1 year ago

Пока писал ответ, понял в чём ошибка - в JSON-ответе сервера не должно быть индексов.

Я уже успел поэкспериментировать и немного переделать серверную часть. Сейчас на стороне сервера у меня так:

1 'disabled'     => array('mkdir', 'mkfile', 'rename', 'upload', 'paste', 'rm', 'duplicate', 'read', 'edit', 'extract', 'archive', 'tmb', 'resize'),

Это генерирует такой JSON-ответ:
1 {"disabled":{"0":"mkdir","1":"mkfile","2":"rename","3":"upload","4":"paste","5":"rm","6":"duplicate","7":"read","8":"edit","9":"extract","10":"archive","12":"resize"},"params":{"dotFiles":false,"uplMaxSize":"2M","archives":[],"extract":[],"url":"http:\/\/trunk.intra.zone:88\/image\/data\/"},"cwd":{"hash":"c52cbdf272e5b8f5e6ecdcc3915504e0","name":"mine folder","mime":"directory","rel":"Home\/mine folder","size":0,"date":"16 Apr 2011 11:31","read":true,"write":true,"rm":true},"cdc":[{"name":"a.b.c.d.png","hash":"2f0ef7a6d6fe8b0d10791859d7723d0b","mime":"image\/png","date":"16 Apr 2011 11:31","size":1791,"read":true,"write":true,"rm":true,"url":"http:\/\/trunk.intra.zone:88\/image\/data\/mine folder\/a.b.c.d.png","dim":"134x30","resize":true,"tmb":"http:\/\/trunk.intra.zone:88\/image\/data\/.tmb\/2f0ef7a6d6fe8b0d10791859d7723d0b.png"},{"name":"apple_logo.jpg","hash":"8bd4f4d39920fd91c2dacb79e8d4c354","mime":"image\/jpeg","date":"10 Oct 2010 18:12","size":22074,"read":true,"write":true,"rm":true,"url":"http:\/\/trunk.intra.zone:88\/image\/data\/mine folder\/apple_logo.jpg","dim":"320x320","resize":true,"tmb":"http:\/\/trunk.intra.zone:88\/image\/data\/.tmb\/8bd4f4d39920fd91c2dacb79e8d4c354.png"},{"name":"canon_logo.jpg","hash":"eb426bb77568019635d60cea481d656a","mime":"image\/jpeg","date":"10 Oct 2010 18:12","size":22599,"read":true,"write":true,"rm":true,"url":"http:\/\/trunk.intra.zone:88\/image\/data\/mine folder\/canon_logo.jpg","dim":"320x180","resize":true,"tmb":"http:\/\/trunk.intra.zone:88\/image\/data\/.tmb\/eb426bb77568019635d60cea481d656a.png"},{"name":"hp_logo.jpg","hash":"1cf85400ec643b980d6589bc722a2238","mime":"image\/jpeg","date":"10 Oct 2010 18:12","size":19442,"read":true,"write":true,"rm":true,"url":"http:\/\/trunk.intra.zone:88\/image\/data\/mine folder\/hp_logo.jpg","dim":"475x386","resize":true,"tmb":"http:\/\/trunk.intra.zone:88\/image\/data\/.tmb\/1cf85400ec643b980d6589bc722a2238.png"},{"name":"htc_logo.jpg","hash":"e4ee02ad3d0284606c645b904267956f","mime":"image\/jpeg","date":"10 Oct 2010 18:12","size":60587,"read":true,"write":true,"rm":true,"url":"http:\/\/trunk.intra.zone:88\/image\/data\/mine folder\/htc_logo.jpg","dim":"640x360","resize":true,"tmb":"http:\/\/trunk.intra.zone:88\/image\/data\/.tmb\/e4ee02ad3d0284606c645b904267956f.png"}],"tree":{"hash":"7a3b9ffa629248cf2fd333ced138b181","name":"Home","read":true,"write":true,"dirs":[{"hash":"c52cbdf272e5b8f5e6ecdcc3915504e0","name":"mine folder","read":true,"write":true,"dirs":[]}]}}

Если на стороне сервера убрать последний пункт ('resize'), то ответ приходит нормальный и всё работает как положено. Проверьте, пожалуйста, у себя на этой же версии - воспроизводится ли эта проблема, если передавать такие же данные в 'disabled'. Потому что я подключил elfinder не через коннектор, а напрямую elFinder.class.php (хотя это потребовало лишь немного косметических изменений и по идее не должно было как-то повлиять).

RE: Ошибка: disabled.push is not a function - Added by Dmitry Levashov about 1 year ago

disabled ожидается клиентом как массив, у вас же приходит объект

RE: Ошибка: disabled.push is not a function - Added by Константин Sammy95 about 1 year ago

Нашёл причину. Ошибка у вас в куске кода:

 1        if (!empty($this->_options['disabled'])) { 
 2             $no = array('open', 'reload', 'tmb', 'ping'); 
 3             foreach ($this->_options['disabled'] as $k => $c) { 
 4                 if (!isset($this->_commands[$c]) || in_array($c, $no)) { 
 5                     unset($this->_options['disabled'][$k]); 
 6                 } else { 
 7                     unset($this->_commands[$c]); 
 8                 } 
 9             } 
10         }

А именно в строке "unset($this->_options['disabled'][$k]);" - если она убирает что-то из середины массива, то в проявляется описанная проблема.

Я поставил после цикла "foreach" строку

1 $this->_options['disabled'] = array_values($this->_options['disabled']);

и это решило проблему полностью.

(1-5/5)