通过Safecracker附加Playa场

时间:2012-03-29 12:55:53

标签: expressionengine safecracker

我正在构建一个艺术家目录并使用Pixel& Tonic's Playa负责管理每个成员的“粉丝”。

在每个用户的个人资料中,有一个多选的Playa字段,显示用户“粉丝”的所有成员(类似于Facebook上的“喜欢”)。

我想做的是拥有一个“链接”,实际上是一个安全提交者提交,它会将成员的名字添加到用户的Playa字段中。

基本上,它将是一个包含用户ID的隐藏字段的表单,以及正在查看其页面的成员的屏幕名称。我想将屏幕名称附加到用户现有的Playa字段条目。

实现这一目标的最佳方法是什么?

谢谢!

TY

2 个答案:

答案 0 :(得分:4)

您也可以使用Safecracker,并为Playa创建隐藏字段:

<input type="hidden" name="my_playa_field_name[selections][]" />

您必须在此处使用Playa字段名称(而不是field_id)。

然后您可以在ajax中提交您的Safecracker表单。

答案 1 :(得分:1)

您需要添加自定义插件才能执行此操作,因此您可以执行自定义SQL插入。

不确定您是否熟悉编写插件,但您可以通过pkg.io创建一个插件,然后将此函数添加到生成的文件中。然后,您可以创建指向放置新标记的模板的链接,也可以通过段传递成员和新粉丝的ID:

{exp:my_plugin:add_fan member_id="{segment_3}" fan_id="{segment_4}"}

这个函数使(或许是错误的)假设你将你的成员存储在通道中(我假设你是这样,因为你正在使用Playa字段),并且你可以在你的模板中访问两个的entry_id会员和粉丝。如果没有,您可能需要执行更多查询以查找每个查询的entry_id。它还会调用您的Playa字段field_id_10 ...您需要将10替换为您的Playa字段的正确field_id。

function add_fan()
{
    $this->EE =& get_instance();

    $member_id = $this->EE->TMPL->fetch_param('member_id');
    $fan_id = $this->EE->TMPL->fetch_param('fan_id');

    $data = array(
        'parent_entry_id' => $member_id,
        'child_entry_id' => $fan_id,
        'parent_field_id' => 10
    );

    $this->EE->db->query(
        $this->EE->db->insert_string('exp_playa_relationships', $data)
    );
}