1

我正在使用 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;
4

1 回答 1

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数组。

于 2012-05-22T15:29:38.860 回答