Добавить поле Playa через Safecracker - PullRequest
0 голосов
/ 29 марта 2012

Я создаю каталог артистов и использую Playa от Pixel & Tonic, чтобы управлять «фанатами» каждого участника.

В профиле каждого пользователя есть поле Playa с несколькими вариантами выбора, в котором отображаются все участники, которых пользователь "раздул" (аналогично "Like" в Facebook).

То, что я хотел бы сделать, это иметь "ссылку", которая на самом деле представляет собой безопасное взломщик, который добавит имя участника в поле Playa пользователя.

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

Какой лучший способ добиться этого?

Спасибо!

ти

Ответы [ 2 ]

4 голосов
/ 02 апреля 2012

Вы также можете использовать Safecracker и создать скрытое поле для Playa:

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

Вы должны использовать здесь имя поля Playa (не field_id).

Затем вы можете отправить форму Safecracker в ajax.

1 голос
/ 29 марта 2012

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

Не уверен, если вы знакомы с написанием плагинов, но вы можете начать, создав его через pkg.io , а затем добавив эту функцию в полученный файл. Затем вы можете создать ссылку на шаблон, где вы разместите свой новый тег, и, возможно, передать идентификаторы для участника и нового поклонника через сегменты:

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

Эта функция делает (возможно, ошибочным) предположение, что вы храните своих участников в каналах (я полагаю, что так, потому что вы используете поле Playa), и что в ваших шаблонах есть доступ к entry_id обоих член и фанат. Если нет, вам может потребоваться выполнить еще несколько запросов, чтобы найти entry_id каждого из них. Он также называет ваше поле Playa field_id_10 ... вам нужно заменить 10 на правильный field_id вашего поля Playa.

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)
    );
}
...