php - Prestashop 管理选项卡 - clausole 不起作用的地方

标签 php mysql prestashop

我正在为 prestashop 编写一个选项卡,其中列出了客户的原籍国。 到目前为止还可以,但我想按国家/地区过滤查询或表,因此我想添加以下内容: 其中 iso_code = 'IT' 显然prestashop不让我,我该怎么办? 这是我的代码:

<?php
include_once(PS_ADMIN_DIR.'/../classes/AdminTab.php');
class AdminCustomersCountries extends AdminTab
{
    public function __construct()
    {
        $this->table = 'customer';
        $this->className = 'Customer';
        $this->lang = false;
        $this->edit = false;
        $this->view = true;
        $this->delete = false;
        $this->deleted = false;
        $this->requiredDatabase = true;

        $this->_select = '(SELECT cy.iso_code FROM ps_address AS addr, ps_country AS cy WHERE addr.id_customer=a.id_customer AND addr.id_country=cy.id_country) AS iso_code';
        $this->fieldsDisplay = array(
        'id_customer' => array('title' => $this->l('ID'), 'align' => 'center', 'width' => 25),
        'lastname' => array('title' => $this->l('Last Name'), 'width' => 80),
        'firstname' => array('title' => $this->l('First name'), 'width' => 60),
        'email' => array('title' => $this->l('E-mail address'), 'width' => 120, 'maxlength' => 19),
        'active' => array('title' => $this->l('Enabled'), 'width' => 25, 'align' => 'center', 'active' => 'status', 'type' => 'bool', 'orderby' => false),
        'newsletter' => array('title' => $this->l('News.'), 'width' => 25, 'align' => 'center', 'type' => 'bool', 'callback' => 'printNewsIcon', 'orderby' => false),
        'iso_code' => array('title' => "Nazione", 'width' => 60, 'orderby'=>false, 'search'=>false));

        $this->optionTitle = "Prova";
        parent::__construct();
    }

    public function postProcess()
    {
        // This function is executed when the Submit button is clicked
        // Use it to store the value of text fields in the database

        parent::postProcess();
    }

    public function displayForm($token=NULL)
    {
        // This function can be used to create a form with text fields
    }
}

?>

但是,我在这里尝试添加 WHERE 子句,但没有结果:

<?php
include_once(PS_ADMIN_DIR.'/../classes/AdminTab.php');
class AdminCustomersCountries extends AdminTab
{
    public function __construct()
    {
        $this->table = 'customer';
        $this->className = 'Customer';
        $this->lang = false;
        $this->edit = false;
        $this->view = true;
        $this->delete = false;
        $this->deleted = false;
        $this->requiredDatabase = true;

        $this->_select = '(SELECT cy.iso_code FROM ps_address AS addr, ps_country AS cy WHERE addr.id_customer=a.id_customer AND addr.id_country=cy.id_country AND cy.iso_code='IT') AS iso_code';
        $this->fieldsDisplay = array(
        'id_customer' => array('title' => $this->l('ID'), 'align' => 'center', 'width' => 25),
        'lastname' => array('title' => $this->l('Last Name'), 'width' => 80),
        'firstname' => array('title' => $this->l('First name'), 'width' => 60),
        'email' => array('title' => $this->l('E-mail address'), 'width' => 120, 'maxlength' => 19),
        'active' => array('title' => $this->l('Enabled'), 'width' => 25, 'align' => 'center', 'active' => 'status', 'type' => 'bool', 'orderby' => false),
        'newsletter' => array('title' => $this->l('News.'), 'width' => 25, 'align' => 'center', 'type' => 'bool', 'callback' => 'printNewsIcon', 'orderby' => false),
        'iso_code' => array('title' => "Nazione", 'width' => 60, 'orderby'=>false, 'search'=>false));

        $this->optionTitle = "Prova";
        parent::__construct();
    }

    public function postProcess()
    {
        // This function is executed when the Submit button is clicked
        // Use it to store the value of text fields in the database

        parent::postProcess();
    }

    public function displayForm($token=NULL)
    {
        // This function can be used to create a form with text fields
    }
}

?>

最佳答案

我不确定您为什么在那里使用子查询,但 PS AdminTab 类还提供了两个其他选项。

1)Where:每当你需要添加where子句时,你可以像下面这样写

$this->_where = 'your condition here';

2)连接:PS还为您提供了额外的连接功能,您可以像这样编写它们

$this->_join = 'write down all your joins here like normal queries';

现在,如果您想通过附加检查(wheres)从其他表中获取附加信息,那么您可以按如下方式执行。 :

**注意:对于表,PS 给出以“a”开头的别名,如果它有其他表(例如语言表),则它以 b 等开头。所以你应该知道,在 join、_select 和 _where 中你应该使用正确的别名。 **

$this->_select = 'all your additional fields from the tables you need. Those tables should be joined in the _join query.';

$this->_join = 'All your joins here with correct aliases, as these aliases are used in _select query and in _where';

$this->_where = 'your where clauses here.';

我希望这能帮助您纠正您的疑问。

谢谢

关于php - Prestashop 管理选项卡 - clausole 不起作用的地方,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16873273/

相关文章:

php - Prestashop 实际数量与实物数量不同

php - 将 id 从 iOS 应用程序发送到 php 到 mysql

PHP proc_open 环境变量

php - 显示数据库中的所有数据项时出错

php - Yii 在模型中创建新属性不起作用

android - 如何绘制从当前位置到从 Mysql 数据库检索到的位置的路径

php - 如何根据单击的项目进行 mysql 查询?

php - 将mysql查询保存到数据库中

mysql - 在 prestashop 的 MySQL 的哪个表中,我可以找到字段 Displayed text when in stock

php - prestashop - 从模块创建客户组