Online Kimya Özel Dersi Al

ÜCRET

KONU

TARİH

Block İçin Kontrol Componentleri (Bileşenleri) Oluşturma

SiteCenneti-Gutenberg-Block-Tasarlama-Eklenti-Ekleme-Kodlama

BU DERSİN BAŞLIKLARI

WordPress Block Editörü için “sc-cards” adında bir block kodladığımız yazı dizisine devam ediyoruz. Bu yazımızda, Block Editörü blockları için kontroller eklemeyi ve blockları dinamik hale getirmeyi öğreneceğiz.

Bu yazı, WordPress Block Editörü kodlama konusunda, bundan önce yazdığımız 3 yazının devamı niteliğindedir. Dolayısıyla, bu yazıları görmediyseniz veya tekrar gözden geçirmek isterseniz aşağıdaki bağlantılara tıklayabilirsiniz.

  1. WordPress Block Editörü İçin Bir Block Oluşturma (@wordpress/create-block ile)
  2. WordPress Block Editörü İçin Oluşturulan Block Dosyalarının Anatomisi
  3. WordPress Block Editör İçin Block Ayarları Paneli Oluşturma

WordPress, Block Editörü için, bir çok kontrol bileşeni geliştirmiş ve web developerlar için kullanıma sunmuştur. Şimdi gelin bu bileşenleri ve nasıl kullanıldıklarını görelim.

“Blok beklenmedik ya da geçersiz içerik içeriyor.” Hatası

  • Block kodlarken, şu ortamlar arasında devamlı gidip geleceğiz:
    • Visual Studio Code editörü: Buraya bloğumuzun kod yapısı için geleceğiz.
    • WordPress admin panelde açılmış bir yazı ya da sayfa: Buraya bloğumuzu editör görünümü için geleceğiz.
    • WordPress sitemizin tema görünümü (ön yüz): Buraya da bloğumuzun tema görünümü için geleceğiz.
  • Bir kontrol eklerken veya başka sebeplerle, bloğun kod yapısındaki HTML yapısını değiştirmek zorunda kalacağız.
  • Bloğun HTML çıktısında meydana gelen değişiklikler, hata almamıza sebep olacaktır:
    • Yaptığımız değişikliklerin bloğumuza olan etkisini veya nasıl çalıştığını görmek için yönetim panelinde kullandığımız editör sayfasını yenilememiz gerekecek.
    • Yenileme işleminden sonra, yaptığımız değişiklikler bloğun editör görünümünde aşağıdaki hataya sebep olur:
      WordPress-Block-Editörü-Hata-mesajı
  • Bu hatadan kurtulmak ve bloğun son halini görmek için, bloğunuzu editörden kaldırın, ve tekrar ekleyin.

AlignmentMatrixControl : Matrix Hizalama Kontrolü

! Bu bileşen henüz deneme aşamasındadır (experimental). İlerleyen dönemlerde, bileşenin yapısında, bloğunuzun hata vermesine sebep olabilecek değişiklikler olabilir.

Görevi

  • Yatay ve dikey hizalama ayarı için kullanılır.

Görünümü

  • Şöyle görünür:
    WordPress-Block-Editörü-AlignmentMatrixControl-Bileşeni-

Kod Yapısı

<AlignmentMatrixControl
    id="diledigimiz-bir-id-degeri"
    label={ __( 'Yatay/Dikey hizalama', 'sc-cards' ) }
    value={ attributes.alignment }
    onChange={ ( value ) => setAttributes({ alignment: value }) }
/>
  • Yukardaki kodda:
    • id” değeri, ayar için oluşturulan HTML elemanına bir id="diledigimiz-bir-id-degeri" değeri
    • label” ise ayar için oluşturulan HTML elemanına aria-label="Yatay/Dikey hizalama" özelliği ekler.

Kodun Kullanımı

Bu bileşeni kullanmak için şu adımları takip ederiz:

  1. Önce, block.json dosyasına, bu bileşenin ayarını hatırlayacak bir değişken oluşturalım.
    • Ben bu değişkenin adını “alignment” yaptım, siz dilediğiniz bir isim verebilirsiniz.

block.json

