【问题标题】:Custom field name mapping in expressionengine表达式引擎中的自定义字段名称映射
【发布时间】:2012-05-22 12:26:58
【问题描述】:

我正在使用 ExpressionEngine 对网站进行一些更改,我似乎不太理解一个概念,并且可能正在编写具有预先提供的方法的解决方法。

特别是频道和会员,原作者添加了几个自定义字段。我来自传统的数据库背景,其中表中的每一列都有一个特定的有意义的名称。我也习惯于通过添加关联表和唯一键来扩展专有数据,同样,相关表中的字段名称是有意义的。

但是,在 EE 中,当您添加自定义字段时,它会在表中将它们创建为 field_id_x,并将一个条目放入另一个表中,告诉您这些是什么。

现在,从 UI 的角度来看,这一切都很好,可以为管理员提供权力,但在编写任何代码时,这都是一件令人头疼的事情。

好的,有模板标签,但我倾向于不使用它们,而且它们在数据库查询中也不好用。

有没有一种简单的方法来查询成员表,然后将 m_field_1 称为它的真正名称——在我的例子中是“addresslonglat”。

我正在处理的表中有几十个这样的字段,目前我用固定名称来处理它们,例如“m_field_id_73”,这意味着什么。

有人知道将数据及其字段名称轻松组合在一起的简单方法吗?

理想情况下,我想做以下事情:

$result = $this->EE->db->query("select * from exp_member_data where member_id = 123")->row();
echo $result->addresslonglat;

而不是

echo $result->m_field_id_73;

【问题讨论】:

    标签: expressionengine custom-fields


    【解决方案1】:

    这应该适合你:

    <?php    
    $fields = $data = array();
    $member_fields = $this->EE->db->query("SELECT m_field_id, m_field_name FROM exp_member_fields");
    foreach($member_fields->result_array() as $row)
    {
        $fields['m_field_id_'.$row['m_field_id']] = $row['m_field_name'];
    }
    
    $member_data = $this->EE->db->query("SELECT * FROM exp_member_data WHERE member_id = 1")->row();
    foreach($member_data as $k => $v)
    {       
        if($k != 'member_id')
        {
            $data[$fields[$k]] = $v;
        }
    }
    print_r($data);
    ?>
    

    然后只需使用您的新 $data 数组。

    【讨论】:

    • 完美,我是否可以扩展 EE 的 DB 类以覆盖 row() 和 result() 数组方法来自动执行此操作,有没有办法确保我的 DB 版本会被加载以扩展EE 版本是 CodeIgniter 版本的扩展?
    • 我不会那样做,因为这段代码是专门针对成员字段的......似乎有点矫枉过正。如果您在附加组件中使用它(希望是这种情况),并且希望保持干燥,只需将字段映射包装到一个函数中并将结果传递给它(例如,$data = $this-> _map_member_fields($member_data);)
    • 谢谢 Derek,我只是希望他们在 EE 中从开发人员的角度更清楚地了解如何处理自定义字段。我不认为 EE 的数据库管理得特别好,因为它只是添加列而不是正确管理表。
    猜你喜欢
    • 2013-11-22
    • 2012-03-14
    • 1970-01-01
    • 1970-01-01
    • 2019-11-04
    • 1970-01-01
    • 1970-01-01
    • 2019-01-01
    • 2022-01-12
    相关资源
    最近更新 更多