Queries Kütüphanesi
Queries KütüphanesiCSV'den toplu Bricks gönderisi oluştur

CSV'den toplu Bricks gönderisi oluştur

Bu query, bir CSV dosyasından veri içe aktararak birden fazla Bricks gönderisini toplu olarak oluşturur.

Bu query için Bricks uzantısının etkinleştirilmiş olması gerekir.

Gönderileri oluşturmak için şunları sağlamanız gerekir:

  • İçeriğinde ve Bricks verilerinde değişkenler barındıran, çoğaltılacak bir Bricks şablonu
  • Yeni gönderilerin oluşturulacağı, Bricks etkin bir özel gönderi türü
  • Dinamik içerikli bir CSV dosyasının URL'si

CSV dosyası, sütun adları olarak değişken adlarına, değerler olarak ise her değişkenin değerlerine sahip olacaktır. Query, tek tek Bricks gönderileri oluşturmak için CSV dosyasındaki her satırı işleyecektir.

Örneğin, bu CSV dosyası 3 gönderi oluşturacaktır:

pageTitle,heroTitle,heroDesc,heroButtonText1,heroButtonLink1,heroButtonText2,heroButtonLink2
"Welcome to Our Site","<h2>Welcome</h2>","<p>This is the main content.</p>","A brief description","https://mysite.com/pricing","Another description","https://mysite.com/more"
"About Us","<h2>About</h2>","<p>Learn more about our company.</p>","Company information","https://mysite.com/about","We are humans","https://mysite.com/humans"
"Contact","<h2>Contact</h2>","<p>Get in touch with us.</p>","Contact details","https://mysite.com/contact","Subscribe to our newsletter","https://mysite.com/newsletter"

Sayfa içeriği ve Bricks verileri, {...} ile çevrelenmiş bu değişkenleri içerecektir.

Yukarıdaki CSV'ye karşılık olarak, kaynak Bricks gönderimiz şu değişkenleri kullanabilir:

  • {pageTitle}
  • {heroTitle}
  • {heroDesc}
  • {heroButtonText1}
  • {heroButtonLink1}
  • {heroButtonText2}
  • {heroButtonLink2}

Örneğin, sayfa başlığı "{pageTitle}" ya da "Welcome to {pageTitle}" vb. olabilir.

Benzer şekilde, bir Bricks heading öğesinin text özelliği "{heroTitle}" ya da "Welcome to {heroTitle}" vb. olarak ayarlanabilir.

Ve bir button öğesinin Link => URL özelliği "{heroButtonLink1}" ya da "{heroButtonLink2}" olarak ayarlanacaktır.

Query şu değişkenleri gerektirir:

  • $url: CSV dosyasının URL'si (başlıklarla birlikte)
  • $templateId: Yeni gönderileri oluşturmak için kullanılacak Bricks şablonu (CPT bricks_template)
  • $customPostType: Yeni gönderilerin oluşturulacağı, Bricks etkin özel gönderi türü
  • $status: Oluşturulan gönderilerin durumu (varsayılan: "draft")
query InitializeDynamicVariables(
  $customPostType: CustomPostEnumString!
)
  @configureWarningsOnExportingDuplicateVariable(enabled: false)
{
  emptyBool: _echo(value: false)
    @export(as: "bricksIsEnabledForCustomPostType")
    @export(as: "hasTemplate")
    @remove
 
  emptyList: _echo(value: [])
    @export(as: "adaptedBricksDataTextElementTextsList")
    @export(as: "adaptedBricksDataLinkElementLinksList")
    @export(as: "newCustomPostIds")
    @export(as: "customPostInputs")
    @remove
 
  useWhichPageBuilderWithCustomPostType(customPostType: $customPostType)
  bricksIsEnabledForCustomPostType: _equals(
    value1: $__useWhichPageBuilderWithCustomPostType
    value2: "bricks"
  )
    @export(as: "bricksIsEnabledForCustomPostType")
}
 