"attributes": {
	"alignment": {
		"type": "string",
		"default": "center center"
	},
}
  • Bu değişken, bileşen üzerindeki her bir nokta için ayrı bir değer alır.
  • Bu değerler şöyledir:
    • “center center”: Ortadaki noktanın değeridir. (Varsayılan olarak ayarladık.)
    • “center right”: Orta sağ noktanın değeridir.
    • “center left”: Orta sol noktanın değeridir.
    • “top right”: Üst sağ noktanın değeridir.
    • “top center”: Üst orta noktanın değeridir.
    • “top left”: Üst sol noktanın değeridir.
    • “bottom right”: Alt sağ noktanın değeridir.
    • “bottom center”: Alt orta noktanın değeridir.
    • “bottom left”: Alt sol noktanın değeridir.
  1. Sonra, block-settings.js sayfasına bileşen için gerekli kodları ekleyelim.
    • Önce, bileşeni @wordpress/components ten import etmemiz gerekiyor.
    • Sonra bileşeni, block ayarları için oluşturduğumuz bir <PanelRow> </PanelRow> bileşeninin içine yerleştiriyoruz.
    • Bu işlemlerden sonra block-settings.js dosyası şöyle görünecektir:
  1. Yaptığımız ayar, block.json dosyasındaki attribute objesinde saklanır.
    • Buradan bu ayarı getirmek için, Edit({ attributes, setAttributes }) ve save({attributes}) fonksiyonları içerisinde iken şu değişkeni kullanırız:
      • attributes.alignment
  • Bu kontrolü eklerken ve kullanırken takip ettiğimiz adımlar, diğer bütün kontroller için de hemen hemen aynıdır.

AnglePickerControl : Açı Seçici Kontrolü

Görevi

  • Bir açı değeri oluşturup saklamamızı sağlar.

Görünümü

  • Şöyle görünür:
    WordPress-Block-Editörü-Kontrol-Ekleme-Açı

Kod Yapısı

<AnglePickerControl
    value={ attributes.angle }
    onChange={ ( value ) => setAttributes({ angle: value }) }
/>

Kodun Kullanımı

  1. Önce, block.json dosyasına, bu bileşenin ayarını hatırlayacak bir değişken oluşturalım.
    • Ben bu değişkenin adını “angle” yaptım, siz dilediğiniz bir isim verebilirsiniz.
      • Varsayılan değer olarak 0 değerini verdim. Bir değişiklik yapmazsam değeri sıfır olacak.
    • alignment” bir önceki kontrol için eklenmişti, şu an konumuzla ilgisi yoktur.
"attributes": {
	"alignment": {
		"type": "string",
		"default": ""
	},
	"angle": {
		"type": "number",
		"default": 0
	}
}
  1. Sonra, block-settings.js sayfasına bileşen için gerekli kodları ekleyelim.
    • Önce, bileşeni @wordpress/components ten import etmemiz gerekiyor.
    • Sonra bileşeni, block ayarları için oluşturduğumuz bir <PanelRow> </PanelRow> bileşeninin içine yerleştiriyoruz.
  1. Yaptığımız ayar, block.json dosyasındaki attribute objesinde angle değişkenin değeri oarak saklanır.
    • Buradan bu ayarı getirmek için, Edit({ attributes, setAttributes }) ve save({attributes}) fonksiyonları içerisinde iken şu değişkeni kullanırız:
      • attributes.angle

BaseControl : Temel Kontrol

Görevi

  • Kapsadığı kontrol veya input elemanına bir <label></label> ve bir açıklama kısmı ekler.

Görünümü

  • Bir <textarea></textarea> ile şu şekilde görünür:
    WordPress-Block-Editörü-BaseControl-Bileşeni-

Kod Yapısı

<BaseControl
    id="textarea-1"
    label={__('Text girin', 'sc-cards')}
    help={__('Burası şu işe yarar.', 'sc-cards')}
    __nextHasNoMarginBottom={ true }
    onChange = {(value) => setAttributes({textInput: value})}
>
    <textarea id="textarea-1">{attributes.textInput}</textarea>
</BaseControl>

Kodun Kullanımı

  1. block-settings.js sayfasına bileşen için gerekli kodları ekleyelim.
    • Önce, bileşeni @wordpress/components ten import etmemiz gerekiyor.
    • Sonra bileşeni, block ayarları için oluşturduğumuz bir <PanelRow> </PanelRow> bileşeninin içine yerleştiriyoruz.
    • Bu işlemlerden sonra block-settings.js dosyası şöyle görünecektir:
  • Ben bir <textarea /> elemanı için kullandım, fakat siz bu kontrolü, diğer kontroller de dahil dilediğiniz bir input elemanı ile kullanabilirsiniz.

BorderBoxControl : Kutu Kenarı Kontrolü

! Bu bileşen henüz deneme aşamasındadır (experimental). İlerleyen dönemlerde, bileşenin yapısında, bloğunuzun hata vermesine sebep olabilecek değişiklikler olabilir.

Görevi

  • Birimleri ile birlikte, bir HTML kutusunun;
    • top
    • right
    • bottom
    • left
      değerlerini ayarlamak için kullanılır.

Görünümü

  • Şöyle görünür:
    WordPress-Block-Editörü-BorderBoxControl-Bileşeni-

Kod Yapısı

<BoxControl
    values={{
        top: attributes.containerPadding.top,
        left: attributes.containerPadding.left,
        right: attributes.containerPadding.right,
        bottom: attributes.containerPadding.bottom,
    }}
    onChange={(value) => setAttributes({ containerPadding: value })}
    label={__('Blok container elemanının padding değerleri:', 'sc-cards')}
/>

