This site uses cookies for analytics, personalized content and ads. By continuing to browse this site, you agree to this use.
Author Image Friday, 22 June 2018

Thẻ gọi dữ liệu tiện ích bài đăng Blog1


Tiện ích bài đăng Blog1 có thể coi là bộ xương sống của template, nó chứa toàn bộ dữ liệu về bài đăng, ngày giờ, tiêu đề, nhận xét,...Vậy bạn đã biết được bao nhiêu % về nó, hãy cùng tôi tìm hiểu trong bài viết này

Tại thời điểm viết bài, blogger đã cho ra mắt 3 layout version template và 2 version widget. Theo đó Layout v1 và v2 sẽ sử dụng widget Blog1 v1, và Layout v3 sẽ sử dụng widget Blog1 v2. Đây là cách phân biệt widget v1 và v2


2 version sẽ có cấu trúc khác nhau và các thẻ gọi dữ liệu cũng khác nhau

Cấu trúc json của chúng như sau

Blog widget v1

"data": {
  "widget": {
    "type": "Blog",
    "version": 1
  },
  "title": string,
  "description": string,
  "numPosts": number,
  "languageCode": string,
  "mobile": boolean,
  "postLabelsLabel": string,
  "timestampLabel": string,
  "authorLabel": string,
  "commentLabel": string,
  "commentLabelPlural": string,
  "postLocationLabel": string,
  "reactionsLabel": string,
  "showTimestamp": boolean,
  "showLocation": boolean,
  "showAuthor": boolean,
  "showPostLabels": boolean,
  "showReactions": boolean,
  "showDummy": boolean,
  "showPlusOne": boolean,
  "showMobileShare": boolean,
  "showEmailButton": boolean,
  "showBlogThisButton": boolean,
  "showTwitterButton": boolean,
  "showFacebookButton": boolean,
  "showPinterestButton": boolean,
  "olderPageUrl": URL,
  "olderPageTitle": string,
  "newerPageUrl": URL,
  "newerPageTitle": string,
  "mobileLinkUrl": string,
  "mobileLinkMsg": string,
  "desktopLinkUrl": string,
  "desktopLinkMsg": string,
  "homeMsg": string,
  "navMessage": string,
  "postCommentMsg": string,
  "blogCommentMessage": string,
  "blogTeamBlogMessage": string,
  "feedLinksMsg": string,
  "commentPostedByMsg": string,
  "shareMsg": string,
  "shareToTwitterMsg": string,
  "shareToFacebookMsg": string,
  "shareToPinterestMsg": string,
  "blogThisMsg": string,
  "emailThisMsg": string,
  "emailPostMsg": string,
  "editPostMsg": string,
  "deleteCommentMsg": string,
  "adCode": string,
  "cmtIframeInitialHeight": string,
  "showCmtPopup": boolean,
  "feedLinks": [{
    "url": string,
    "name": string,
    "feedType": string,
    "mimeType": string
  }],
  "posts": [{
    "id": string,
    "title": string,
    "body": string,
    "snippet": string,
    "longSnippet": string,
    "url": URL,
    "link": string,
    "thumbnailUrl": string,
    "firstImageUrl": string,
    "date": string,
    "dateHeader": string,
    "timestamp": string,
    "timestampISO8601": string,
    "lastUpdatedISO8601": string,
    "author": string,
    "authorUrl": string,
    "authorProfileUrl": string,
    "authorAboutMe": string,
    "authorPhoto": {
      "url": string,
      "width": number,
      "height": number
    },
    "hasJumpLink": boolean,
    "jumpText": string,
    "isFirstPost": boolean,
    "isDateStart": boolean,
    "adminClass": string,
    "editUrl": string,
    "allowComments": boolean,
    "allowNewComments": boolean,
    "noNewCommentsText": string,
    "numComments": number,
    "commentLabelFull": string,
    "addCommentUrl": URL,
    "addCommentOnclick": string,
    "commentPagingRequired": boolean,
    "hasOlderLinks": boolean,
    "oldLinkClass": string,
    "oldestLinkUrl": URL,
    "oldestLinkText": string,
    "olderLinkUrl": URL,
    "olderLinkText": string,
    "hasNewerLinks": boolean,
    "newLinkClass": string,
    "newerLinkUrl": URL,
    "newerLinkText": string,
    "newestLinkUrl": URL,
    "newestLinkText": string,
    "commentRangeText": string,
    "commentFormIframeSrc": string,
    "embedCommentForm": boolean,
    "showThreadedComments": boolean,
    "commentSrc": string,
    "commentFeed": URL,
    "commentJso": string,
    "commentHtml": string,
    "commentMsgs": string,
    "commentConfig": string,
    "avatarIndentClass": string,
    "includeAd": boolean,
    "allowIframeComments": boolean,
    "iframeCommentSrc": string,
    "viewType": string,
    "commentSource": number,
    "dummyTag": string,
    "googlePlusShareTag": string,
    "emailPostUrl": string,
    "sharePostUrl": string,
    "reactionsUrl": string,
    "cmtfpIframe": string,
    "appRpcRelayPath": string,
    "location": {
      "mapsUrl": string,
      "name": string
    },
    "labels": [{
      "name": string,
      "url": URL,
      "isLast": boolean
    }],
    "feedLinks": [{
      "url": string,
      "name": string,
      "feedType": string
      "mimeType": string
    }],
    "comments": [{
      "id": string,
      "inReplyTo": string,
      "cmtBodyIdPostfix": string,
      "url": string,
      "body": string,
      "timestamp": string,
      "timestampValue": number,
      "timestampAbs": number,
      "author": string,
      "authorUrl": string,
      "authorPhoto": {
        "url": string,
        "width": number,
        "height": number
      },
      "favicon": string,
      "authorAvatarSrc": string,
      "authorAvatarImage": string,
      "anchorName": string,
      "deleteUrl": string,
      "isDeleted": boolean,
      "adminClass": string,
      "authorClass": string
    }],
    "enclosures": [{
      "url": string,
      "mimeType": string
    }]
  }]
}
Blog widget v2

