Перейти до вмісту
Пошук в
  • Детальніше...
Шукати результати, які ...
Шукати результати в ...

[Решено] Не выводится переменные по циклу for


Recommended Posts

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

Opencart: 3.0.2.0

 

Новенький в MVC. Очень прошу помочь мне с кодом в котроллере, целый день потратил и могу вывести значения под для каждого товара.

 

1) Доавил в таблицу "Product" 4 столбца

2) Добавил в админ панеле новый таб

   Хочу вывести данные из ДБ в новый ТАБ

При нажатии на действия изменить какого то товара, переходит на ссылку "catalog/product/edit"

1) Захожу в "model/catalog/product/product.php/" и создаю новую функцию, что бы выбрать столбцы

public function getKreditdata($product_id)
{	
	$query = $this->db->query("select product_id,kredit_status, kredit_ay, kredit_faiz, kredit_min_ilkin from " . DB_PREFIX . "product where product_id = '".$product_id."' ");
	
	return $query->rows;
}

2) Захожу в "controller/catalog/product/product.php" перехожу к функции "edit" и добавляю тут код что бы передать данные в twig(мне кажется тут у меня ошибка)

$data['kreditdata'] = $this->model_catalog_product->getKreditdata($this->request->get['product_id']);

3) Вывожу в "view/template/catalog/product_form.php" циклом FOR, но ничего не выводится. 

{% for kredata in kreditdata %}

//например для теста вывожу
	{{ kredata.kredit_status ]}

{% endfor %}

 

Надіслати
Поділитися на інших сайтах


В контрллере массив не пуст этот ?

$data['kreditdata']

Кеш твига чистите? Или отключен на время разработки?

Надіслати
Поділитися на інших сайтах

@Prorab337 Спасибо за ответ и помощь

 

4 минуты назад, Prorab337 сказал:

Кеш твига чистите? Или отключен на время разработки?

Да, постоянно, уже в привычку вошло) Не отключен на время разработки, а нужно включить?

4 минуты назад, Prorab337 сказал:

В контрллере массив не пуст этот ?

 

Делаю var_dump($data['kreditdata']) в контроллере и для каждого товара выводится привильно

 

 

 

Змінено користувачем Orkh3ll0
Надіслати
Поділитися на інших сайтах


Выборка ОДНОГО товара, но возвращаешь МАССИВ СТРОК ($query->rows), а не одну строку ($query->row), как следовало бы.

Поэтому массив есть, но перебираешь неправильно.

 

Так что либо возвращай из модели только одну строку, либо переделывай перебор массива.

Надіслати
Поділитися на інших сайтах

@afwollis в моделе, можете увидеть что я возвращаю ($query->rows). Проблема в том что, вообще не работает, даже 1 строку не возвращает. в Цикл for не заходит, думаю массив в контроллере не там вставляю, не знаю куда вставить, что бы правильно выводил все данные. var _dump работает и все правильно показывает, но при выводе в for, не работает

Надіслати
Поділитися на інших сайтах


@afwollis все оставил как есть и в моделе в функции поменял  $query->rows на $query->row , но все одно и тоже, не заходит в цикл FOR, но var_dump($data['kreditdata'])   все правильно выводит. Вот пример:  "array(5) { ["product_id"]=> string(2) "60" ["kredit_status"]=> string(1) "1" ["kredit_ay"]=> string(2) "18" ["kredit_faiz"]=> string(5) "5.000" ["kredit_min_ilkin"]=> string(6) "99.000" }"

 

public function getKreditdata($product_id)
{	
	$query = $this->db->query("select product_id,kredit_status, kredit_ay, kredit_faiz, kredit_min_ilkin from " . DB_PREFIX . "product where product_id = '".$product_id."' ");
	
	return $query->row;
}

 

Надіслати
Поділитися на інших сайтах


теперь выводи просто так

{{ kreditdata.kredit_status }}

без цикла.

 

- - -

не досмотрел в первом сообщении:

квадратная скобка в конце вместо фигурной - опечатка тут или прям в коде?

{{ kredata.kredit_status ]}
Надіслати
Поділитися на інших сайтах

@afwollis Сделал как вы сказали

 

6 минут назад, afwollis сказал:

теперь выводи просто так


{{ kreditdata.kredit_status }}

без цикла.

 

Сделал, ничего не вывелось. Я новенький, но мне кажется только в цикле можно такое вывести {{ kreditdata.kredit_status }}, а если было бы просто {{ kredit_status }}, то вывелось бы, я прав?

 

6 минут назад, afwollis сказал:

{{ kredata.kredit_status ]}

это опечатка, в коде все правильно

Змінено користувачем Orkh3ll0
Надіслати
Поділитися на інших сайтах


...надо высыпаться...

 

проблема у тебя там, где ты предполагал.

edit() - лишь обработка отправки данных из формы.

 

сама форма и данные собираются в getForm().

Спойлер


там, перед


		$data['header'] = $this->load->controller('common/header');

