Приветствую. OcStore 2.1.0.2 Модуль MegaReviews 1.04 (OC_2.x) Нашёл хороший модуль отзывов о товаре. С картинками, рейтингом, видео и прочими плюшками. Работает, но оставляет ошибки о недостатке переменных в логах. Модуль англоязычный, если поможете победить ошибки, то сделаю авторский уникальный перевод и выложу тут. Ошибки в 2 файлах Первый файл 2018-06-22 15:34:05 - PHP Notice: Undefined variable: j in /home/w/w87959f4/***/public_html/catalog/controller/module/megareviews.php on line 111 Кусок кода. Выделил строку с ошибкой Код: public function addReview(){ if (($this->request->server['REQUEST_METHOD'] == 'POST') ) { $post=$this->request->post; $this->load->model('setting/setting'); $settings=$this->config->get('megareviews_settings'); if ($settings['captcha']==1 && (empty($this->session->data['captcha']) || ($this->session->data['captcha'] != $this->request->post['captcha']))) { return; } for ($i = 0; $i < count($_FILES['file']['name']); $i++) {//loop to get individual element from the array $target_path = "image/catalog/mr/"; //Declaring Path for uploaded images if(!is_dir($target_path)) mkdir($target_path); $validextensions = array("jpeg", "jpg", "png"); //Extensions which are allowed $ext = explode('.', basename($_FILES['file']['name'][$i]));//explode file name from dot(.) $file_extension = end($ext); //store extensions in the variable $target_name = rand(1,10000). $ext[0]. "." . $ext[count($ext) - 1];//set the target path with a new name of image $target_path = $target_path.$target_name; 111 $j = $j + 1;//increment the number of uploaded images according to the files in array if (($_FILES["file"]["size"][$i] < 10000000) //Approx. 100kb files can be uploaded. && in_array($file_extension, $validextensions)) { if (move_uploaded_file($_FILES['file']['tmp_name'][$i], $target_path)) {//if file moved to uploads folder $post['files'][]="catalog/mr/".$target_name; } else {//if file was not moved. } } } } $post['status']='0'; if($settings['approve']==0)$post['status']='1'; $this->load->model('module/megareviews'); $this->model_module_megareviews->addReview($post); } Второй файл 2018-06-22 15:34:05 - PHP Notice: Undefined index: author in /home/w/w87959f4/***/public_html/catalog/model/module/megareviews.php on line 4 2018-06-22 15:34:05 - PHP Notice: Undefined index: title in /home/w/w87959f4/***/public_html/catalog/model/module/megareviews.php on line 4 2018-06-22 15:34:05 - PHP Notice: Undefined index: rating in /home/w/w87959f4/***/public_html/catalog/model/module/megareviews.php on line 4 2018-06-22 15:34:05 - PHP Notice: Undefined index: recommend in /home/w/w87959f4/***/public_html/catalog/model/module/megareviews.php on line 4 2018-06-22 15:34:05 - PHP Notice: Undefined index: options in /home/w/w87959f4/***/public_html/catalog/model/module/megareviews.php on line 6 2018-06-22 15:34:05 - PHP Warning: Invalid argument supplied for foreach() in /home/w/w87959f4/***/public_html/catalog/model/module/megareviews.php on line 6 2018-06-22 15:34:05 - PHP Notice: Undefined index: ay in /home/w/w87959f4/***/public_html/catalog/model/module/megareviews.php on line 9 2018-06-22 15:34:05 - PHP Warning: Invalid argument supplied for foreach() in /home/w/w87959f4/***/public_html/catalog/model/module/megareviews.php on line 9 2018-06-22 15:34:05 - PHP Notice: Undefined index: files in /home/w/w87959f4/***/public_html/catalog/model/module/megareviews.php on line 11 2018-06-22 15:34:05 - PHP Warning: Invalid argument supplied for foreach() in /home/w/w87959f4/***/public_html/catalog/model/module/megareviews.php on line 11 Кусок кода. Подсветил строки с ошибками Код: 1 <?php 2 class ModelModuleMegareviews extends Model { 3 public function addReview($data) { 4 $this->db->query("INSERT INTO " . DB_PREFIX . "megareviews SET author = '" . $this->db->escape($data['author']) . "', title = '" . $this->db->escape($data['title']) . "',videotitle = '" . $this->db->escape($data['videotitle']) . "',videourl= '" . $this->db->escape($data['videourl']) . "', product_id = '" . (int)($data['product_id']) . "', text = '" . $this->db->escape(strip_tags($data['text'])) . "', rating = '" . (int)$data['rating'] . "',recommend = '" . (int)$data['recommend'] . "', status = '" . (int)$data['status'] . "', date_added = NOW()"); 5 $review_id = $this->db->getLastId(); 6 foreach($data['options'] as $id=>$value) 7 if((int)$value>-1)$this->db->query("INSERT INTO " . DB_PREFIX . "megareviewsoptions_to_review SET option_id = '" . (int)($id) . "', review_id = '" . (int)$review_id . "', value = '" . (int)$value . "' "); 8 unset($id);unset($value); 9 foreach($data['ay'] as $id=>$value) 10 if((int)$value>-1)$this->db->query("INSERT INTO " . DB_PREFIX . "megareviewsays_to_review SET ay_id = '" . (int)($id) . "', review_id = '" . (int)$review_id . "', value = '" . (int)$value . "' "); 11 foreach($data['files'] as $value) 12 if((int)$value>-1)$this->db->query("INSERT INTO " . DB_PREFIX . "megareviewsimg_to_review SET url = '" . $this->db->escape($value) . "', review_id = '" . (int)$review_id . "'"); 13 14 $this->cache->delete('product'); 15 } ps уже было подобное в этой теме, но для 1.5.х
глянул по коду из первого файла... строку 111: Код: $j = $j + 1; можно спокойно закомментировать, вот так, она не имеет никакой функциональной логики: Код: //$j = $j + 1;
Strannik69, а у Вас какая версия движка ? Какая сборка ? Если отзывы заполняю кириллицей, то крутит колесо ожидания и ничего не происходит. Если же латиницей, то отзыв сохраняется и в админке те же самые ошибки. --- Добавлено, 22 июн 2018 --- Baco, именно так. Удалил - пропала ошибка. Ничего не изменилось.
skiv14, по второму файлу причину ошибок надо искать не в нём, а в контроллере, где вызывается addReview. Там должен заполняться массив $data, но как показывают ошибки - этого не происходит. Если этот метод вызывается из какого-то стандартного контроллера, куда вызов прописан модификаторами, то, вероятно, какие-то из модификаторов не сработали и не всё прописалось.
сам фунционал подгрузки модели и вызова метода, я бы дополнительно поставил на условие, тоесть поменял с: Код: $this->load->model('module/megareviews'); $this->model_module_megareviews->addReview($post); на: Код: if (isset($post)) { $this->load->model('module/megareviews'); $this->model_module_megareviews->addReview($post); } а в идеале, то отдебажил бы сразу и массив с "постом": Код: if (isset($post)) { $this->load->model('module/megareviews'); $this->log->write('Review_arr:'.print_r($post,1)); $this->model_module_megareviews->addReview($post); } ну и после добавления отзыва - смотреть в журнал, есть ли там аргументы: author, title, rating...
Ребят, спасибо за Вашу помощь ! Сел, почитал отзывы купивших. Дев давно не обновляет модуль. Он работает в ОК 2.0.х 2.1.х и далее уже не поддерживаются. Куча негатива от покупателей. Самому допилить у меня мозгов не хватит. Попробую зайти с двух других сторон. Во-первых, попробую почитать про перевод модулей с 2.0 на 2.1. Возможно, получится. И Во-вторых, я не понимаю. Отзывы оставляются, модуль работает. Ошибки в админке - это настораживает, но не более. Отзывы-то сами работают. Можно потестить и если это действительно так, то закомментировать эти строчки, которые вызывают ошибки или забить на журнал ошибок.
Вот этого делать категорически не стоит! Каждая запись в журнал ошибок - это дополнительная затрата времени при выполнении запроса. Работа с файловой системой - это одна из самых медленных операций. Конечно, кардинально на скорость это не повлияет, но зачем сознательно замедлять сайт? Да и за мусором в логе можно не заметить какие-то более критические ошибки.
Напишешь в конечном итоге какие оибки исправлял. У меня 1.5.6 работает на кириице врое норм. Но логка работы иногда храмает+стандартная капча дырявая+ошибок дохрена) но он работает вполне норм --- Добавлено, 15 июл 2018 --- Кстати а вопрос Questions & Answers ты решал отдельным модулем? А то тут такого функционала нету. --- Добавлено, 15 июл 2018 --- А кстати Product-Questions-And-Answers-vQmod не пробовал?