"data": {
  "widget": {
    "type": "Blog",
    "version": 2
  },
  "title": string,
  "description": string,
  "languageCode": string,
  "olderPageUrl": URL,
  "newerPageUrl": URL,
  "navMessage": string,
  "adCode": string,
  "adClientId": string,
  "cmtIframeInitialHeight": string,
  "showCmtPopup": boolean,
  "messages": {
    "blogComment": string
  },
  "feedLinks": [{
    "url": string,
    "name": string,
    "feedType": string,
    "mimeType": string
  }],
  "posts": [{
    "id": string,
    "title": string,
    "body": string,
    "snippets": {
      "long": string,
      "short": string
    },
    "url": URL,
    "link": string,
    "thumbnailUrl": string,
    "featuredImage": image,
    "date": date,
    "lastUpdated": date,
    "author": {
      "name": string,
      "profileUrl": string,
      "aboutMe": string,
      "authorPhoto": {
        "image": image,
        "width": number,
        "height": number
      },
    },
    "hasJumpLink": boolean,
    "adminClass": string,
    "postAuthorClass": string,
    "allowComments": boolean,
    "allowNewComments": boolean,
    "noNewCommentsText": string,
    "numberOfComments": number,
    "commentsUrl": URL,
    "commentsUrlOnclick": string,
    "commentPagingRequired": boolean,
    "hasOlderLinks": boolean,
    "oldLinkClass": string,
    "oldestLinkUrl": URL,
    "olderLinkUrl": URL,
    "hasNewerLinks": boolean,
    "newLinkClass": string,
    "newerLinkUrl": URL,
    "newestLinkUrl": URL,
    "commentRangeText": string,
    "commentFormIframeSrc": string,
    "embedCommentForm": boolean,
    "showThreadedComments": boolean,
    "commentSrc": string,
    "commentFeed": string,
    "commentJso": string,
    "commentHtml": string,
    "commentMsgs": string,
    "commentConfig": string,
    "avatarIndentClass": string,
    "includeAd": boolean,
    "adNumber": number,
    "allowIframeComments": boolean,
    "iframeCommentSrc": string,
    "viewType": string,
    "commentSource": number,
    "emailPostUrl": string,
    "shareUrl": string,
    "reactionsUrl": URL,
    "cmtfpIframe": string,
    "appRpcRelayPath": string,
    "location": {
      "mapsUrl": string,
      "name": string
    },
    "labels": [{
      "name": string,
      "url": URL,
    }],
    "feedLinks": [{
      "url": string,
      "name": string,
      "feedType": string,
      "mimeType": string
    }],
    "comments": [{
      "id": string,
      "inReplyTo": string,
      "cmtBodyIdPostfix": string,
      "url": string,
      "body": string,
      "timestamp": string,
      "timestampValue": number,
      "timestampAbs": number,
      "author": string,
      "authorUrl": string,
      "authorUserType": string,
      "authorPhoto": {
        "url": string,
        "width": number,
        "height": number
      },
      "authorAvatarSrc": string,
      "authorAvatarImage": string,
      "anchorName": string,
      "deleteUrl": string,
      "isDeleted": boolean,
      "adminClass": string,
    }],
    "enclosures": [{
      "url": string,
      "mimeType": string
    }]
  }]
}

