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

[Решено?..] $action - как она отправляет данные обработчику


Recommended Posts

Доброго времени суток всем.

Плз объясните мне тупому как $action

 

отправляет форму???

<form action="<?php echo $action; ?>" method="post" enctype="multipart/form-data" id="form">

пробовал её вывести

<?php echo $action; ?>

так в ней просто текущий адресс страницы

 

Я хочу отправить данные модели чтобы записать в базу, как это делается не понимаю

Уважаемые гуру php плз помогите и не ругайте меня за тупизну )))

Я просто как то привык видеть формочку для отправки типа так

<form action="obrabotka.php" method="post">

А тут что то страшное

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


Так и делается.

В контроллере

...
$this->data['my_action] = $this->url->link('module/my_module', 'param=' . $foo),

...

На виде (в tpl) файле как душе угодно. Хоть так

<form action="<?php echo $my_action; ?>" method="post" enctype="multipart/form-data" id="form">

Хоть ajax

 

$.ajax({
url: '<?php echo $my_action; ?>',
type: 'post',
....
Надіслати
Поділитися на інших сайтах

Спасибо огромное. Я так понимаю из контролера это все передается в модель так же как и принимается

$this->load->model('module/my ');
		$this->data['pole_tablicy'] = $this->model_module_my->myfunction($action);
Правильно ??
Надіслати
Поділитися на інших сайтах


Нет, не правильно. Через action происходит взаимодействие контроллера и вида. Модель тут не при чем. Модель отвечает за чтение и сохранение данных из БД. А вообще откройте код opencart и внимательно его изучите.

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

Нет, не правильно. Через action происходит взаимодействие контроллера и вида. Модель тут не при чем. Модель отвечает за чтение и сохранение данных из БД. А вообще откройте код opencart и внимательно его изучите.

Ок сейчас помониторю, Скажите а если не дойдет у вас спрашивать можно ???

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


Ок сейчас помониторю, Скажите а если не дойдет у вас спрашивать можно ???

Я так понимаю что переменная $action; в контроллере уходит в массив $data и чтобы получить ее в модели нужно

public function new($data){

$data['var'] = $
$success = $mysqli->query("UPDATE product_option_value SET price = '$data['var']' WHERE optsku = '350N-1'");

}

Я правильно понял ??

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


посмотрите как сделано добавление отзыва на странице товара

идите по цепочке начиная с файла шаблона catalog\view\theme\default\template\product\product.tpl и все станет понятно :-)

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

посмотрите как сделано добавление отзыва на странице товара

идите по цепочке начиная с файла шаблона catalog\view\theme\default\template\product\product.tpl и все станет понятно :-)

Только что воспользовался вашим советом просмотрел весь путь до модели

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

 

Текст комментария вносится сюда

<textarea name="text" cols="40" rows="8" style="width: 98%;"></textarea>
    <span style="font-size: 11px;"><?php echo $text_note; ?></span>

В переменнную  $text_note;

Затем отправляется в контроллер  catalog/controller/product/product.php

В контролере обрабатывается с помощью этих строк

public function write() {
		$this->language->load('product/product');
		
		$this->load->model('catalog/review');
		
		$json = array();
		
		if ($this->request->server['REQUEST_METHOD'] == 'POST') {
			if ((utf8_strlen($this->request->post['name']) < 3) || (utf8_strlen($this->request->post['name']) > 25)) {
				$json['error'] = $this->language->get('error_name');
			}
			
			if ((utf8_strlen($this->request->post['text']) < 25) || (utf8_strlen($this->request->post['text']) > 1000)) {
				$json['error'] = $this->language->get('error_text');
			}
	
			if (empty($this->request->post['rating'])) {
				$json['error'] = $this->language->get('error_rating');
			}
	
			if (empty($this->session->data['captcha']) || ($this->session->data['captcha'] != $this->request->post['captcha'])) {
				$json['error'] = $this->language->get('error_captcha');
			}
				
			if (!isset($json['error'])) {
				$this->model_catalog_review->addReview($this->request->get['product_id'], $this->request->post);
				
				$json['success'] = $this->language->get('text_success');
			}
		}
		
		$this->response->setOutput(json_encode($json));
	}

тоесть подключается языковый файл (    $this->language->load('product/product');    ) и модель (   $this->load->model('catalog/review');   ) затем проверяется на ошибки самое первое проверяется на наличие переданной переменной методом POST затем если все норм проверяется на правильность заполненных полей пользователем если что то не так выводится сообщение об ошибке,

И если все условия выполнены сообщаем пользователю что все ок  

$json['success'] = $this->language->get('text_success');

    и выполняем действие которое я не понимаю но подозреваю что отправка данных в модель

$this->response->setOutput(json_encode($json));

, и поскольку в этой функции подключена модель

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

то соответственно ищем продолжение этого балета в файле catalog/model/catalog/review.php

В файле модели я только по названию функции понимаю что именно эти строки отвечают за добавление информации в базу и по SQL запросу поскольку используется оператор INSERT

вот эти строчки

class ModelCatalogReview extends Model {		
	public function addReview($product_id, $data) {
		$this->db->query("INSERT INTO " . DB_PREFIX . "review SET author = '" . $this->db->escape($data['name']) . "', customer_id = '" . (int)$this->customer->getId() . "', product_id = '" . (int)$product_id . "', text = '" . $this->db->escape($data['text']) . "', rating = '" . (int)$data['rating'] . "', date_added = NOW()");
	}

Я конечно сейчас задам тупые вопросы но пож не ругайте сильно

1. Из tpl файла текст уходит в переменоой <?php echo $text_note; ?> , в контролере этой переменной просто нет значит она была изменена гдето еще вопрос где ??

2. Такое ощущение что в контроллере выполняется только проверка,

 

Уважаемый  AlexDW

и другие гуру, я понимаю что задолбал уже всех тупыми вопросами, вы уж простите так как кроме как на форуме знаний по СMS Opencart получить негде, если что не стесняйтесь напишите кошелек WM и чтото придумаем, много у меня нету но на пиво или кофе сделаем )))