query GetBricksCustomPostAndExportData($templateId: ID!)
  @depends(on: "InitializeDynamicVariables")
  @include(if: $bricksIsEnabledForCustomPostType)
{
  bricksTemplate: customPost(by: { id: $templateId }, customPostTypes: "bricks_template", status: any) {
    # Fields to be duplicated
    author @export(as: "authorID") {
      id
    }
    rawContent @export(as: "rawContent")
    rawExcerpt @export(as: "excerpt")
    featuredImage @export(as: "featuredImageID") {
      id
    }
    rawTitle @export(as: "title")
 
    metaKeys(filter: { exclude: [
      "_thumbnail_id",
      "_edit_last",
      "_edit_lock",
      "_pingme",
      "_encloseme",
      "_trackbackme",
      "enclosure",
      "_wp_trash_meta_status",
      "_wp_trash_meta_time",
      "_wp_desired_post_slug",
      "_wp_old_slug",
      "_wp_old_date",
    ] })
    meta(keys: $__metaKeys) 
      @export(as: "meta")
 
    bricksDataTextElements: bricksData(filterBy: {include: [
      "heading",
      "text",
      "text-basic",
      "button",
      "dropdown",
    ]})
      @underEachArrayItem(
        affectDirectivesUnderPos: [1, 3]
      )
        @underJSONObjectProperty(by: { key: "id" })
          @export(as: "bricksDataTextElementIDs")
        @underJSONObjectProperty(
          by: { path: "settings.text" }
          failIfNonExistingKeyOrPath: false
        )
          @export(as: "bricksDataTextElementTexts")
 
    bricksDataLinkElements: bricksData(filterBy: {include: [
      "text-link",
      "button",
    ]})
      @underEachArrayItem(
        affectDirectivesUnderPos: [1, 3]
      )
        @underJSONObjectProperty(by: { key: "id" })
          @export(as: "bricksDataLinkElementIDs")
        @underJSONObjectProperty(
          by: { path: "settings.link.url" }
          failIfNonExistingKeyOrPath: false
        )
          @export(as: "bricksDataLinkElementLinks")
  }
 
  hasTemplate: _notNull(value: $__bricksTemplate)
    @export(as: "hasTemplate")
}
 
query GetAndFormatDataFromCSV(
  $url: URL!
)
  @depends(on: "GetBricksCustomPostAndExportData")
  @include(if: $bricksIsEnabledForCustomPostType)
  @include(if: $hasTemplate)
{
  _sendHTTPRequest(input: {
    url: $url,
    method: GET
  }) {
    body
    csv: _strParseCSV(
      string: $__body
    )
      @export(as: "csvPostEntries")
      @underArrayItem(
        index: 0
        passOnwardsAs: "csvPostEntry"
        affectDirectivesUnderPos: [1, 2]
      )
        @applyField(
          name: "_objectProperties",
          arguments: {
            object: $csvPostEntry,
          },
          passOnwardsAs: "csvKeys"
        )
        @exportFrom(
          scopedDynamicVariable: $csvKeys,
          as: "csvKeys"
        )      
  }
}
 
query GenerateVariablePlaceholderNames
  @depends(on: "GetAndFormatDataFromCSV")
  @include(if: $bricksIsEnabledForCustomPostType)
  @include(if: $hasTemplate)
{
    csvKeyPlaceholderNames: _echo(value: $csvKeys)
      @underEachArrayItem(passValueOnwardsAs: "entryKey")
        @applyField(
          name: "_sprintf",
          arguments: {
            string: "{%s}",
            values: [$entryKey],
          },
          setResultInResponse: true
        )
      @export(as: "csvKeyPlaceholderNames")
}
 