Từ cấu trúc json ta sẽ lấy được dữ liệu như sau

Blog widget v1

<b:widget id='Blog1' title='' type='Blog' version='1'>
  <b:includable id='main'>
    <data:title/>
    <data:description/>
    <data:numPosts/>
    <data:languageCode/>
    <data:mobile/>
    <data:postLabelsLabel/>
    <data:timestampLabel/>
    <data:authorLabel/>
    <data:commentLabel/>
    <data:commentLabelPlural/>
    <data:postLocationLabel/>
    <data:reactionsLabel/>
    <data:showTimestamp/>
    <data:showLocation/>
    <data:showAuthor/>
    <data:showPostLabels/>
    <data:showReactions/>
    <data:showDummy/>
    <data:showPlusOne/>
    <data:showMobileShare/>
    <data:showEmailButton/>
    <data:showBlogThisButton/>
    <data:showTwitterButton/>
    <data:showFacebookButton/>
    <data:showPinterestButton/>
    <data:olderPageUrl/>
    <data:olderPageTitle/>
    <data:newerPageUrl/>
    <data:newerPageTitle/>
    <data:mobileLinkUrl/>
    <data:mobileLinkMsg/>
    <data:desktopLinkUrl/>
    <data:desktopLinkMsg/>
    <data:homeMsg/>
    <data:navMessage/>
    <data:postCommentMsg/>
    <data:blogCommentMessage/>
    <data:blogTeamBlogMessage/>
    <data:feedLinksMsg/>
    <data:commentPostedByMsg/>
    <data:shareMsg/>
    <data:shareToTwitterMsg/>
    <data:shareToFacebookMsg/>
    <data:shareToPinterestMsg/>
    <data:blogThisMsg/>
    <data:emailThisMsg/>
    <data:emailPostMsg/>
    <data:editPostMsg/>
    <data:deleteCommentMsg/>
    <data:adCode/>
    <data:cmtIframeInitialHeight/>
    <data:showCmtPopup/>
    <b:loop values='data:feedLinks' var='feedLink'>
      <data:feedLink.url/>
      <data:feedLink.name/>
      <data:feedLink.feedType/>
      <data:feedLink.mimeType/>
    </b:loop>
    <b:loop values='data:posts' var='post'>
      <data:post.id/>
      <data:post.title/>
      <data:post.body/>
      <data:post.snippet/>
      <data:post.longSnippet/>
      <data:post.url/>
      <data:post.link/>
      <data:post.thumbnailUrl/>
      <data:post.firstImageUrl/>
      <data:post.date/>
      <data:post.dateHeader/>
      <data:post.timestamp/>
      <data:post.timestampISO8601/>
      <data:post.lastUpdatedISO8601/>
      <data:post.author/>
      <data:post.authorUrl/>
      <data:post.authorProfileUrl/>
      <data:post.authorAboutMe/>
      <data:post.authorPhoto.url/>
      <data:post.authorPhoto.width/>
      <data:post.authorPhoto.height/>
      <data:post.hasJumpLink/>
      <data:post.jumpText/>
      <data:post.isFirstPost/>
      <data:post.isDateStart/>
      <data:post.adminClass/>
      <data:post.editUrl/>
      <data:post.allowComments/>
      <data:post.allowNewComments/>
      <data:post.noNewCommentsText/>
      <data:post.numComments/>
      <data:post.commentLabelFull/>
      <data:post.addCommentUrl/>
      <data:post.addCommentOnclick/>
      <data:post.commentPagingRequired/>
      <data:post.hasOlderLinks/>
      <data:post.oldLinkClass/>
      <data:post.oldestLinkUrl/>
      <data:post.oldestLinkText/>
      <data:post.olderLinkUrl/>
      <data:post.olderLinkText/>
      <data:post.hasNewerLinks/>
      <data:post.newLinkClass/>
      <data:post.newerLinkUrl/>
      <data:post.newerLinkText/>
      <data:post.newestLinkUrl/>
      <data:post.newestLinkText/>
      <data:post.commentRangeText/>
      <data:post.commentFormIframeSrc/>
      <data:post.embedCommentForm/>
      <data:post.showThreadedComments/>
      <data:post.commentSrc/>
      <data:post.commentFeed/>
      <data:post.commentJso/>
      <data:post.commentHtml/>
      <data:post.commentMsgs/>
      <data:post.commentConfig/>
      <data:post.avatarIndentClass/>
      <data:post.includeAd/>
      <data:post.allowIframeComments/>
      <data:post.iframeCommentSrc/>
      <data:post.viewType/>
      <data:post.commentSource/>
      <data:post.dummyTag/>
      <data:post.googlePlusShareTag/>
      <data:post.emailPostUrl/>
      <data:post.sharePostUrl/>
      <data:post.reactionsUrl/>
      <data:post.cmtfpIframe/>
      <data:post.appRpcRelayPath/>
      <data:post.location.mapsUrl/>
      <data:post.location.name/>
      <b:loop values='data:labels' var='label'>
        <data:label.name/>
        <data:label.url/>
        <data:label.isLast/>
      </b:loop>
      <b:loop values='data:feedLinks' var='feedLink'>
        <data:feedLink.url/>
        <data:feedLink.name/>
        <data:feedLink.feedType/>
        <data:feedLink.mimeType/>
      </b:loop>
      <b:loop values='data:comments' var='comment'>
        <data:comment.id/>
        <data:comment.inReplyTo/>
        <data:comment.cmtBodyIdPostfix/>
        <data:comment.url/>
        <data:comment.body/>
        <data:comment.timestamp/>
        <data:comment.timestampValue/>
        <data:comment.timestampAbs/>
        <data:comment.author/>
        <data:comment.authorUrl/>
        <data:comment.authorPhoto.url/>
        <data:comment.authorPhoto.width/>
        <data:comment.authorPhoto.height/>
        <data:comment.favicon/>
        <data:comment.authorAvatarSrc/>
        <data:comment.authorAvatarImage/>
        <data:comment.anchorName/>
        <data:comment.deleteUrl/>
        <data:comment.isDeleted/>
        <data:comment.adminClass/>
        <data:comment.authorClass/>
      </b:loop>
      <b:loop values='data:enclosures' var='enclosure'>
        <data:enclosure.url/>
        <data:enclosure.mimeType/>
      </b:loop>
    </b:loop>
  </b:includable>
