Posted 28 февраля, 20195 yr comment_155709 Не понимаю как изменить 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?
28 февраля, 20195 yr comment_155712 Что-то я не вижу api у customFieilds. Именно у дополнительных полей апи нету, изменить можно только значение дополнительного поле пользователя.
28 февраля, 20195 yr Author comment_155713 Только что, siv1987 сказал: Что-то я не вижу api у customFieilds.
28 февраля, 20195 yr comment_155714 Это дополнительное поле пользователя. Его можно изменить. Настройки дополнительных полей через апи не меняются. Я не очень разбираюсь что на скриншоте но на сколько понимаю это именно настройки
28 февраля, 20195 yr Author comment_155715 1 минуту назад, siv1987 сказал: Это дополнительное поле пользователя. Его можно изменить. Настройки дополнительных полей через апи не меняются. Я не очень разбираюсь что на скриншоте но на сколько понимаю это именно настройки ты вообще не шаришь
28 февраля, 20195 yr comment_155717 Возможно. Я просто недавно установил ипб. Возможно в РЕСТ апи и не шарю, но не трудно открыть сорсы апи и посмотреть какие методы там поддерживаются, тем более для такого профи как вы это как два пальца обсосать.
28 февраля, 20195 yr Author comment_155721 curl_setopt($curl, CURLOPT_POSTFIELDS, "customFields[2]=$hwid"); vse pasiba
28 февраля, 20195 yr comment_155723 С самого начала конечно же спросить нормально "как изменить значение дополнительного поле у пользователя с %id" нельзя было, вместо этого приводить непонятный скриншот, а потом огрызаться на то, что не умеем правильно задавать вопросы. Учитесь спрашивать что вам нужно, а не показывать на тупом наборе данных еще и с скриншота "как сделать?". Откуда появилась это дебильная мода в программирование все приводить скриншотами. Школота их сует куда только можно, вместо того чтобы задать по человечески вопрос. Видимо такой нынче прогресс.
28 февраля, 20195 yr comment_155725 //Функция получения данных пользователя 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
28 февраля, 20195 yr comment_155727 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,
28 февраля, 20195 yr comment_155729 Еще добавлю комент к своим функциям Надо проверять их значение на false. Оно должно возвратиться если сервер с rest api недоступен. у меня скрипт выполнялся на одном сервере с форумом. Тоесть я считал, что если сервер с rest api недоступен то и скрипт не сможет выполниться. Сервер-то один. Однако оказалось что скрипт вполне может выполняться когда rest api недоступен. Не знаю как это происходит, но факт подтвержденный. siv1987 я бы не стал выкладывать код слепленный на коленке. Информации по этим полям в интернете нет вообще. Я целый месяц ломал голову, как до этих полей добраться. Оно же имеет многоуровневую структуру. Однако ларчик просто открывался - надо в пост запросе указывать только последний элемент ветки. Если ваш код не правильный, то вы введете в заблуждение много людей. Поиск в гугле по запросу customFieilds скорее всего будет выдавать эту страницу потому-что больше нигде эта проблема не обсудается. А так да. Можно любым образом оптимизировать код. мои функции сделаны с расчетом на одиночные удары.
28 февраля, 20195 yr comment_155736 aplayer а я бы не стал выкладывать такой унылый код, ведь примеров в интернете очень мало. Скрипт слепленный на коленке по вашему примеру, и все там правильно. Просто есть небольшие синтаксические ошибки которые я заметил глазом после отправки сообщения. Для обычного программиста это не составит никаких проблем. Вы, я надеюсь, не предполагаете как ТС что я не знаком с REST api, и в частности с структурой IPS занимаясь разработкой модификаций еще с древней версии 2.3?.. Какая многоуровневая структура у обычного массива? Какой информации в интернете нет вообще? Достаточно открыть документацию, хотя бы на том же сркиншоте у ТСа есть вся необхадмая информация, из которой он не понял что customFieilds это обычный массив в виде ид поле => значение. Вы считаете это сложной проблемой? Не понятно описание, можно открыть первоисточник - код апи, и наглядно посмотреть как работает функция, а конкретно эта переменная. Неужели это вы искали целый месяц? Полно, ребята, перестаньте изучать php по видеоурокам Попова, а если что-то не понятно, лучше спросить у компетентных людей чем искать это месяцами. Я понимаю что вы хотели "*****" своими знаниями в предметной области, пологая что если вы ней копались целый месяц то это нечто сложное и известное только вам одному, но имею ничего против, но тут затронуто моя профессиональная честь. Я же потеряю уважение среди корешей разработчиков, надеюсь я еще не зашкварился здесь.
28 февраля, 20195 yr comment_155737 48 минут назад, siv1987 сказал: а если что-то не понятно, лучше спросить у компетентных людей чем искать это месяцами. Как правило такие люди всегда в работе. siv1987 не обращай внимания, тем, кто пользуется твоими плагинами, ты уже давно уже всё доказал, в интернете хейт это норма, тебе ли не знать. PS: планируешь обновить плагин авторизации через ВК для 4.4?
28 февраля, 20195 yr comment_155739 2 минуты назад, Respected сказал: PS: планируешь обновить плагин авторизации через ВК для 4.4? Не поверишь, только сегодня подумал о том, что было бы неплохо обновить плагин авторизации ВК. Но так вроде уже имеется такой, а у меня есть обязательство перед сообществом по другому плагину который обещал что доделаю, оставил обновление на потом. Но конечно в планах он есть, хотя наверное только ради старых пользователей. 12 минут назад, Respected сказал: Как правило такие люди всегда в работе. Но подсказать советом всегда смогут. Да и пару строчек кода накинут если требуется.
28 февраля, 20195 yr comment_155748 2 часа назад, siv1987 сказал: Какая многоуровневая структура у обычного массива? Какой информации в интернете нет вообще? Достаточно открыть документацию, хотя бы на том же сркиншоте у ТСа есть вся необхадмая информация, из которой он не понял что customFieilds это обычный массив в виде ид поле => значение. Я тоже по началу въехать не мог. Когда мы делаем гет-запрос нам приходит json типа customfields ___2 _____fields __________2 _______________name _______________value __________3 _______________name _______________value Это массив элементами которого являются массивы. Не знаю как у вас называется эта структура, я называю его многоуровневый массив, может ошибаюсь. А вот в пост-запросе нам надо отправить одномерный массив customfields[id]=value Тоесть мы должны отправить не ту структуру данных которая к нам пришла. При отсутсвивии документации, точнее от ее скудности, понимание ситуации приходит не сразу. Что там написано в документации? Array of custom fields as fieldId => fieldValue. Ну и как мне из этой строки понять, что массив должен иметь имя customfields и никак иначе?
28 февраля, 20195 yr comment_155751 Документация в этом случае является первоисточником, не стоит полагаться на ответе от другого запроса. Там есть названия полей для запроса и описание их структуры. Все очень просто, name это string, group это id, а customFields это массив fieldId => fieldValue . Есть сомнения в описание типа запроса, всегда можно посмотреть в коде, при одном взгляде все становится предельно ясно. foreach ( \IPS\Request::i()->customFields as $k => $v ) { $profileFields[ 'field_' . $k ] = $v; } В случае "get" запроса возвращаются все дополнительные поля пользователя сгруппированные по ид группе полей. Да, в виде многомерного массива. Понятно что такая структура для запроса на запись лишняя. Такой ответ подходит только для GET запроса.
1 марта, 20195 yr comment_155761 18 часов назад, siv1987 сказал: непонятный скриншот Для понимания ситуации. На этом скриншоте часть данных полученных при get-запросе к rest api: api/core/members/$member_id Скорее всего это страница исходного кода браузера на которой выведен результат print_r или var_dump функции member_get();, которая приведена выше.
2 марта, 20195 yr comment_155801 zxcoikio rest api предназначены для удаленного управления форумом. Для локальных плагинов эти данные хранятся в таблице core_pfields_content
2 марта, 20195 yr comment_155803 В 01.03.2019 в 09:08, aplayer сказал: Для понимания ситуации Спасибо кэп, ты как всегда вовремя нас выручаешь.
2 марта, 20195 yr comment_155810 siv1987 слушай. Ты случайно не знаешь как поменять customFieilds через локальные api, которые не REST? Через вызов типа \IPS\Member::i()->Set_customFields($member_id, customFields[id], $field_value) или что-то в этом роде? А то мне кажется, что обращаться через curl к rest api на локальном сервере это моветон. Как пользоваться \IPS\Db я уже разобрался, но вдруг получится так, что я буду трясти базу в то время как есть готовые api для решения моих задач.
2 марта, 20195 yr comment_155811 Форум использует запрос к бд для дополнительных полей. Отдельных методов нету. $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.