Николай, привет! Не подскажешь, как правильно обращаться к пивкарте, да и вообще к сайтам на prisma-cms, по API с другого сайта? Если правильно понимаю, то стучаться надо сюда https://pivkarta.ru/api/ , но что обязательно нужно в параметрах указать?
Думаю, что тема будет интересна не только мне:)
Дима, привет!
Здесь все как и с чистым GraphQL. Можно гуглить, к примеру, по запросу "graphql request example". Или вот прямая ссылка на оффдоку: https://graphql.org/learn/serving-over-http/
По сути это стандартный ajax-запрос (в примеру, через fetch) с передачей GraphQL-запроса в теле ajax-запроса с получением ответа в формате json.
Спасибо! Я тогда как разберусь - сюда закину что получится)
Не за что!
ОК.
Проблема в следующем: тестово обращаюсь https://pivkarta.ru/api/?query={beers{name}}, но если вбить в адресную, то показывает http://joxi.ru/8An0bwVczjjabm
То есть в строке не прописывается api/. Не сталкивался?
И соответственно в modx пытаюсь постучать - выдает ошибку
Дима, как я говорил, надо именно POST-запросы слать. GET-это возвращает HTML самого API-интерфейса. Более того, слать надо с заголовками json. Вот рабочий пример (выполняется через MODX-console)
Обрати внимание, я в запрос прописал параметры $first и $orderBy со значениями по умолчанию. Теперь эти параметры можно передавать в запросе (см. variables).
Я еще улучшил по ходовой запрос, добавив для примера конструкцию @include(if: $withPlaces). Если передать параметр withPlaces = true, то будут получены еще и данные заведений пользователя. Если нет, то соответственно нет. А where в моем примере запрашивает только тех пользователей, которые создали хоть одно заведение.
Супер! Спасибо) Закину запросы и даю ссыль на то, что получится)
Пожалуйста!
Разбираюсь с запросами, но общее направление ясно:) Сейчас сделал вывод данных о заведении и ассортименту пива https://goldpivo.ru/testovaya.html Сколько-то страница повисит, в чуть позже уже нормальный пример будет. На эту страницу планирую вывести все заведения, в которых есть разливной Guinness под статью. На тестовой странице сниппет такой:
Сейчас ты не спрашиваешь, а хвастаешься? :)
Не, нечем: сайт завалил:)))
Восстанавливаю.
А выложил - для информации.
Стало понятно, что поля заведения "Город" не хватает: как думаешь, имеет смысл добавить простое текстовое в карточку или не стоит?
Нет, не стоит. Потому что там завязка с геоданными. Это надо будет по-другому обыгрывать. Я потом придумаю как лучше это сделать.
Дима, здесь все хорошо, только переделай where : {name: "'.$beername.'"} на ($where: BeerWhereInput) where: $where. А то ты ограничен в поиске только по имени. А так сможешь передавать "where" => ["name" => "someName"] и не только.
... А не, не все хорошо. Что-то я и не сразу заметил, что ты вставил name: "'.$beername.'" текстовой переменной. Так совсем не надо делать. Посмотри мой пример выше. Должно быть просто name: $beername, а $beername объявлена выше в перечислении параметров запроса как $beername: String, то есть твой запрос должен выглядеть так:
А с правильным определением $where вот так:
И несмотря на развернутое объяснение... понимания нет( Код выдает результат, но от "от балды", без привязки к конкретному пиву.
И сразу возник еще вопрос, как отсечь заведения, в которых пиво есть, а цены - нет? Так не прокатит: "where" => ["name" => "Guinness Draught (Гиннесс)", "price:!=" => null ] ?
Николай, привет! С выдачей таки разобрался и уперся в "тактические" вопросы. Подскажи, пожалуйста, куда копать. Код выдачи:
В выдаче есть заведения с ценами и без (price = null), и вот выбрать только те, у которых нет цены получается, а обратного не выходит (вывести только те заведения, у которых есть цена на нужное пиво). У меня такое ощущение, что решение какое-то настолько тривиальное, что о нем и не пишет никто ничего...
И встал вопрос передачи массива параметра в запрос, например передать несколько названий пива?
Дима, привет!
1. Не придумывай параметры запроса сам. Заходи в API и смотри документацию. Нет запроса типа price:!= (как в модексе), но есть price_not, price_gt и price_gte. http://joxi.ru/Vm6a53Mt43k1kr
2. Твой запрос будет примерно так выглядеть:
Но смотри, тут сразу два условия прописано, потому что выборка идет пива, но цены указаны в связке пиво-заведение, поэтому по первому условию мы находим пиво, у которых цена имеется хоть в одном заведении, но могут быть записи, где цены нет (в одном цена указана, а в другом, это же пиво, нет). Вторым условием мы получаем только те заведения, в которых указана цена для этого пива.
Если указать не places_some, а places_every, то он найдет пиво, у которого во всех заведениях указана цена, и можешь часть выборки потерять.
Николай, спасибо огромное! Вообще не туда смотрел!
Не за что!
Николай, приветствую! Прошу волшебного пинка в нужную сторону:
Не могу найти правильное решение, как 2 пива запихать в запрос.
Дима, я что-то не очень понимаю твой вопрос "Не могу найти правильное решение, как 2 пива запихать в запрос.". Что ты имеешь ввиду? По виду у тебя правильный запрос на получение двух видов пива. Где что не так?
Возвращает только по одному: по последнему
По первому пиву точно есть 3 заведения и они не пересекаются, то есть теоретически должно выдать 5 позиций.
Сам запрос:
Нет, он тебе возвращает два. http://joxi.ru/l2ZLnYdHzNaKjr
Это ты уже на уровне php выводишь только одно. Смотри свой вывод.
Точно!! Спасибо огромное) А то вывих мозга уже намечался)))
Не за что:)