Posted February 28, 20196 yr Не понимаю как изменить customfields. $curl = curl_init($api_url . 'api' . $api_endpoint . '?key=' . $api_key); curl_setopt_array($curl, array( CURLOPT_RETURNTRANSFER => TRUE, CURLOPT_POST => 1, )); curl_setopt($curl, CURLOPT_POSTFIELDS, $new_fields); $response = curl_exec($curl); Как $new_fields объявить, чтобы записать текст в hpp reload harward id?
February 28, 20196 yr Что-то я не вижу api у customFieilds. Именно у дополнительных полей апи нету, изменить можно только значение дополнительного поле пользователя.
February 28, 20196 yr Это дополнительное поле пользователя. Его можно изменить. Настройки дополнительных полей через апи не меняются. Я не очень разбираюсь что на скриншоте но на сколько понимаю это именно настройки
February 28, 20196 yr Author 1 минуту назад, siv1987 сказал: Это дополнительное поле пользователя. Его можно изменить. Настройки дополнительных полей через апи не меняются. Я не очень разбираюсь что на скриншоте но на сколько понимаю это именно настройки ты вообще не шаришь
February 28, 20196 yr Возможно. Я просто недавно установил ипб. Возможно в РЕСТ апи и не шарю, но не трудно открыть сорсы апи и посмотреть какие методы там поддерживаются, тем более для такого профи как вы это как два пальца обсосать.
February 28, 20196 yr Author curl_setopt($curl, CURLOPT_POSTFIELDS, "customFields[2]=$hwid"); vse pasiba
February 28, 20196 yr С самого начала конечно же спросить нормально "как изменить значение дополнительного поле у пользователя с %id" нельзя было, вместо этого приводить непонятный скриншот, а потом огрызаться на то, что не умеем правильно задавать вопросы. Учитесь спрашивать что вам нужно, а не показывать на тупом наборе данных еще и с скриншота "как сделать?". Откуда появилась это дебильная мода в программирование все приводить скриншотами. Школота их сует куда только можно, вместо того чтобы задать по человечески вопрос. Видимо такой нынче прогресс.
February 28, 20196 yr //Функция получения данных пользователя function member_get($url, $api, $member_id, $apiKey) { $curl = curl_init($url . $api . $member_id); //'api/core/members/' curl_setopt_array($curl, array( CURLOPT_RETURNTRANSFER => TRUE, //CURLOPT_HTTPGET => TRUE, CURLOPT_HTTPAUTH => CURLAUTH_BASIC, CURLOPT_USERPWD => "{$apiKey}:", )); $curl_exec = curl_exec($curl); curl_close($curl); return $curl_exec; } //Функция изменения function member_put($url, $api, $member_id, $apiKey, $parameter, $value) { $curl = curl_init($url . $api . $member_id); //'api/core/members/' curl_setopt_array($curl, array( CURLOPT_RETURNTRANSFER => TRUE, CURLOPT_POST => true, CURLOPT_HTTPAUTH => CURLAUTH_BASIC, CURLOPT_USERPWD => "{$apiKey}:", CURLOPT_POSTFIELDS => $parameter . "=" . $value )); $curl_exec = curl_exec($curl); curl_close($curl); return $curl_exec; } $api = "api/core/members/"; $url = "http://mysite.ru"; $member_id = 25 $apiKey = "blablabla"; $customFields = member_get($url, $api, $member_id, $apiKey); //все данные пользователя в виде объекта $customFieldsArr = json_decode($customFields, TRUE); //все данные пользователя в виде массива member_put($url, $api, $member_id, $apiKey, "customFields[8]", 20); //поле с индексом 8 присваивается значение 20
February 28, 20196 yr aplayer Очень не удобно когда когда имена полей отдельно от значений. А если там несколько значений? Почему массивом не отправить. <?php function request($api, $post=false){ global $url, $apiKey; $curl = curl_init($url . $api); curl_setopt_array($curl, array( CURLOPT_RETURNTRANSFER => TRUE, CURLOPT_HTTPAUTH => CURLAUTH_BASIC, CURLOPT_USERPWD => "{$apiKey}:", )); if($post){ curl_setopt_array($curl, array( CURLOPT_POST => true, CURLOPT_POSTFIELDS => $parameter . "=" . $value, )); } $curl_exec = curl_exec($curl); curl_close($curl); return $curl_exec; } function member_get($member_id) { return request('api/core/members/'.$member_id); } function member_put($member_id, $fields) { return request('api/core/members/'.$member_id, $fields); } $url = "http://mysite.ru"; $apiKey = "blablabla"; $member_id = 5; member_get($member_id); //все данные пользователя в виде json member_put($member_id, array('customFields' => array(8 => 20))); //поле с индексом 8 присваивается значение 20 код писался на коленке. CURLOPT_POSTFIELDS => $post, вместо CURLOPT_POSTFIELDS => $parameter . "=" . $value,
February 28, 20196 yr Еще добавлю комент к своим функциям Надо проверять их значение на false. Оно должно возвратиться если сервер с rest api недоступен. у меня скрипт выполнялся на одном сервере с форумом. Тоесть я считал, что если сервер с rest api недоступен то и скрипт не сможет выполниться. Сервер-то один. Однако оказалось что скрипт вполне может выполняться когда rest api недоступен. Не знаю как это происходит, но факт подтвержденный. siv1987 я бы не стал выкладывать код слепленный на коленке. Информации по этим полям в интернете нет вообще. Я целый месяц ломал голову, как до этих полей добраться. Оно же имеет многоуровневую структуру. Однако ларчик просто открывался - надо в пост запросе указывать только последний элемент ветки. Если ваш код не правильный, то вы введете в заблуждение много людей. Поиск в гугле по запросу customFieilds скорее всего будет выдавать эту страницу потому-что больше нигде эта проблема не обсудается. А так да. Можно любым образом оптимизировать код. мои функции сделаны с расчетом на одиночные удары.
February 28, 20196 yr aplayer а я бы не стал выкладывать такой унылый код, ведь примеров в интернете очень мало. Скрипт слепленный на коленке по вашему примеру, и все там правильно. Просто есть небольшие синтаксические ошибки которые я заметил глазом после отправки сообщения. Для обычного программиста это не составит никаких проблем. Вы, я надеюсь, не предполагаете как ТС что я не знаком с REST api, и в частности с структурой IPS занимаясь разработкой модификаций еще с древней версии 2.3?.. Какая многоуровневая структура у обычного массива? Какой информации в интернете нет вообще? Достаточно открыть документацию, хотя бы на том же сркиншоте у ТСа есть вся необхадмая информация, из которой он не понял что customFieilds это обычный массив в виде ид поле => значение. Вы считаете это сложной проблемой? Не понятно описание, можно открыть первоисточник - код апи, и наглядно посмотреть как работает функция, а конкретно эта переменная. Неужели это вы искали целый месяц? Полно, ребята, перестаньте изучать php по видеоурокам Попова, а если что-то не понятно, лучше спросить у компетентных людей чем искать это месяцами. Я понимаю что вы хотели "*****" своими знаниями в предметной области, пологая что если вы ней копались целый месяц то это нечто сложное и известное только вам одному, но имею ничего против, но тут затронуто моя профессиональная честь. Я же потеряю уважение среди корешей разработчиков, надеюсь я еще не зашкварился здесь.
February 28, 20196 yr 48 минут назад, siv1987 сказал: а если что-то не понятно, лучше спросить у компетентных людей чем искать это месяцами. Как правило такие люди всегда в работе. siv1987 не обращай внимания, тем, кто пользуется твоими плагинами, ты уже давно уже всё доказал, в интернете хейт это норма, тебе ли не знать. PS: планируешь обновить плагин авторизации через ВК для 4.4?
February 28, 20196 yr 2 минуты назад, Respected сказал: PS: планируешь обновить плагин авторизации через ВК для 4.4? Не поверишь, только сегодня подумал о том, что было бы неплохо обновить плагин авторизации ВК. Но так вроде уже имеется такой, а у меня есть обязательство перед сообществом по другому плагину который обещал что доделаю, оставил обновление на потом. Но конечно в планах он есть, хотя наверное только ради старых пользователей. 12 минут назад, Respected сказал: Как правило такие люди всегда в работе. Но подсказать советом всегда смогут. Да и пару строчек кода накинут если требуется.
February 28, 20196 yr 2 часа назад, siv1987 сказал: Какая многоуровневая структура у обычного массива? Какой информации в интернете нет вообще? Достаточно открыть документацию, хотя бы на том же сркиншоте у ТСа есть вся необхадмая информация, из которой он не понял что customFieilds это обычный массив в виде ид поле => значение. Я тоже по началу въехать не мог. Когда мы делаем гет-запрос нам приходит json типа customfields ___2 _____fields __________2 _______________name _______________value __________3 _______________name _______________value Это массив элементами которого являются массивы. Не знаю как у вас называется эта структура, я называю его многоуровневый массив, может ошибаюсь. А вот в пост-запросе нам надо отправить одномерный массив customfields[id]=value Тоесть мы должны отправить не ту структуру данных которая к нам пришла. При отсутсвивии документации, точнее от ее скудности, понимание ситуации приходит не сразу. Что там написано в документации? Array of custom fields as fieldId => fieldValue. Ну и как мне из этой строки понять, что массив должен иметь имя customfields и никак иначе?
February 28, 20196 yr Документация в этом случае является первоисточником, не стоит полагаться на ответе от другого запроса. Там есть названия полей для запроса и описание их структуры. Все очень просто, name это string, group это id, а customFields это массив fieldId => fieldValue . Есть сомнения в описание типа запроса, всегда можно посмотреть в коде, при одном взгляде все становится предельно ясно. foreach ( \IPS\Request::i()->customFields as $k => $v ) { $profileFields[ 'field_' . $k ] = $v; } В случае "get" запроса возвращаются все дополнительные поля пользователя сгруппированные по ид группе полей. Да, в виде многомерного массива. Понятно что такая структура для запроса на запись лишняя. Такой ответ подходит только для GET запроса.
March 1, 20196 yr 18 часов назад, siv1987 сказал: непонятный скриншот Для понимания ситуации. На этом скриншоте часть данных полученных при get-запросе к rest api: api/core/members/$member_id Скорее всего это страница исходного кода браузера на которой выведен результат print_r или var_dump функции member_get();, которая приведена выше.
March 2, 20196 yr zxcoikio rest api предназначены для удаленного управления форумом. Для локальных плагинов эти данные хранятся в таблице core_pfields_content
March 2, 20196 yr В 01.03.2019 в 09:08, aplayer сказал: Для понимания ситуации Спасибо кэп, ты как всегда вовремя нас выручаешь.
March 2, 20196 yr siv1987 слушай. Ты случайно не знаешь как поменять customFieilds через локальные api, которые не REST? Через вызов типа \IPS\Member::i()->Set_customFields($member_id, customFields[id], $field_value) или что-то в этом роде? А то мне кажется, что обращаться через curl к rest api на локальном сервере это моветон. Как пользоваться \IPS\Db я уже разобрался, но вдруг получится так, что я буду трясти базу в то время как есть готовые api для решения моих задач.
March 2, 20196 yr Форум использует запрос к бд для дополнительных полей. Отдельных методов нету. $profileFields = ['member_id' => %member_id, 'field_%id' => 'new_value']; \IPS\Db::i()->replace( 'core_pfields_content', $profileFields ); При большем желании можно написать плагин который добавит новый метод к \IPS\Member для обновления дополнительных полей.
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.