Kodun Kullanımı

  1. Önce, block.json dosyasına, bu bileşenin ayarını hatırlayacak bir değişken oluşturalım.
    • Ben bu değişkenin adını “containerPadding” yaptım, siz dilediğiniz bir isim verebilirsiniz.

block.json

"attributes": {
	"containerPadding": {
		"type": "object",
		"default": {"top": "5px", "left": "10px", "right": "10px", "bottom": "5px"}
	},
}
  1. Sonra, block-settings.js sayfasına bileşen için gerekli kodları ekleyelim.
    • Önce, bileşeni @wordpress/components ten import etmemiz gerekiyor.
    • Sonra bileşeni, block ayarları için oluşturduğumuz bir <PanelRow> </PanelRow> bileşeninin içine yerleştiriyoruz.
  1. Yaptığımız ayar, block.json dosyasındaki attribute objesinde saklanır.
    • Buradan bu ayarı getirmek için, Edit({ attributes, setAttributes }) ve save({attributes}) fonksiyonları içerisinde iken şu değişkenleri kullanırız:
      • attributes.containerPadding.left,
      • attributes.containerPadding.right,
      • attributes.containerPadding.top,
      • attributes.containerPadding.bottom

BorderControl : Kenar Kontrolü

! Bu bileşen henüz deneme aşamasındadır (experimental). İlerleyen dönemlerde, bileşenin yapısında, bloğunuzun hata vermesine sebep olabilecek değişiklikler olabilir.

Görevi

  • Birimleri ile birlikte, bir HTML kutusunun;
    • border değerlerini ayarlamak için kullanılır.

Görünümü

  • Şöyle görünür:
    WordPress-Block-Editörü-BorderControl-Bileşeni-

Kod Yapısı

// Burası fonksiyonun return ifadesinden önce girilir.
const colors = [
    { name: 'Blue 20', color: '#72aee6' },
    { name: 'Black', color: '#000000' },
    { name: 'White', color: '#ffffff' },
    { name: 'Gray 20', color: '#dddddd' },
];

// Bileşenin kodu - return kısmında yer alır
<BorderControl
    colors={ colors }
    label={ __( 'Kenarlık', 'sc-cards' ) }
    onChange={(value) => setAttributes({ containerBorder: value })}
    value={ attributes.containerBorder }
/>

Kodun Kullanımı

  1. Önce, block.json dosyasına, bu bileşenin ayarını hatırlayacak bir değişken oluşturalım.
    • Ben bu değişkenin adını “containerBorder” yaptım, siz dilediğiniz bir isim verebilirsiniz.

block.json

"attributes": {
	"containerBorder": {
		"type": "object",
		"default": {}
	}
}
  1. Sonra, block-settings.js sayfasına bileşen için gerekli kodları ekleyelim.
  • Önce, bileşeni @wordpress/components ten import etmemiz gerekiyor:

block-settings.js

import {
    __experimentalBorderControl as BorderControl
} from '@wordpress/components';
  • Sonra bileşeni, block ayarları için oluşturduğumuz bir <PanelRow> </PanelRow> bileşeninin içine yerleştiriyoruz.
  1. Yaptığımız ayar, block.json dosyasındaki attribute objesinde saklanır.
    • Bu ayarı
      • Edit({ attributes, setAttributes }) veya
      • save({attributes}) fonksiyonları içerisinde iken ve CSS border özelliğinde şu şekilde kullanırız:
border: `${attributes.containerBorder.width} ${attributes.containerBorder.style} ${attributes.containerBorder.color}`

BoxControl : Kenar Kontrolü

! Bu bileşen henüz deneme aşamasındadır (experimental). İlerleyen dönemlerde, bileşenin yapısında, bloğunuzun hata vermesine sebep olabilecek değişiklikler olabilir.

Görevi

  • Birimleri ile birlikte, bir HTML kutusunun;
    • top
    • right
    • bottom
    • left
      değerlerini ayarlamak için kullanılır.

Görünümü

  • Şöyle görünür:
    WordPress-Block-Editörü-BoxControl-Bileşeni-

Kod Yapısı

// Bu kısım fonksiyonun return kısmından önce girilir.
const units = [
    { value: 'px', label: 'px', default: 0 },
    { value: '%', label: '%', default: 10 },
    { value: 'em', label: 'em', default: 0 },
]

// Fonksiyonun return kısmında verilir.
<BoxControl
    label={ __( 'Padding', 'sc-cards' ) }
    values={ attributes.containerPadding }
    onChange={(value) => setAttributes({ containerPadding: value })}
/>

Kodun Kullanımı

  1. Önce, block.json dosyasına, bu bileşenin ayarını hatırlayacak bir değişken oluşturalım.
    • Ben bu değişkenin adını “containerPadding” yaptım, siz dilediğiniz bir isim verebilirsiniz.

block.json

"attributes": {
	"containerPadding": {
		"type": "object",
		"default": {"top": "5px", "left": "10px", "right": "10px", "bottom": "5px"}
	},
}
  1. Sonra, block-settings.js sayfasına bileşen için gerekli kodları ekleyelim.
  • Önce, bileşeni @wordpress/components ten import etmemiz gerekiyor:

block-settings.js

import {
    __experimentalBoxControl as BoxControl 
} from '@wordpress/components';
  • Sonra bileşeni, block ayarları için oluşturduğumuz bir <PanelRow> </PanelRow> bileşeninin içine yerleştiriyoruz.
  1. Yaptığımız ayar, block.json dosyasındaki attribute objesinde saklanır.
    • Bu ayarı:
      • Edit({ attributes, setAttributes }) veya
      • save({attributes}) fonksiyonları içerisinde iken ve CSS padding özelliğinde şu şekilde kullanırız:
padding: `${attributes.containerPadding.top} ${attributes.containerPadding.right} ${attributes.containerPadding.bottom} ${attributes.containerPadding.left}`

Button : Buton Kontrolü

Görevi

  • Bir buton yaratmak için kullanılır.

Görünümü

  • Şöyle görünür:
    WordPress-Block-Editörü-Button-Bileşeni-

Kod Yapısı

// Bu kısım fonksiyonun return kısmından önce girilir.
const buttonClickFunction = () => {
    setAttributes({ayar: "değeri"})
}

// Fonksiyonun return kısmında verilir.
<Button
    disabled={false}

    isDestructive={false}
    variant="primary"
    onClick={() => buttonClickFunction()}
> { __( 'Kaydet', 'sc-cards' ) }
</Button>
  • variant özelliği şu değerleri alabilir:
    • “primary” : Mavi buton
    • “secondary” : Gri buton
    • “tertiary” : Text butonu
    • “link” : Butonu bir a elemanına dönüştürür.
      • Bu seçenek ile birlikte href ve target özelliği de gelir.
  • isDestructive={true} : Bu özellik buton rengini kırmızı yapar

Kodun Kullanımı

  1. Eğer tıklama bir ayar değişikliği yapacaksa önce, block.json dosyasına, bu bileşenin ayarını hatırlayacak bir değişken oluşturalım.
    • Ben bu değişkenin adını “ayar” yaptım, siz dilediğiniz bir isim verebilirsiniz.

block.json

"attributes": {
	"ayar": {
		"type": "string",
		"default": ""
	},
}
  1. Sonra, block-settings.js sayfasına bileşen için gerekli kodları ekleyelim.
  • Önce, bileşeni @wordpress/components ten import etmemiz gerekiyor:

block-settings.js

import {
    Button 
} from '@wordpress/components';
  • Sonra bileşeni, block ayarları için oluşturduğumuz bir <PanelRow> </PanelRow> bileşeninin içine yerleştiriyoruz.
  1. Buton tıklaması ile yaptığımız ayar, block.json dosyasındaki attribute objesinde saklanır.
    • Bu ayarı:
      • Edit({ attributes, setAttributes }) veya
      • save({attributes}) fonksiyonları içerisinde iken şu şekilde kullanırız:
attributes.ayar

ButtonGroup : Buton Grubu Kontrolü

Görevi

  • Bir buton grubu yaratmak için kullanılır.

Görünümü

  • Şöyle görünür:
    WordPress-Block-Editörü-ButtonGroup-Bileşeni

Kod Yapısı

<ButtonGroup>
    <Button variant="secondary">{__('%100', 'sc-cards')}</Button>
    <Button variant="secondary">{__('%75', 'sc-cards')}</Button>
    <Button variant="secondary">{__('%50', 'sc-cards')}</Button>
    <Button variant="secondary">{__('%25', 'sc-cards')}</Button>
</ButtonGroup>

Kodun Kullanımı

  1. block-settings.js sayfasına bileşen için gerekli kodları ekleyelim.
  • Önce, bileşeni @wordpress/components ten import etmemiz gerekiyor:

block-settings.js

import {
    Button,
    ButtonGroup
} from '@wordpress/components';
  • Sonra bileşenin kodunu, block ayarları için oluşturduğumuz bir <PanelRow> </PanelRow> bileşeninin içinde döndürüyoruz.

Card : Kart Kontrolü

Görevi

  • Bir kart yaratmak için kullanılır.
  • Oluşturulan kart şu alt bileşenlere sahip olabilir:
    • CardHeader
    • CardBody
    • CardDivider
    • CardMedia
    • CardFooter

Görünümü

  • Şöyle görünür:
    WordPress-Block-Editörü-Card-Bileşeni-

Kod Yapısı

<Card
    elevation="10"
>
    <CardHeader>Kart Başlığı</CardHeader>
    <CardBody>Kart gövdesi gövdesi kart gövdesi</CardBody>
    <CardDivider />
    <CardBody>Kart gövdesi gövdesi kart gövdesi</CardBody>
    <CardMedia>
        <img src="https://www.fillmurray.com/640/360" />
    </CardMedia>
    <CardFooter>Kart footer kısmı</CardFooter>
</Card>
  • elevation="10" : özelliği gölge miktarını kontrol eder.
  • Bu özelliğin yanında şunlar da eklenebilir:
    • size (string)
      • xSmall, small, medium, large değerlerinden birini alabilir.
    • isRounded (boolean)
      • Varsayılan olarak true değerini alır.
    • isBorderless (boolean)
      • Varsayılan olarak false değerini alır.

Kodun Kullanımı

  1. block-settings.js sayfasına bileşen için gerekli kodları ekleyelim.
  • Önce, bileşeni @wordpress/components ten import etmemiz gerekiyor:

block-settings.js

import {
    Card,
    CardBody,
    CardDivider,
    CardFooter,
    CardHeader,
    CardMedia,
} from '@wordpress/components';
  • Sonra bileşenin kodunu, block ayarları için oluşturduğumuz bir <PanelRow> </PanelRow> bileşeninin içinde döndürüyoruz.

CheckboxControl : Seçim Kutusu Kontrolü

Görevi

  • Bir checkbox (kontrol) kutucuğu oluşturur.

Görünümü

  • İşaretlenmeden önce:
    WordPress-Block-Editörü-CheckBoxControl-Bileşeni
  • İşaretlendikten sonra:
    WordPress-Block-Editörü-CheckBoxControl-Bileşeni-

Kod Yapısı

<CheckboxControl
    label={__('Fiyatı göster', 'sc-cards')}
    help={__('Burayı işaretlersen ürün fiyatları görünecek', 'sc-cards')}
    checked={ attributes.showPrices }
    onChange={(value) => setAttributes({ showPrices: value })}
/>
  • indeterminate = true özelliği belirsiz olmasını sağlar:
    WordPress-Block-Editörü-CheckBoxControl-Bileşeni-indeterminate

Kodun Kullanımı

  1. Öncelikle, block.json dosyasına, bu bileşenin seçimini hatırlayacak bir değişken oluşturalım.
    • Ben bu değişkenin adını “showPrices” yaptım, siz dilediğiniz bir isim verebilirsiniz.

block.json

"attributes": {
	"showPrices": {
		"type": "boolean",
		"default": false
	}
}
  1. Sonra, block-settings.js sayfasına bileşen için gerekli kodları ekleyelim.
  • Önce, bileşeni @wordpress/components ten import etmemiz gerekiyor:

block-settings.js

import {
    CheckboxControl
} from '@wordpress/components';
  • Sonra bileşenin kodunu, block ayarları için oluşturduğumuz bir <PanelRow> </PanelRow> bileşeninin içinde döndürüyoruz.
  1. Yaptığımız seçim, block.json dosyasındaki attribute objesinde saklanır.
    • Bu ayarı oradan getirip kullanmak için:
      • Edit({ attributes, setAttributes }) veya
      • save({attributes}) fonksiyonları içerisinde iken şu şekilde çağırırız:
attributes.showPrices

ColorIndicator : Renk Göstergesi Kontrolü

Görevi

  • Belirli bir rengi gösterir.

Görünümü

  • Şöyle görünür:
    WordPress-Block-Editörü-ColorIndicator-Bileşeni

Kod Yapısı

<PanelRow>
    {__('Kullanılan renk: ', 'sc-cards')}
    <ColorIndicator colorValue="yellow" />
</PanelRow>

Kodun Kullanımı

  1. block-settings.js sayfasına bileşen için gerekli kodları ekleyelim.
  • Önce, bileşeni @wordpress/components ten import etmemiz gerekiyor:

block-settings.js

import {
    ColorIndicator
} from '@wordpress/components';
  • Sonra bileşenin kodunu, block ayarları için oluşturduğumuz bir <PanelRow> </PanelRow> bileşeninin içinde döndürüyoruz.

ColorPalette : Renk Paleti Kontrolü

Görevi

  • Bir renk paleti oluşturur.
    • Dilerseniz bir “varsayılan renkler” listesi de oluşturabilirsiniz.

Görünümü

  • Şöyle görünür:
    WordPress-Block-Editörü-ColorPalette-Bileşeni

Kod Yapısı

// Burası fonksiyonun return bölümünden önce yer alır.
const colors = [
    { name: 'red', color: '#f00' },
    { name: 'white', color: '#fff' },
    { name: 'blue', color: '#00f' },
    { name: 'grey', color: '#ddd' },
    { name: 'yellow', color: 'yellow' },
    { name: 'brown', color: 'brown' },
    { name: 'orange', color: 'orange' },
    { name: 'renk 2', color: 'rgb(100,100,100)' },
];

// Fonksiyonun return bölümünde yer alır.
<ColorPalette
    colors={ colors }
    value={ attributes.selectedColor }
    onChange={ ( color ) => setAttributes( {selectedColor: color} ) }
/>

Kodun Kullanımı

  1. Öncelikle, block.json dosyasına, bu bileşenin seçimini hatırlayacak bir değişken oluşturalım.
    • Ben bu değişkenin adını “selectedColor” yaptım, siz dilediğiniz bir isim verebilirsiniz.

block.json

"attributes": {
	"selectedColor": {
		"type": "string",
		"default": ""
	}
}
  1. block-settings.js sayfasına bileşen için gerekli kodları ekleyelim.
  • Önce, bileşeni @wordpress/components ten import etmemiz gerekiyor:

block-settings.js

import {
    ColorPalette
} from '@wordpress/components';
  • Sonra bileşenin kodunu, block ayarları için oluşturduğumuz bir <PanelRow> </PanelRow> bileşeninin içinde döndürüyoruz.
  1. Yaptığımız seçim, block.json dosyasındaki attribute objesinde saklanır.
    • Bu ayarı oradan getirip kullanmak için:
      • Edit({ attributes, setAttributes }) veya
      • save({attributes}) fonksiyonları içerisinde iken şu şekilde çağırırız:
attributes.selectedColor

ColorPicker : Renk Seçici Kontrolü

Görevi

  • Bir renk seçicisi oluşturur.

Görünümü

  • Şöyle görünür:
    WordPress-Block-Editörü-ColorPicker-Bileşeni

Kod Yapısı

<ColorPicker
    color={attributes.selectedColor}
    onChange={ ( color ) => setAttributes( {selectedColor: color} ) }
    enableAlpha={true}
    defaultValue="#000"
/>

Kodun Kullanımı

  1. Öncelikle, block.json dosyasına, bu bileşenin seçimini hatırlayacak bir değişken oluşturalım.
    • Ben bu değişkenin adını “selectedColor” yaptım, siz dilediğiniz bir isim verebilirsiniz.

block.json

"attributes": {
	"selectedColor": {
		"type": "string",
		"default": ""
	}
}
  1. block-settings.js sayfasına bileşen için gerekli kodları ekleyelim.
  • Önce, bileşeni @wordpress/components ten import etmemiz gerekiyor:

block-settings.js

import {
    ColorPicker
} from '@wordpress/components';
  • Sonra bileşenin kodunu, block ayarları için oluşturduğumuz bir <PanelRow> </PanelRow> bileşeninin içinde döndürüyoruz.
  1. Yaptığımız seçim, block.json dosyasındaki attribute objesinde saklanır.
    • Bu ayarı oradan getirip kullanmak için:
      • Edit({ attributes, setAttributes }) veya
      • save({attributes}) fonksiyonları içerisinde iken şu şekilde çağırırız:
attributes.selectedColor

ComboboxControl : Süzmeli Seçim Kontrolü

Görevi

  • Çok uzun bir listeden bir seçim yapmamız gerekiyorsa, girdiğimiz harflere göre seçenekleri süzerek getirir.

Görünümü

  • İlk defa tıklandığında:
    WordPress-Block-Editörü-ComboboxControl-Bileşeni
  • Bir harf girildiğinde:
    WordPress-Block-Editörü-ComboboxControl-Bileşeni-

Kod Yapısı

// Burası fonksiyonun return bölümünden önce yer alır.
const options = [
    {
        value: 'xsmall',
        label: 'xSmall',
    },
    {
        value: 'small',
        label: 'Small',
    },
    {
        value: 'normal',
        label: 'Normal',
    },
    {
        value: 'medium',
        label: 'Medium',
    },
    {
        value: 'large',
        label: 'Large',
    },
    {
        value: 'xlarge',
        label: 'xLarge',
    },
    {
        value: 'huge',
        label: 'Huge',
    },
];
const setFilteredOptions = (options, inputValue) => {
    options.filter( ( option ) =>
        option.label
            .toLowerCase()
            .startsWith( inputValue.toLowerCase() )
    )
}

// Fonksiyonun return bölümünde yer alır.
<ComboboxControl
    label={__('Font Size', 'sc-cards')}
    value={ attributes.fontSize }
    onChange={ (value) => setAttributes({fontSize: value}) }
    options={ options }
    onFilterValueChange={(inputValue) => setFilteredOptions(options, inputValue)}
/>

Kodun Kullanımı

  1. Öncelikle, block.json dosyasına, bu bileşenin seçimini hatırlayacak bir değişken oluşturalım.
    • Ben bu değişkenin adını “selectedColor” yaptım, siz dilediğiniz bir isim verebilirsiniz.

block.json

"attributes": {
	"fontSize": {
		"type": "string",
		"default": ""
	}
}
  1. block-settings.js sayfasına bileşen için gerekli kodları ekleyelim.
  • Önce, bileşeni @wordpress/components ten import etmemiz gerekiyor:

block-settings.js

import {
    ComboboxControl
} from '@wordpress/components';
  • Sonra bileşenin kodunu, block ayarları için oluşturduğumuz bir <PanelRow> </PanelRow> bileşeninin içinde döndürüyoruz.
  1. Yaptığımız seçim, block.json dosyasındaki attribute objesinde saklanır.
    • Bu ayarı oradan getirip kullanmak için:
      • Edit({ attributes, setAttributes }) veya
      • save({attributes}) fonksiyonları içerisinde iken şu şekilde çağırırız:
attributes.fontSize

Dashicon : Dashicon Kontrolü

Görevi

  • Bir icon oluşturur.

Görünümü

  • Şöyle görünür:
    WordPress-Block-Editörü-Dashicon-Bileşeni

Kod Yapısı

  • Dashiconlar, WordPress ile birlikte gelirler. Bütün dashiconlara buradan ulaşabilirsiniz.
    • Mesela, “dashicon-admin-home” ikonunu kullanmak için aşağıdaki kod yapısını kullanırız:
<Dashicon icon="admin-home" />

Kodun Kullanımı

  1. block-settings.js sayfasına bileşen için gerekli kodları ekleyelim.
  • Önce, bileşeni @wordpress/components ten import etmemiz gerekiyor:

block-settings.js

import {
    Dashicon
} from '@wordpress/components';
  • Sonra bileşenin kodunu, block ayarları için oluşturduğumuz bir <PanelRow> </PanelRow> bileşeninin içinde döndürüyoruz.
  • NOT: Dashicon bileşeni sadece editörde çalışır, temada görünmez.

DateTimePicker : Tarih ve Saat Seçme Kontrolü

Görevi

  • Tarih seçmek için bir takvim oluşturur.
  • Seçtiğimiz tarihi bir string olarak ve aşağıda verilen formatta döndürür:
    • 2022-06-29T22:49:00

Görünümü

  • Şöyle görünür:
    WordPress-Block-Editörü-DateTimePicker-Bileşeni

Kod Yapısı

// Burası fonksiyonun return bölümünden önce yer alır.
const date = new Date();

// Fonksiyonun return bölümünde yer alır.
<DateTimePicker
    currentDate={ attributes.date ? attributes.date : date }
    onChange={ ( newDate ) => setAttributes( {date: newDate} ) }
    is12Hour={ false }
    __nextRemoveHelpButton
    __nextRemoveResetButton
/>

Kodun Kullanımı

  1. Öncelikle, block.json dosyasına, bu bileşenin seçimini hatırlayacak iki değişken oluşturalım.
    • Ben bu değişkenin adını “date” yaptım, siz dilediğiniz isimleri verebilirsiniz.

block.json

"attributes": {
	"date": {
		"type": "string",
		"default": ""
	}
}
  1. block-settings.js sayfasına bileşen için gerekli kodları ekleyelim.
  • Bileşenini @wordpress/components den import etmemiz gerekiyor:

block-settings.js

import {
    DateTimePicker
} from '@wordpress/components';
  • Sonra bileşenin kodunu, block ayarları için oluşturduğumuz bir <PanelRow> </PanelRow> elemanının içinde döndürüyoruz.
  1. Seçtiğimiz tarih, block.json dosyasındaki attribute objesinde saklanır.
    • Bu ayarı oradan getirip kullanmak için:
      • Edit({ attributes, setAttributes }) veya
      • save({attributes}) fonksiyonları içerisinde iken şu şekilde çağırırız:
attributes.date

Disabled : Devre Dışı Bırakma Kontrolü

Görevi

  • Bir form elemanını devre dışı bırakır.
  • Kullanımı daha iyi anlayabilmek için bu bileşen ile birlikte şu bileşenleri de kullanacağız:
    • <TextControl>
    • <Button>

Görünümü

  • Resim yüklemeden öncesi:
    WordPress-Block-Editörü-Disabled-Bileşeni

Kod Yapısı

<PanelRow>
    <Disabled isDisabled={attributes.disabled}>
        <TextControl
            label={__('Adınızı girin:', 'sc-cards')}
            onChange={ () => {} }
            placeholder={__('Adım SOYADIM', 'sc-cards')}
            style={ { opacity: attributes.disabled ? 0.5 : 1 } }
        />
    </Disabled>
</PanelRow>
<PanelRow>
    <Button
        variant="secondary" 
        onClick={ () => setAttributes({disabled: !attributes.disabled}) }
        isDestructive={true}
    >
    {__('Değer girişini kapat', 'sc-cards')}
    </Button>
</PanelRow>

Kodun Kullanımı

  1. Öncelikle, block.json dosyasına, bu bileşenin seçimini hatırlayacak iki değişken oluşturalım.
    • Ben bu değişkenin adını “date” yaptım, siz dilediğiniz isimleri verebilirsiniz.

block.json

"attributes": {
	"date": {
		"type": "string",
		"default": ""
	}
}
  1. block-settings.js sayfasına bileşen için gerekli kodları ekleyelim.
  • Bileşenini @wordpress/components den import etmemiz gerekiyor:

block-settings.js

import {
    DateTimePicker
} from '@wordpress/components';
  • Sonra bileşenin kodunu <PalenBody> </PanelBody> bileşeni içinde döndürüyoruz.
  1. Seçimimiz, block.json dosyasındaki attribute objesinde saklanır.
    • Bu ayarı oradan getirip kullanmak için:
      • Edit({ attributes, setAttributes }) veya
      • save({attributes}) fonksiyonları içerisinde iken şu şekilde çağırırız:
attributes.disabled

MediaUpload : Resim Yükleme Kontrolü

Görevi

  • WordPress’in medya yükleyicisi yardımıyla bir resim yüklemek için kullanılır.
    • <MediaUploadCheck>
    • <Button>
      bileşenleri ile birlikte kullandık.

Görünümü

  • Resim yüklemeden öncesi:
    WordPress-Block-Editörü-MediaUpload-Bileşeni
  • Resim yükledikten sonrası:
    WordPress-Block-Editörü-MediaUpload-Editör-Bileşeni

Kod Yapısı

// Burası fonksiyonun return bölümünden önce yer alır.
const removeMedia = () => {
    setAttributes({
        mediaId: 0,
        mediaUrl: ''
    });
}
const onSelectMedia = (media) => {
    setAttributes({
        mediaId: media.id,
        mediaUrl: media.url
    });
}

// Fonksiyonun return bölümünde yer alır.
<div className="sc-editor-post-featured-image">
    <MediaUploadCheck>
        <MediaUpload
            onSelect={onSelectMedia}
            value={attributes.mediaId}
            allowedTypes={['image']}
            render={({ open }) => (
                <Button
                className={attributes.mediaId == 0 ? 'editor-post-featured-image__toggle' : 'editor-post-featured-image__preview'}
                onClick={open}
                >
                    {attributes.mediaId == 0 && __('Resim seç', 'sc-cards')}
                    {attributes.mediaId != 0 &&
                        <fieldset className='stcnnt-img-preview'>
                            <img src={attributes.mediaUrl} />
                        </fieldset>
                    }
                </Button>
            )}
        />
    </MediaUploadCheck>
    {attributes.mediaId != 0 &&
        <MediaUploadCheck>
            <MediaUpload
                title={__('Değiştir', 'sc-cards')}
                value={attributes.mediaId}
                onSelect={onSelectMedia}
                allowedTypes={['image']}
                render={({ open }) => (
                    <Button className="sc-change-img" variant="secondary" onClick={open}>{__('Resmi değiştir', 'sc-cards')}</Button>
                )}
            />
        </MediaUploadCheck>
    }
    {attributes.mediaId != 0 &&
        <MediaUploadCheck>
            <Button
                variant="secondary"
                isDestructive={true}
                onClick={removeMedia}>{__('Kaldır', 'sc-cards')}</Button>
        </MediaUploadCheck>
    }
</div>

Kodun Kullanımı

  1. Öncelikle, block.json dosyasına, bu bileşenin seçimini hatırlayacak iki değişken oluşturalım.
    • Ben bu değişkenlerin adını “mediaId” ve “mediaUrl” yaptım, siz dilediğiniz isimleri verebilirsiniz.

block.json

"attributes": {
	"mediaId": {
		"type": "number",
		"default": 0
	},
	"mediaUrl": {
		"type": "string",
		"default": ""
	}
}
  1. block-settings.js sayfasına bileşen için gerekli kodları ekleyelim.
  • MediaUpload ve MediaUploadCheck bileşenlerini @wordpress/block-editor den import etmemiz gerekiyor:
  • Button bileşenini @wordpress/components den import etmemiz gerekiyor:

block-settings.js

import {
    MediaUpload,
    MediaUploadCheck
} from '@wordpress/block-editor';

import {
    Button
} from '@wordpress/components';
  • Sonra bileşenin kodunu, block ayarları için oluşturduğumuz bir <div className="sc-editor-post-featured-image"> </div> elemanının içinde döndürüyoruz.
  • Sonra, resim yükleyicisinin editörde güzel görünmesi için, editor.scss dosyasına bir kaç SCSS kodluyoruz.

editor.scss

.sc-editor-post-featured-image
{
	width: 100%;
	text-align: center;
	.editor-post-featured-image__toggle, .editor-post-featured-image__preview img
	{
		border: 3px solid #ddd;
		padding: 5px;
		margin: 0 auto;
	}
	.stcnnt-img-preview
	{
		display: flex;
		justify-content: center;
        align-items: center;
		height: 150px;
		overflow: hidden;
		img {
			object-fit: cover;
			height: 150px;
		};
		margin-bottom: 5px;
	}
	.sc-change-img{
		margin-right: 5px;
	}
}
  1. Seçtiğimiz resmin url adresi, block.json dosyasındaki attribute objesinde saklanır.
    • Bu ayarı oradan getirip kullanmak için:
      • Edit({ attributes, setAttributes }) veya
      • save({attributes}) fonksiyonları içerisinde iken şu şekilde çağırırız:
attributes.mediaUrl

DERSİN SONU

Kimya Özel Dersi Al

Yorum yaparak bize destek olabilirsiniz.

Bir cevap yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Şu kadar HTML serbest:

<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>