karnaval

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

Рекомендуемые сообщения

karnaval    5

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

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

 

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

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

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

<?php echo $action; ?>

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

 

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

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

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

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
tabook    131

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

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

...
$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',
....

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
karnaval    5

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

$this->load->model('module/my ');
		$this->data['pole_tablicy'] = $this->model_module_my->myfunction($action);
Правильно ??

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
tabook    131

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
karnaval    5

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
karnaval    5

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

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

public function new($data){

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

}

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
AlexDW    864

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
karnaval    5

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

идите по цепочке начиная с файла шаблона 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 и чтото придумаем, много у меня нету но на пиво или кофе сделаем )))

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
timedontwait    100

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

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

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
timedontwait    100
<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);

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
AlexDW    864

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
karnaval    5

Спасибо огроооооооооомнейшее буду ломать голову, насчет пива и кофе я не пошутил, пишите ))))

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
AlexDW    864

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
karnaval    5

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

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
AlexDW    864

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

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

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

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

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

 

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

 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
karnaval    5

Последнее мне нравится больше)) так и сделаю )))

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
afwollis    1 099

ну что там - разобрался?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
karnaval    5

ну что там - разобрался?

Да почти )))

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти


  • Последние посетители   0 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу