2012-03-29 2 views
0

Я создаю каталог исполнителя и использую Pixel & Плакат Tonic's для управления «поклонниками» каждого участника.Добавить поле Playa через Safecracker

В профиле каждого пользователя есть поле выбора в многоэкранном режиме, в котором отображаются все члены, которые пользователь «раздувал» (аналогично «like» на Facebook).

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

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

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

Спасибо!

ти

ответ

1

Вам нужно добавить пользовательский плагин, чтобы сделать это, так что вы можете выполнить заказ 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) 
    ); 
} 
+0

Простой и блестящий! Спасибо! –

4

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

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

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

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

Смежные вопросы