query GenerateCustomPostInputs(
  $customPostType: CustomPostEnumString!
  $status: CustomPostStatusEnum! = draft
)
  @depends(on: "GenerateVariablePlaceholderNames")
  @include(if: $bricksIsEnabledForCustomPostType)
  @include(if: $hasTemplate)
{
  customPostInputs: _echo(value: $csvPostEntries)
    @underEachArrayItem(
      passValueOnwardsAs: "csvPostEntry"
      affectDirectivesUnderPos: [1, 2, 3, 4, 5, 6, 7, 8]
    )
      @applyField(
        name: "_objectValues",
        arguments: {
          object: $csvPostEntry,
        },
        passOnwardsAs: "replaceTo"
      )
      @applyField(
        name: "_strReplaceMultiple",
        arguments: {
          search: $csvKeyPlaceholderNames,
          replaceWith: $replaceTo,
          in: $title
        },
        passOnwardsAs: "adaptedTitle"
      )
      @applyField(
        name: "_strReplaceMultiple",
        arguments: {
          search: $csvKeyPlaceholderNames,
          replaceWith: $replaceTo,
          in: $excerpt
        },
        passOnwardsAs: "adaptedExcerpt"
      )
      # Already create (and export) the inputs for the mutation
      @applyField(
        name: "_echo",
        arguments: {
          value: {
            status: $status,
            customPostType: $customPostType,
            authorBy: {
              id: $authorID
            },
            title: $adaptedTitle,
            excerpt: $adaptedExcerpt
            contentAs: {
              html: $rawContent
            },
            featuredImageBy: {
              id: $featuredImageID
            },
            meta: $meta
          }
        },
        setResultInResponse: true
      )
      # Already export the inputs to update the Bricks data
      @applyField(
        name: "_strArrayReplaceMultiple",
        arguments: {
          search: $csvKeyPlaceholderNames,
          replaceWith: $replaceTo,
          in: $bricksDataTextElementTexts
        },
        passOnwardsAs: "adaptedBricksDataTextElementTextsList"
      )
      @exportFrom(
        scopedDynamicVariable: $adaptedBricksDataTextElementTextsList,
        as: "adaptedBricksDataTextElementTextsList"
      )
      @applyField(
        name: "_strArrayReplaceMultiple",
        arguments: {
          search: $csvKeyPlaceholderNames,
          replaceWith: $replaceTo,
          in: $bricksDataLinkElementLinks
        },
        passOnwardsAs: "adaptedBricksDataLinkElementLinksList"
      )
      @exportFrom(
        scopedDynamicVariable: $adaptedBricksDataLinkElementLinksList,
        as: "adaptedBricksDataLinkElementLinksList"
      )
    @export(as: "customPostInputs")
}
 
query AdaptBricksDataElementsFormat
  @depends(on: "GenerateCustomPostInputs")
  @include(if: $bricksIsEnabledForCustomPostType)
  @include(if: $hasTemplate)
{
  adaptedBricksDataTextElementsList: _echo(value: $adaptedBricksDataTextElementTextsList)
    @underEachArrayItem
      @underEachArrayItem(
        passIndexOnwardsAs: "index"
        passValueOnwardsAs: "bricksDataTextElementText"
        affectDirectivesUnderPos: [1, 2]
      )
        @applyField(
          name: "_arrayItem"
          arguments: {
            array: $bricksDataTextElementIDs,
            position: $index
          }
          passOnwardsAs: "bricksElementID"
        )
        @applyField(
          name: "_echo"
          arguments: {
            value: {
              id: $bricksElementID,
              settings: {
                text: $bricksDataTextElementText
              }
            }
          },
          setResultInResponse: true
        )
      @export(as: "adaptedBricksDataTextElementsList")
 
  adaptedBricksDataLinkElementsList: _echo(value: $adaptedBricksDataLinkElementLinksList)
    @underEachArrayItem
      @underEachArrayItem(
        passIndexOnwardsAs: "index"
        passValueOnwardsAs: "bricksDataLinkElementLink"
        affectDirectivesUnderPos: [1, 2]
      )
        @applyField(
          name: "_arrayItem"
          arguments: {
            array: $bricksDataLinkElementIDs,
            position: $index
          }
          passOnwardsAs: "bricksElementID"
        )
        @applyField(
          name: "_echo"
          arguments: {
            value: {
              id: $bricksElementID,
              settings: {
                link: {
                  url: $bricksDataLinkElementLink
                }
              }
            }
          },
          setResultInResponse: true
        )
      @export(as: "adaptedBricksDataLinkElementsList")
}
 