добавляй


		if (isset($this->request->post['kredit_status'])) {
			$data['kredit_status'] = $this->request->post['kredit_status'];
		} elseif (!empty($product_info)) {
			$data['kredit_status'] = $product_info['kredit_status'];
		} else {
			$data['kredit_status'] = array();
		}
		
		if (isset($this->request->post['kredit_ay'])) {
			$data['kredit_ay'] = $this->request->post['kredit_ay'];
		} elseif (!empty($product_info)) {
			$data['kredit_ay'] = $product_info['kredit_ay'];
		} else {
			$data['kredit_ay'] = array();
		}
		
		if (isset($this->request->post['kredit_faiz'])) {
			$data['kredit_faiz'] = $this->request->post['kredit_faiz'];
		} elseif (!empty($product_info)) {
			$data['kredit_faiz'] = $product_info['kredit_faiz'];
		} else {
			$data['kredit_faiz'] = array();
		}
		
		if (isset($this->request->post['kredit_min_ilkin'])) {
			$data['kredit_min_ilkin'] = $this->request->post['kredit_min_ilkin'];
		} elseif (!empty($product_info)) {
			$data['kredit_min_ilkin'] = $product_info['kredit_min_ilkin'];
		} else {
			$data['kredit_min_ilkin'] = array();
		}

 

в шаблоне - просто


{{ kredit_status }}
{{ kredit_ay }}
{{ kredit_faiz }}
{{ kredit_min_ilkin }}


 

 

Надіслати
Поділитися на інших сайтах

@afwollis нашел решение. Как и предполагал, проблема была в контроллере, не туда вписал код. Этот код массива

$data['kreditdata'] = $this->model_catalog_product->getKreditdata($this->request->get['product_id']);

не нужно было просто в edit функцию вписать. Нужно было в функцию  getForm() вписать, так как функция edit() возвращал функцию getForm. Вставил и без FOR цикла все вывелось. 

Отдельное и большое спасибо, за то что хотели помочь и помогли.

 

Тему можно закрыть. Спасибо

Надіслати
Поділитися на інших сайтах


@afwollis

2 минуты назад, afwollis сказал:

проблема у тебя там, где ты предполагал.

edit() - лишь обработка отправки данных из формы.

 

сама форма и данные собираются в getForm().

Нашли вместе, но вы лучше, так как у вас нету моих кодов под рукой) Спасибо большое)

Змінено користувачем Orkh3ll0
Надіслати
Поділитися на інших сайтах


Кроме всего, мне показалось, что у тебя эти данные из другой таблицы выбираются (типа, как атрибуты).

Поэтому лучше возьми мой код, так как нет смысла гонять лишние запросы для получения данных из таблицы product, ибо они все и так уже есть в "$product_info"

		if (isset($this->request->get['product_id']) && ($this->request->server['REQUEST_METHOD'] != 'POST')) {
			$product_info = $this->model_catalog_product->getProduct($this->request->get['product_id']);
		}

 

Да и с точки зрения кода opencart этот вариант правильный.

 

Успехов в дальнейшем освоении.

Надіслати
Поділитися на інших сайтах

@afwollis

16 минут назад, afwollis сказал:

if (isset($this->request->get['product_id']) && ($this->request->server['REQUEST_METHOD'] != 'POST')) { $product_info = $this->model_catalog_product->getProduct($this->request->get['product_id']); }

Вы правы сделал что и посоветовали. Убрал остальные и добавил код то что снизу и все работает. Спасибо

 

if (isset($this->request->post['kreditdata'])) {
	$data['kreditdata'] = $this->request->post['kreditdata'];
} elseif (isset($this->request->get['product_id'])) {
	$data['kreditdata'] = $this->model_catalog_product->getKreditdata($this->request->get['product_id']);
} else {
	$data['kreditdata'] = array();
}

 

Надіслати
Поділитися на інших сайтах


дыру безопасности в запросе в модели исправьте. кто знает что будет передано в get/post строке переменной product_id. в запросе приведение типов сделайте до int. и не забывайте это делать в каждом запросе, либо (int)$product_id, либо $this->db->escape($product_id), никогда не доверяйте полученным данным.

Змінено користувачем lexxkrt
Надіслати
Поділитися на інших сайтах


Створіть аккаунт або увійдіть для коментування

Ви повинні бути користувачем, щоб залишити коментар

Створити обліковий запис

Зареєструйтеся для отримання облікового запису. Це просто!

Зареєструвати аккаунт

Вхід

Уже зареєстровані? Увійдіть тут.

Вхід зараз
  • Зараз на сторінці   0 користувачів

    • Ні користувачів, які переглядиють цю сторінку
×
×
  • Створити...

Important Information

На нашому сайті використовуються файли cookie і відбувається обробка деяких персональних даних користувачів, щоб поліпшити користувальницький інтерфейс. Щоб дізнатися для чого і які персональні дані ми обробляємо перейдіть за посиланням . Якщо Ви натиснете «Я даю згоду», це означає, що Ви розумієте і приймаєте всі умови, зазначені в цьому Повідомленні про конфіденційність.