Как я могу хранить флажки в плагине профиля Joomla? - PullRequest
1 голос
/ 08 декабря 2011

Я создал плагин Joomla 1.7 для добавления некоторых пользовательских полей в профиль пользователя.В качестве основы я начал с плагина профиля, который включен в качестве примера в Joomla.

Я добавил поле флажков, как показано ниже:

<?xml version="1.0" encoding="utf-8"?>
<form>
    <fields name="profile">
        <fieldset name="profile" label="PLG_USER_WISPROFILE_SLIDER_LABEL">
            <field name="speltak1" type="checkboxes" label="PLG_USER_WISPROFILE_SPELTAK_LABEL"
                description="PLG_USER_WISPROFILE_SPELTAK_DESC">
                <option value="Bevers">PLG_USER_WISPROFILE_OPTION_BEVERS</option>
                <option value="Welpen Ochtend Horde">PLG_USER_WISPROFILE_OPTION_WELPENOCHTEND
                </option>
                <option value="Welpen Middag Horde">PLG_USER_WISPROFILE_OPTION_WELPENMIDDAG
                </option>
                <option value="Scouts Verkenners">PLG_USER_WISPROFILE_OPTION_SCOUTSVERKENNERS
                </option>
                <option value="Scouts Verkensters">PLG_USER_WISPROFILE_OPTION_SCOUTSVERKENSTERS
                </option>
                <option value="Explorers">PLG_USER_WISPROFILE_OPTION_EXPLORERS</option>
                <option value="Klimstam">PLG_USER_WISPROFILE_OPTION_KLIMSTAM</option>
            </field>
        </fieldset>
    </fields>
</form>

Это позволит правильно добавить поле в форму при регистрации и редактировании профиля пользователя.Но когда я пытаюсь сохранить профиль, в базе данных ничего не сохраняется.Поле флажков преобразуется в массив в переменной $ data.Но пример кода не может сохранить это в базе данных.Кто-нибудь знает, как это сделать?

Ответы [ 2 ]

1 голос
/ 26 сентября 2015

Причина, по которой он не сохраняется, заключается в том, что вы передаете элемент массива в запрос sql.Вам нужно изменить форму этого.Либо путем сериализации данных или превращения их в JSON или что-то.На этом этапе он будет сохранен в базе данных.

function onUserAfterSave($data, $isNew, $result, $error){
    $userId    = JArrayHelper::getValue($data, 'id', 0, 'int');

    if ($userId && $result && isset($data['gw2atpprofile']) && (count($data['gw2atpprofile']))){
        try {
            $db = &JFactory::getDbo();
            $db->setQuery('DELETE FROM #__user_profiles WHERE user_id = '.$userId.' AND profile_key LIKE \'gw2atpprofile.%\'');
            if (!$db->query()) {
                throw new Exception($db->getErrorMsg());
            }

            $tuples = array();
            $order    = 1;
            foreach ($data['gw2atpprofile'] as $k => $v) {
                if (is_array($v)){
                    $v = serialize($v);
                }
                $tuples[] = '('.$userId.', '.$db->quote('gw2atpprofile.'.$k).', '.$db->quote($v).', '.$order++.')';
            }

            $db->setQuery('INSERT INTO #__user_profiles VALUES '.implode(', ', $tuples));
            if (!$db->query()) {
                throw new Exception($db->getErrorMsg());
            }
        } catch (JException $e) {
            $this->_subject->setError($e->getMessage());
            return false;
        }
    }

    return true;
}

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

1 голос
/ 09 декабря 2011

Похоже, вы правильно перехватываете создание формы и добавление своих полей в форму.

Вы не упоминаете какой-либо код / ​​функции, которые вы используете для захвата формы при ее сохранении.Возможно, вы ожидаете, что Joomla волшебным образом получит ваши новые полевые данные и сохранит их?Если так, то, к сожалению, это не сработает.Вам нужно проделать небольшую дополнительную работу.

Посмотрите на эту страницу из документации и обратите внимание на часть 'function onUserAfterSave'http://docs.joomla.org/Creating_a_profile_plugin

...