</b:widget>
Blog widget v2

<b:widget id='Blog1' title='' type='Blog' version='2'>
  <b:includable id='main'>
    <data:title/>
    <data:description/>
    <data:languageCode/>
    <data:olderPageUrl/>
    <data:newerPageUrl/>
    <data:navMessage/>
    <data:adCode/>
    <data:adClientId/>
    <data:cmtIframeInitialHeight/>
    <data:showCmtPopup/>
    <data:messages.blogComment/>
    <b:loop values='data:feedLinks' var='feedLink'>
      <data:feedLink.url/>
      <data:feedLink.name/>
      <data:feedLink.feedType/>
      <data:feedLink.mimeType/>
    </b:loop>
    <b:loop values='data:posts' var='post'>
      <data:post.id/>
      <data:post.title/>
      <data:post.body/>
      <data:post.snippets.short/>
      <data:post.snippets.long/>
      <data:post.url/>
      <data:post.link/>
      <data:post.thumbnailUrl/>
      <data:post.featuredImage/>
      <data:post.date/>
      <data:post.lastUpdated/>
      <data:post.author.name/>
      <data:post.author.profileUrl/>
      <data:post.author.aboutMe/>
      <data:post.author.authorPhoto.image/>
      <data:post.author.authorPhoto.width/>
      <data:post.author.authorPhoto.height/>
      <data:post.hasJumpLink/>
      <data:post.adminClass/>
      <data:post.postAuthorClass/>
      <data:post.allowComments/>
      <data:post.allowNewComments/>
      <data:post.noNewCommentsText/>
      <data:post.numberOfComments/>
      <data:post.commentsUrl/>
      <data:post.commentsUrlOnclick/>
      <data:post.commentPagingRequired/>
      <data:post.hasOlderLinks/>
      <data:post.oldLinkClass/>
      <data:post.oldestLinkUrl/>
      <data:post.olderLinkUrl/>
      <data:post.hasNewerLinks/>
      <data:post.newLinkClass/>
      <data:post.newerLinkUrl/>
      <data:post.newestLinkUrl/>
      <data:post.commentRangeText/>
      <data:post.commentFormIframeSrc/>
      <data:post.embedCommentForm/>
      <data:post.showThreadedComments/>
      <data:post.commentSrc/>
      <data:post.commentFeed/>
      <data:post.commentJso/>
      <data:post.commentHtml/>
      <data:post.commentMsgs/>
      <data:post.commentConfig/>
      <data:post.avatarIndentClass/>
      <data:post.includeAd/>
      <data:post.adNumber/>
      <data:post.allowIframeComments/>
      <data:post.iframeCommentSrc/>
      <data:post.viewType/>
      <data:post.commentSource/>
      <data:post.emailPostUrl/>
      <data:post.shareUrl/>
      <data:post.reactionsUrl/>
      <data:post.cmtfpIframe/>
      <data:post.appRpcRelayPath/>
      <data:post.location.mapsUrl/>
      <data:post.location.name/>
      <b:loop values='data:labels' var='label'>
        <data:label.name/>
        <data:label.url/>
      </b:loop>
      <b:loop values='data:feedLinks' var='feedLink'>
        <data:feedLink.url/>
        <data:feedLink.name/>
        <data:feedLink.feedType/>
        <data:feedLink.mimeType/>
      </b:loop>
      <b:loop values='data:comments' var='comment'>
        <data:comment.id/>
        <data:comment.inReplyTo/>
        <data:comment.cmtBodyIdPostfix/>
        <data:comment.url/>
        <data:comment.body/>
        <data:comment.timestamp/>
        <data:comment.timestampValue/>
        <data:comment.timestampAbs/>
        <data:comment.author/>
        <data:comment.authorUrl/>
        <data:comment.authorUserType/>
        <data:comment.authorPhoto.url/>
        <data:comment.authorPhoto.width/>
        <data:comment.authorPhoto.height/>
        <data:comment.authorAvatarSrc/>
        <data:comment.authorAvatarImage/>
        <data:comment.anchorName/>
        <data:comment.deleteUrl/>
        <data:comment.isDeleted/>
        <data:comment.adminClass/>
      </b:loop>
      <b:loop values='data:enclosures' var='enclosure'>
        <data:enclosure.url/>
        <data:enclosure.mimeType/>
      </b:loop>
    </b:loop>
  </b:includable>
</b:widget>

Ví dụ lấy dữ liệu: tôi muốn lấy tên và avatar của tác giả thì sẽ gọi code như sau

+ Với v1

<b:includable id='post' var='post'>
...
    <!-- Lấy avatar -->
    <img expr:src='data:post.authorPhoto.url'/> 
    <!-- Lấy tên tác giả -->
    <data:post.author/>
...
</b:includable>

+ Với v2

<b:includable id='post' var='post'>
...
    <!-- Lấy avatar -->
    <img expr:src='data:post.author.authorPhoto.image'/> 
    <!-- Lấy tên tác giả -->
    <data:post.author.name/>
...
</b:includable>

Cả 2 đều cho ta cùng 1 kết quả nhưng có thể thấy thẻ gọi dữ liệu khác rất nhiều, vì thế cậu nào mà muốn nâng v1 lên v2 mà lơ mơ phần này thì không kham nổi đâu :))

Như vậy tôi qua bài viết này tôi đã cung cấp cho các bạn tất cả các thẻ gọi dữ liệu trong tiện ích Blog1 với cả 2 version, nắm chắc được chúng bạn có thể làm được rất nhiều thứ hay ho đó

Good Luck !
Comments:
Bạn được tự do bày tỏ quan điểm nhưng nghiêm cấm spam
  • Chèn ảnh theo mẫu [img]link[/img]
  • Chèn video Youtube theo mẫu [youtube]link[/youtube]
  • Chèn code theo mẫu [pre]code[/pre]. Lưu ý: mã hóa code trước khi bình luận

  • Please wait while i am loading Facebook SDK js