mutation CreatePostsFromCSVEntries
  @depends(on: "AdaptBricksDataElementsFormat")
  @include(if: $bricksIsEnabledForCustomPostType)
  @include(if: $hasTemplate)
{
  createCustomPosts(inputs: $customPostInputs) {
    status
    errors {
      __typename
      ...on ErrorPayload {
        message
      }
    }
    customPost {
      # Fields not to be duplicated
      id
        @export(
          as: "newCustomPostIds",
          type: LIST,
        )
      slug
      date
      status
 
      # Fields to be duplicated
      customPostType
      author {
        id
      }
      rawContent
      excerpt
      featuredImage {
        id
      }
      title
      
      metaKeys
      meta(keys: $__metaKeys)
      bricksData
    }
  }
}
 
query CreateUpdateBricksDataInputs
  @depends(on: "CreatePostsFromCSVEntries")
  @include(if: $bricksIsEnabledForCustomPostType)
  @include(if: $hasTemplate)
{
  bricksMergeCustomPostTextElementDataItemInputs: _echo(value: $newCustomPostIds)
    @underEachArrayItem(
      passIndexOnwardsAs: "index"
      passValueOnwardsAs: "newCustomPostId"
      affectDirectivesUnderPos: [1, 2]
    )
      @applyField(
        name: "_arrayItem"
        arguments: {
          array: $adaptedBricksDataTextElementsList,
          position: $index
        }
        passOnwardsAs: "adaptedBricksDataTextElements"
      )
      @applyField(
        name: "_echo",
        arguments: {
          value: {
            customPostID: $newCustomPostId
            elements: $adaptedBricksDataTextElements
          }
        },
        setResultInResponse: true
      )
    @export(as: "bricksMergeCustomPostTextElementDataItemInputs")
 
  bricksMergeCustomPostLinkElementDataItemInputs: _echo(value: $newCustomPostIds)
    @underEachArrayItem(
      passIndexOnwardsAs: "index"
      passValueOnwardsAs: "newCustomPostId"
      affectDirectivesUnderPos: [1, 2]
    )
      @applyField(
        name: "_arrayItem"
        arguments: {
          array: $adaptedBricksDataLinkElementsList,
          position: $index
        }
        passOnwardsAs: "adaptedBricksDataLinkElements"
      )
      @applyField(
        name: "_echo",
        arguments: {
          value: {
            customPostID: $newCustomPostId
            elements: $adaptedBricksDataLinkElements
          }
        },
        setResultInResponse: true
      )
    @export(as: "bricksMergeCustomPostLinkElementDataItemInputs")
 
  bricksRegenerateCustomPostElementIDSetInputs: _echo(value: $newCustomPostIds)
    @underEachArrayItem(passValueOnwardsAs: "newCustomPostId")
      @applyField(
        name: "_echo",
        arguments: {
          value: {
            customPostID: $newCustomPostId
          }
        },
        setResultInResponse: true
      )
    @export(as: "bricksRegenerateCustomPostElementIDSetInputs")
}
 
query AdaptBricksDataInputs
  @depends(on: "CreateUpdateBricksDataInputs")
  @include(if: $bricksIsEnabledForCustomPostType)
  @include(if: $hasTemplate)
{
  bricksMergeCustomPostElementDataItemInputs: _arrayMerge(arrays: [
    $bricksMergeCustomPostTextElementDataItemInputs,
    $bricksMergeCustomPostLinkElementDataItemInputs
  ])
    @export(as: "bricksMergeCustomPostElementDataItemInputs")
}
 
mutation UpdateAndRegenerateBricksData
  @depends(on: "AdaptBricksDataInputs")
  @include(if: $bricksIsEnabledForCustomPostType)
  @include(if: $hasTemplate)
{
  bricksMergeCustomPostElementDataItems(inputs: $bricksMergeCustomPostElementDataItemInputs) {
    status
    errors {
      __typename
      ...on ErrorPayload {
        message
      }
    }
    customPost {
      __typename
      ...on CustomPost {
        id
        bricksData
      }
    }
  }
 
  bricksRegenerateCustomPostElementIDSets(inputs: $bricksRegenerateCustomPostElementIDSetInputs) {
    status
    errors {
      __typename
      ...on ErrorPayload {
        message
      }
    }
    customPost {
      __typename
      ...on CustomPost {
        id
        bricksData
      }
    }
  }
}