Помощь Undefined offset: 0

Ed71

Постоялец
Регистрация
6 Янв 2015
Сообщения
115
Реакции
23
Здравствуйте уважаемые форумчане. Очень нужна Ваша помощь. После переезда магазина Для просмотра ссылки Войди или Зарегистрируйся на другой хостинг перестал работать модуль каталог товаров, во вкладке вместо товаров отображается только - (0), а в картах товаров сверху появилась такая надпись:
Notice: Undefined offset: 0 in /var/www/stylishj/data/www/stylishjewel.ru/catalog/controller/module/catalog.php on line 85Notice: Undefined offset: 0 in /var/www/stylishj/data/www/stylishjewel.ru/catalog/controller/module/catalog.php on line 101Notice: Undefined offset: 0 in /var/www/stylishj/data/www/stylishjewel.ru/catalog/controller/module/catalog.php on line 105.
Пробовал удалить модуль и поставить заново, но ничего не изменилось. Помогите пожалуйста исправить ошибку. Не могу понять откуда она появилась, ведь на старом хостинге все работало нормально.
Также перестал работать модуль рандомной перелинковки. Во вкладке описание, где ранее в случайном порядке из текстового файла выводились ссылки с анкорами теперь пишет:
Warning: file(Для просмотра ссылки Войди или Зарегистрируйся failed to open stream: HTTP request failed! HTTP/1.1 403 Forbidden in /var/www/stylishj/data/www/stylishjewel.ru/vqmod/vqcache/vq2-catalog_view_theme_stylishjewel_template_product_product.tpl on line 289
До этого также все работало хорошо. Заранее огромное спасибо!
 
Последнее редактирование:
Notice - ошибка довольно часто вылазит из-за неконструктивной лени программистов - отключи вывод Notice ошибок в настройках хостинга. По хорошему пользователю ошибки вообще не должны отображаться. Убедись, что они попадают в лог хостинга и выруби полностью.
Еще момент, если есть отличия в версиях php на старом и новом, то могут вылезать такие сюрпризы.

Вторая ошибка вообще фигня какая-то ты сам со своего же сайта качаешь по http? Имхо бред. Замени в исходниках http:// на относительный путь файловой системы. А вообще 403 ошибка возникла из-за не правильных прав на папку или файл - это тоже стоит поправить.
 
  • Нравится
Реакции: Ed71
ПереустановилДля просмотра ссылки Войди или Зарегистрируйсяvqmod. Перед этим вернул на место оригинальные файлы index.php, в корне и в админке. Отредактировал файл "vqmod\pathReplaces.php" под свою Админскую директорию. Дал права на запись 766 (777) на файлы "index.php" в корне и в АДМИНКЕ. Заменил имя админской директории на свое в файле "vqmod\install\index.php". Проинсталлировал vqmod Для просмотра ссылки Войди или ЗарегистрируйсяДля просмотра ссылки Войди или Зарегистрируйся Установил права 644 на файлы "index.php" в корне и в АДМИНКЕ... И ничего не изменилось. Ни надписи не пропали, ни модули не заработали... :-( В общем, все осталось, как и было. Куда дальше копать, подскажите, пожалуйста?
 
Последнее редактирование:
Вторая ошибка - 644 или 755 на папку и файл js/text.txt

Первая ошибка - панель управления хостингом -- версия php -- PHP options поставить
Код:
display_errors	Off
error_reporting	E_ALL & ~E_NOTICE

Точный путь к настройкам php зависит от панели управления... У хостера в справке должно быть описание.
Но после такой правки надо проверить работоспособность, если всё работает то ок.
Если что-то сломалось, попробуйте выбрать более ранюю версию php - 5.4 или 5.3
 
  • Нравится
Реакции: Ed71
С модулем рандомной перелинковки удалось справиться. Теперь все работает. Остался каталог товаров. По прежнему ничего не выводится во вкладке и та же самая ошибка:
Notice: Undefined offset: 0 in /var/www/stylishj/data/www/stylishjewel.ru/catalog/controller/module/catalog.php on line 43Notice: Undefined offset: 0 in /var/www/stylishj/data/www/stylishjewel.ru/catalog/controller/module/catalog.php on line 51Notice: Undefined offset: 0 in /var/www/stylishj/data/www/stylishjewel.ru/catalog/controller/module/catalog.php on line 53
Переустанавливал модуль, заменив перед этим все его файлы - ничего не изменилось... В службе поддержки хостинга мне сказали, что ошибка в php скрипте, он должен смещаться по элементам массива, но он их не может найти. Уважаемые профессионалы, помогите, пожалуйста, исправить эту ошибку.
 
Последнее редактирование:
Спроси в поддержке как отключить вывод Notice ошибок. И сделай таки это.
Их можно отключать, они не критичны.
Они могут служить признаком того, что сломано. Но чаше всего указывают на то, что программисту было лень заморачиваться.
 
  • Нравится
Реакции: Ed71
Да ошибку они отключали уже. Дело ведь не в ней совсем, а в том, что модуль Каталог Товаров перестал работать после переноса сайта. И, если даже ошибка отключена, то он все равно не работает...
 
/var/www/stylishj/data/www/stylishjewel.ru/catalog/controller/module/catalog.php on line 43
Notice: Undefined offset: 0 in /var/www/stylishj/data/www/stylishjewel.ru/catalog/controller/module/catalog.php on line 51
Notice: Undefined offset: 0 in /var/www/stylishj/data/www/stylishjewel.ru/catalog/controller/module/catalog.php on line 53

Неплохо было бы еще глянуть на код в этих местах. Скопируйте его сюда.
 
  • Нравится
Реакции: Ed71
Неплохо было бы еще глянуть на код в этих местах. Скопируйте его сюда.
Вот этот код.
<?php
class ControllerModuleCatalog extends Controller {
protected function index($setting) {

$this->document->addScript('catalog/view/javascript/catalog.js');

$this->document->addStyle('catalog/view/theme/default/stylesheet/catalog.css');


$this->language->load('module/catalog');

$this->data['heading_title'] = $this->language->get('heading_title');

if (isset($this->request->get['product_id'])) {

$product_id = (int)$this->request->get['product_id'];

} else {

return;
}

$this->data['product_id'] = $product_id;

$this->load->model('catalog/product');

$this->load->model('catalog/manufacturer');

$product_info = $this->model_catalog_product->getProduct($product_id);

$this->data['active_manufacturer'] = $product_info['manufacturer_id'];

$this->data['active_category'] = $this->getActiveCategory($product_id);

$manufacturers = array ();

$products = $this->getProducts($this->data['active_category']);

$output = array();

$children = array();

$curr_id = $products[0]['manufacturer_id'];

$tmpid = 0;

$tmptotal = 0;

$tmp = array (

'manufacturer_name' => $products[0]['manufacturer_name'],

'manufacturer_id' => $products[0]['manufacturer_id'],


);

foreach ($products as $product) {


$qty = true;

if ((int)$product['quantity'] == 0) {

$qty = false;


}

$special = false;

if (isset($product['special'])) {
$special = true;

}


if ($product['image']) {
$image = $this->model_tool_image->resize($product['image'], 100, 100);
} else {
$image = false;
}

if ($product['manufacturer_id'] != $curr_id) {

$output[$tmpid] = array(

'name' => $tmp['manufacturer_name'] . '<span class="total"> ('.$tmptotal.')</span>',

'manufacturer_id' => $tmp['manufacturer_id'],

'products' => $children


);


$tmp = array (

'manufacturer_name' => $product['manufacturer_name'],

'manufacturer_id' => $product['manufacturer_id'],

);

$children = array();

$curr_id = $product['manufacturer_id'];

$tmpid++;

$tmptotal = 0;

};

$tmptotal++;

$children[] = array(

'product_id' => $product['product_id'],

'name' => $product['product_name'],

'image' => $image,

'qty' => $qty,

'special' => $special,

'href' => $this->url->link('product/product', 'product_id=' . $product['product_id'])

);



}


$output[$tmpid++] = array(

'name' => $tmp['manufacturer_name'] . '<span class="total"> ('.$tmptotal.')</span>',

'manufacturer_id' => $tmp['manufacturer_id'],

'products' => $children


);



$this->data['manufactureres'] = $output;

if (file_exists(DIR_TEMPLATE . $this->config->get('config_template') . '/template/module/catalog.tpl')) {

$this->template = $this->config->get('config_template') . '/template/module/catalog.tpl';

} else {

$this->template = 'default/template/module/catalog.tpl';

}

$this->render();
}


public function getProducts($active_category, $data = array()) {

$date = date('Y-m-d H:I:s');

if ($this->customer->isLogged()) {
$customer_group_id = $this->customer->getCustomerGroupId();
} else {
$customer_group_id = $this->config->get('config_customer_group_id');
}

$cache = md5($active_category);

$product_data = $this->cache->get('catalog.' . (int)$this->config->get('config_language_id') . '.' . (int)$this->config->get('config_store_id') . '.' . (int)$customer_group_id . '.' . $cache);

if (!$product_data) {


$price_sql = "(SELECT price FROM " . DB_PREFIX . "product_discount pd2 WHERE pd2.product_id = p.product_id AND pd2.customer_group_id = '" . (int)$customer_group_id . "' AND pd2.quantity = '1' AND ((pd2.date_start = '0000-00-00' OR pd2.date_start < NOW()) AND (pd2.date_end = '0000-00-00' OR pd2.date_end > NOW())) ORDER BY pd2.priority ASC, pd2.price ASC LIMIT 1) AS discount, (SELECT price FROM " . DB_PREFIX . "product_special ps WHERE ps.product_id = p.product_id AND ps.customer_group_id = '" . (int)$customer_group_id . "' AND ((ps.date_start = '0000-00-00' OR ps.date_start < NOW()) AND (ps.date_end = '0000-00-00' OR ps.date_end > NOW())) ORDER BY ps.priority ASC, ps.price ASC LIMIT 1) AS special,";

$sql = "SELECT p.product_id, pd.name as product_name, p.image, p.quantity, ". $price_sql ." m.name as manufacturer_name, m.manufacturer_id FROM " . DB_PREFIX . "product p LEFT JOIN " . DB_PREFIX . "product_description pd ON (p.product_id = pd.product_id) LEFT JOIN " . DB_PREFIX . "product_to_store p2s ON (p.product_id = p2s.product_id)";

$sql .= " LEFT JOIN " . DB_PREFIX . "product_to_category p2c ON (p.product_id = p2c.product_id)";

$sql .= " LEFT JOIN " . DB_PREFIX . "manufacturer m ON (m.manufacturer_id = p.manufacturer_id)";

$sql .= " WHERE pd.language_id = '" . (int)$this->config->get('config_language_id') . "' AND p.status = '1' AND p.date_available <= UNIX_TIMESTAMP('".$date."') AND p2s.store_id = '" . (int)$this->config->get('config_store_id') . "'";

$sql .= " AND p2c.category_id = '" . (int)$active_category . "'";

$sql .= " ORDER BY m.name ASC";

$query = $this->db->query($sql);

$product_data = $query->rows;

$this->cache->set('catalog.' . (int)$this->config->get('config_language_id') . '.' . (int)$this->config->get('config_store_id') . '.' . (int)$customer_group_id . '.' . $cache, $product_data);
}

return $product_data;


}

public function getActiveCategory($product_id) {

$query = $this->db->query("SELECT category_id FROM " . DB_PREFIX . "product_to_category WHERE product_id = '" . (int)$product_id . "' AND main_category = 1 ");

$result = $query->row;

return $result['category_id'];

}



}
?>
Красным цветом выделил строки на которые ругается модуль.
 
Так уже понятнее... Проблема состоит из 2 частей:
1. кривой код, который не обрабатывает пустой массив
2. данные, которые порождают эту проблему.

Скорее всего для продукта не установлена Главная категория или в ней нет других товаров.
Чтобы исправить код, нужно добавить проверку, что $products содержит данные:

if (isset($products) && count($products) > 0) {
$curr_id = $products[0]['manufacturer_id'];
}

...

if (isset($products) && count($products) > 0) {
$tmp = array (

'manufacturer_name' => $products[0]['manufacturer_name'],

'manufacturer_id' => $products[0]['manufacturer_id'],

);
}
else {
$tmp = array (

'manufacturer_name' => '',

'manufacturer_id' => '',

);
}


типа такого. Только не понятно как потом эти данные будут использоваться. Но ошибка должна уйти.
 
Назад
Сверху