Извините за офтоп ))

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


response - идет вывод всех данных в массиве $data на tpl 

Модель логично - вы подключили модель

И по этому пути вызываете ее методы

$this->model_catalog_review->addReview($this->request->get['product_id'], $this->request->post);

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

<textarea name="text" cols="40" rows="8" style="width: 98%;"></textarea>

<span style="font-size: 11px;"><?php echo $text_note; ?></span>

 

<?php echo $text_note; ?> - это вывод переменной в шаблоне, а не передача...

А вот textarea, input, select, checkbox ... - имеющие тег Name - который после отправки на сервер (type="submit")

записывается в глобальный массив $_POST

И проверяется

 if ($this->request->server['REQUEST_METHOD'] == 'POST') {

После чего $this->request->post['name'] = это наш textarea с тегом name="name"

Дальше передаем в модель этот массив и айди продукта $this->model_catalog_review->addReview($this->request->get['product_id'], $this->request->post);

А в модель обрабатываем

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

1. Из tpl файла текст уходит в переменоой <?php echo $text_note; ?> , в контролере этой переменной просто нет значит она была изменена гдето еще вопрос где ??

2. Такое ощущение что в контроллере выполняется только проверка,

слишком торопитесь и не обращаете внимания на мелочи - смотрите в catalog\view\theme\default\template\product\product.tpl

 

отправка отзыва идет по нажатию на кнопку? значит ищем где она и что происходит:

<div class="right"><a id="button-review" class="button"><?php echo $button_continue; ?></a></div>

вроде как ничего, но может id="button-review" - неспроста и обрабатывается?

 

смотрим js код в конце файла и видим:

$('#button-review').bind('click', function() {
    $.ajax({
        url: 'index.php?route=product/product/write&product_id=<?php echo $product_id; ?>',
        type: 'post',
        dataType: 'json',
        data: 'name=' + encodeURIComponent($('input[name=\'name\']').val()) + '&text=' + encodeURIComponent($('textarea[name=\'text\']').val()) + '&rating=' + encodeURIComponent($('input[name=\'rating\']:checked').val() ? $('input[name=\'rating\']:checked').val() : '') + '&captcha=' + encodeURIComponent($('input[name=\'captcha\']').val()),
...

обратите внимание на data: - здесь как раз и идет передача данных из формы в контроллер

 

контроллер обрабатывает полученные данные, если есть ошибка - возвращает json error

если нет - обращается к модели для внесения данных в БД и возвращает json success, который в свою очередь обрабатывается в дальнейшей части кода в

$('#button-review').bind('click', function() {
...
        success: function(data) {
            if (data['error']) {
                $('#review-title').after('<div class="warning">' + data['error'] + '</div>');
            }
            
            if (data['success']) {
                $('#review-title').after('<div class="success">' + data['success'] + '</div>');
                                
                $('input[name=\'name\']').val('');
                $('textarea[name=\'text\']').val('');
                $('input[name=\'rating\']:checked').attr('checked', '');
                $('input[name=\'captcha\']').val('');
            }
        }

изучайте как реализованы различные части на примере кода движка - все прояснится

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

да я сам еще учусь..

а спасибо можно выразить на главной странице форума, по нажатию на пожертвовать ;)

ОК. Но это ведь пойдет не вам лично а форуму, я правильно понимаю ??

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


ОК. Но это ведь пойдет не вам лично а форуму, я правильно понимаю ??

форум, на котором мы сейчас общаемся и благодаря которому множество людей находит ответы и получает помощь по opencart, существует:

1) на процент с продаж модулей

2) за счет пожертвований

3) за счет наличия на нем активных участников

 

так что пожертвование в пользу форума меня вполне устраивает

 

если уж так хочется отблагодарить лично - можете купить какой-нибудь из мох модулей

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

  • 2 weeks later...

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

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

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

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

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

Вхід

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

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

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

×
×
  • Створити...

Important Information

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