نقد و بررسی مکانها به شما امکان میدهد نقد و بررسیها و امتیازدهیهای کاربران را به صفحات وب خود اضافه کنید. این صفحه تفاوتهای بین نقد و بررسی مکانها را آنطور که در کلاس Place (جدید) و PlacesService (قدیمی) استفاده میشود، توضیح میدهد و چند قطعه کد برای مقایسه ارائه میدهد.
-
PlacesService(قدیمی) آرایهای از نمونههایPlaceReviewبه عنوان بخشی از شیءPlaceResultبرای هر درخواستgetDetails()برمیگرداند، البته اگر فیلدreviewsدر درخواست مشخص شده باشد. -
Place(جدید) در صورتی که فیلدreviewsدر درخواست مشخص شده باشد، آرایهای از نمونههایReviewرا به عنوان بخشی از درخواستfetchFields()برمیگرداند.
جدول زیر برخی از تفاوتهای اصلی در استفاده از بررسی مکان بین کلاس Place و PlacesService را فهرست میکند:
PlacesService (قدیمی) | Place (جدید) |
|---|---|
رابط PlaceReview | کلاس Review |
متدها برای مدیریت شیء نتایج و پاسخ google.maps.places.PlacesServiceStatus نیاز به استفاده از یک تابع فراخوانی (callback) دارند. | از Promiseها استفاده میکند و به صورت ناهمگام کار میکند. |
متدها نیاز به بررسی PlacesServiceStatus دارند. | نیازی به بررسی وضعیت نیست، میتواند از مدیریت خطای استاندارد استفاده کند. اطلاعات بیشتر . |
PlacesService باید با استفاده از یک نقشه یا یک عنصر div نمونهسازی شود. | Place میتوان در هر جایی که لازم باشد، بدون ارجاع به نقشه یا عنصر صفحه، نمونهسازی کرد. |
PlaceReview دادههای انتساب را برای نقد با استفاده از فیلدهای author_name ، author_url و profile_photo_url برمیگرداند. | Review با استفاده از یک نمونه AuthorAttribution ، دادههای انتساب را برای نقد و بررسی برمیگرداند. |
مقایسه کد
این بخش، کد مربوط به متدهای جستجوی متن را مقایسه میکند تا تفاوتهای بین بررسیهای مکان در PlacesService قدیمی و کلاس Place جدیدتر را نشان دهد.
خدمات اماکن (قدیمی)
قطعه کد زیر، تابع getDetails() برای درخواست جزئیات مکان شامل نظرات فراخوانی میکند و اولین نتیجه نظر را در یک پنجره اطلاعات نمایش میدهد.
const request = {
placeId: "ChIJpyiwa4Zw44kRBQSGWKv4wgA", // Faneuil Hall Marketplace, Boston, MA
fields: ["name", "formatted_address", "geometry", "reviews"],
};
const service = new google.maps.places.PlacesService(map);
service.getDetails(request, (place, status) => {
if (
status === google.maps.places.PlacesServiceStatus.OK &&
place &&
place.geometry &&
place.geometry.location
) {
// If there are any reviews display the first one.
if (place.reviews && place.reviews.length > 0) {
// Get info for the first review.
let reviewRating = place.reviews[0].rating;
let reviewText = place.reviews[0].text;
let authorName = place.reviews[0].author_name;
let authorUri = place.reviews[0].author_url;
// Format the review using HTML.
contentString =`
<div id="title"><b>${place.name}</b></div>
<div id="address">${place.formatted_address}</div>
<a href="${authorUri}" target="_blank">Author: ${authorName}</a>
<div id="rating">Rating: ${reviewRating} stars</div>
<div id="rating"><p>Review: ${reviewText}</p></div>`;
} else {
contentString = `No reviews were found for ${place.name}`;
}
const infowindow = new google.maps.InfoWindow({
content: contentString,
ariaLabel: place.displayName,
});
// Add a marker.
const marker = new google.maps.Marker({
map,
position: place.geometry.location,
});
// Show the info window.
infowindow.open({
anchor: marker,
map,
});
}
});
کلاس مکان (جدید)
قطعه کد زیر، متد fetchFields() را برای درخواست جزئیات مکان، شامل نظرات، فراخوانی میکند و اولین نتیجه نظر را در یک پنجره اطلاعات نمایش میدهد.
// Use a place ID to create a new Place instance.
const place = new google.maps.places.Place({
id: "ChIJpyiwa4Zw44kRBQSGWKv4wgA", // Faneuil Hall Marketplace, Boston, MA
});
// Call fetchFields, passing 'reviews' and other needed fields.
await place.fetchFields({
fields: ["displayName", "formattedAddress", "location", "reviews"],
});
// If there are any reviews display the first one.
if (place.reviews && place.reviews.length > 0) {
// Get info for the first review.
let reviewRating = place.reviews[0].rating;
let reviewText = place.reviews[0].text;
let authorName = place.reviews[0].authorAttribution.displayName;
let authorUri = place.reviews[0].authorAttribution.uri;
// Format the review using HTML.
contentString =`
<div id="title"><b>${place.displayName}</b></div>
<div id="address">${place.formattedAddress}</div>
<a href="${authorUri}" target="_blank">Author: ${authorName}</a>
<div id="rating">Rating: ${reviewRating} stars</div>
<div id="rating"><p>Review: ${reviewText}</p></div>`;
} else {
contentString = `No reviews were found for ${place.displayName}`;
}
// Create an infowindow to display the review.
infoWindow = new google.maps.InfoWindow({
content: contentString,
ariaLabel: place.displayName,
});
// Add a marker.
const marker = new google.maps.marker.AdvancedMarkerElement({
map,
position: place.location,
title: place.displayName,
});
// Show the info window.
infoWindow.open({
anchor: marker,
map,
});