Отображение ошибки на моем пользовательском модуле в magento

Я сейчас работаю в magento для разработки модуля для проверки используемого ваучера или нет. Детали хранятся в новой таблице. В моем config.xml я указал страницу наблюдателя для извлечения подробностей из таблицы БД. Но я не знаю точное использование страницы наблюдателя в magento. Могу ли я использовать страницу наблюдателя для этого использования.

Но это приводит к ошибке, я проверил файл журнала:

a:5:{i:0;s:203:"SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '=' at line 1";i:1;s:1677:"#0 C:\wamp\www\Mymagento\lib\Varien\Db\Statement\Pdo\Mysql.php(110): Zend_Db_Statement_Pdo->_execute(Array)

Мой файл наблюдатель.php также показан ниже

class Module_Voucher_Model_Observer {
public function __contruct() {
$coupon_code = trim(Mage::getSingleton("core/session")->getData("coupon_code"));
}

public function getresultofVoucher($coupon_code) {
$resource = Mage::getSingleton('core/resource');
$readConnection = $resource->getConnection('core_read');
$table = "voucher_code_status_table";
$query = 'SELECT * FROM ' . $table. 'WHERE value='.$coupon_code;
$results = $readConnection->fetchAll($query);

return $results;
}
}

и мой Indexcontroller.php показан ниже:

class Module_Voucher_IndexController extends Mage_Core_Controller_Front_Action {
/**
* Coupon code checking
**/
public function indexAction() {
$this->loadLayout();
$block = $this->getLayout()->createBlock('Mage_Core_Block_Template','vouchercode',
array('template' => 'voucher/vouchercode.phtml')
);
$this->getLayout()->getBlock('left')->append($block);
$this->renderLayout();
}

public function CheckAction() {
$coupon_code = $this->getRequest()->getParam('coupon_code');
//$coupon_code ='63663';
if ($coupon_code != '') {
Mage::getSingleton("core/session")->setData("coupon_code",$coupon_code);     //("checkout    /session")->
}
else {
//
//echo 'error : Voucher code issue';
}
if ($this->getRequest()->getParam('url')) {
header('HTTP/1.1 301 Moved Permanently');
$gclid = $this->getRequest()->getParam('');
$url = $this->getRequest()->getParam('url');
header('Location: /' . $url . '?voucherbox=' . $gclid);
die();
}
else {
$this->_redirect("/");
}
}
}

Я думаю, что нет никакой возможности вызвать функцию страницы наблюдателя на странице контроллера.

0

Решение

@ СИБИ А, я просто пытаюсь ответить на вопрос об использовании наблюдателей.

Наблюдатели в основном используются для добавления дополнительных функциональных возможностей / изменения некоторых существующих поведений во время определенного события в потоке приложения magento.

Прежде чем сосредоточиться на наблюдателе, мы должны иметь представление о различных событиях, наблюдаемых в magento. Например, «sales_order_place_after» — это событие, сгенерированное magento во время размещения нового заказа.

Если вы ищете строку «Mage :: dispatchEvent» в корневой папке magento, вы можете увидеть множество операторов, которые в разном случае запускают различные виды событий.

Давайте рассмотрим следующий сценарий. Это просто пример для понимания основной концепции.

Сценарий:
Нам нужно обновить поле customer_note в таблице sales_flat_order, пока клиент размещает новый заказ (обратите внимание: sales_flat_order — это таблица, в которой сохраняется основная информация о каждом заказе).

Даже при том, что может существовать много традиционных подходов для выполнения этой функциональности, мы можем сделать это также с помощью нового наблюдателя. Позвольте мне написать некоторые основные этапы процесса

  1. Создать модуль
  2. Создать модельный класс
  3. Добавьте метод наблюдателя, который прослушивает событие «order_place_after»
  4. Определите метод наблюдателя, получите доступ к объекту $ order внутри этого метода
  5. Обновите поле customer_note в объекте $ order и сохраните.

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

Если вы проверите функцию place () внутри класса Mage_Sales_Model_Order, вы увидите, что magento запускает событие «sales_order_place_after», которое мы слушаем. Он передает текущий объект $ order событию в качестве параметра. Мы получим этот объект $ order в нашем методе наблюдателя в качестве параметра, потому что мы слушаем это конкретное событие.

Я даю здесь файлы, которые могут быть использованы для создания модуля для достижения вышеизложенного.

1) app / etc / modules / Research_OrderCustomerNoteModify.xml

<?xml version="1.0"?>
<config>
<modules>
<Research_OrderCustomerNoteModify>
<active>true</active>
<codePool>local</codePool>
</Research_OrderCustomerNoteModify>
</modules>
</config>

2) app / code / local / Research / OrderCustomerNoteModify / etc / config.xml

<?xml version="1.0"?>
<config>
<modules>
<Research_OrderCustomerNoteModify>
<version>0.1.0</version>
</Research_OrderCustomerNoteModify>
</modules>
<global>
<models>
<research_ordercustomernotemodify>
<class>Research_OrderCustomerNoteModify_Model</class>
</research_ordercustomernotemodify>
</models>
<events>
<sales_order_place_after>
<observers>
<research_ordercustomernotemodify_update_customernote_field>
<class>research_ordercustomernotemodify/observer</class>
<method>updateCustomernoteField</method>
</research_ordercustomernotemodify_update_customernote_field>
</observers>
</sales_order_place_after>
</events>
</global>
</config>

3) app / code / local / Research / OrderCustomerNoteModify / Model / Observer.php

<?php
class Research_OrderCustomerNoteModify_Model_Observer
{
public function updateCustomernoteField($observer)
{
$order = $observer -> getEvent() -> getOrder();
$currentNote = $order->getCustomerNote();
$order->setCustomerNote('Customer has quoted this'.$currentNote);
$order->save();
return;
}
}
2

Другие решения

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

  • $ obj = new Module_Voucher_Model_Observer ()
  • $ Obj-> getresultofVoucher
0

По вопросам рекламы [email protected]