{"id":229215,"date":"2022-11-13T10:18:00","date_gmt":"2022-11-13T07:18:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=229215"},"modified":"2022-11-09T06:00:30","modified_gmt":"2022-11-09T03:00:30","slug":"dodawanie-modalnych-okien-dialogowych-wordpress-z-wbudowanymi-bibliotekami","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/pl\/dodawanie-modalnych-okien-dialogowych-wordpress-z-wbudowanymi-bibliotekami\/","title":{"rendered":"Dodawanie modalnych okien dialogowych WordPress (z wbudowanymi bibliotekami)"},"content":{"rendered":"\n<p>Je\u015bli chodzi o opracowywanie rozwi\u0105za\u0144 dla klient\u00f3w, b\u0119d\u0105 chwile, w kt\u00f3rych prawdopodobnie b\u0119dziesz mia\u0142 za zadanie wy\u015bwietla\u0107 informacje w modalnych oknach dialogowych WordPress.<\/p>\n<p>Dost\u0119pnych jest wiele rozwi\u0105za\u0144 do tego celu i im lepiej znasz JavaScript, r\u00f3\u017cne biblioteki i dost\u0119pne w nich biblioteki, tym trudniej (a mo\u017ce nawet \u0142atwiej) wybra\u0107, kt\u00f3rej z nich u\u017cy\u0107.<\/p>\n<p>Ale WordPress ma wbudowan\u0105 infrastruktur\u0119, kt\u00f3ra sprawia, \u017ce \u200b\u200bw\u0142\u0105czanie funkcji do WordPressa jest trywialne. W trzech nadchodz\u0105cych postach om\u00f3wi\u0119 nast\u0119puj\u0105ce kwestie:<\/p>\n<ol>\n<li>Jak w\u0142\u0105czy\u0107 modalne okna dialogowe WordPress za pomoc\u0105 wbudowanych bibliotek,<\/li>\n<li>Zape\u0142nianie modalnych okien dialogowych danymi,<\/li>\n<li>Wype\u0142nianie modalnego okna dialogowego danymi dynamicznymi przez Ajax.<\/li>\n<\/ol>\n<p>Ze wzgl\u0119du na charakter serii posty nie b\u0119d\u0105 powtarzane jeden po drugim, ale wszystkie b\u0119d\u0105 u\u017cywa\u0107 unikalnego tagu, kt\u00f3rego mo\u017cna u\u017cy\u0107 do dodania do zak\u0142adek i odnoszenia si\u0119 do serii po uko\u0144czeniu post\u00f3w.<\/p>\n<p>Maj\u0105c to na uwadze, porozmawiajmy o \u0142atwym w\u0142\u0105czeniu modalnych okien dialogowych WordPress z wbudowanymi bibliotekami.<\/p>\n<h2>Modalne okna dialogowe WordPress, cz\u0119\u015b\u0107 1<\/h2>\n<p>Na pocz\u0105tek zak\u0142adam, \u017ce masz podstawow\u0105 podstaw\u0119 strony administracyjnej.<\/p>\n<h3>Na stronach wtyczek<\/h3>\n<p>Oznacza to, \u017ce masz wszystko, czego potrzebujesz, aby skonfigurowa\u0107 wtyczk\u0119, aktywowa\u0107, a nast\u0119pnie wy\u015bwietli\u0107 stron\u0119 za pomoc\u0105 menu lub podmenu.<\/p>\n<p>Je\u015bli nie, sprawd\u017a <a href=\"https:\/\/tommcfarlin.com\/wordpress-menu-page\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">ten post<\/a>, aby dowiedzie\u0107 si\u0119, jak zacz\u0105\u0107.<\/p>\n<p>Gdy to zrobisz, b\u0119dziesz potrzebowa\u0107 podstawowej infrastruktury dla strony wtyczki. Ta strona mo\u017ce s\u0142u\u017cy\u0107 do prostego wy\u015bwietlania informacji lub mo\u017ce s\u0142u\u017cy\u0107 zar\u00f3wno do wy\u015bwietlania informacji, jak i umo\u017cliwiania u\u017cytkownikowi zapisywania opcji.<\/p>\n<p>W tym samouczku nie jestem szczeg\u00f3lnie zainteresowany umo\u017cliwieniem u\u017cytkownikowi zapisywania opcji. Zamiast tego musimy utworzy\u0107 kotwic\u0119, kt\u00f3ra po klikni\u0119ciu wy\u015bwietli modalne okno dialogowe.<\/p>\n<p>A dane, kt\u00f3re b\u0119dzie zawiera\u0107, zostan\u0105 om\u00f3wione w p\u00f3\u017aniejszym samouczku.<\/p>\n<h3>Przyk\u0142adowa strona wtyczki<\/h3>\n<p>W tym momencie zak\u0142adam, \u017ce masz stron\u0119 wtyczki. Podstawowa struktura mo\u017ce wygl\u0105da\u0107 <a href=\"https:\/\/gist.github.com\/tommcfarlin\/1db21634b8b7a88a963b3875553d2539#file-00-basic-plugin-page-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">tak<\/a> :<\/p>\n<pre><code>&lt;?php\n\/**\n * A basic plugin page that will eventually be used to demonstrate how to use the\n * Thickbox library included with WordPress.\n *\n * @package Acme\n *\/\n?&gt;\n\n&lt;div id=\"acme-thickbox-demo\" class=\"wrap\"&gt;\n  &lt;!-- TODO --&gt;\n&lt;\/div&gt;&lt;!-- #acme-thickbox-demo --&gt;<\/code><\/pre>\n<p>Stamt\u0105d potrzebne s\u0105 dwie rzeczy:<\/p>\n<ol>\n<li>zawieraj\u0105ce bibliotek\u0119 Thickbox<\/li>\n<li>dodanie kotwicy i kontenera, kt\u00f3ry wy\u015bwietli modalne okno dialogowe<\/li>\n<\/ol>\n<p>Aby w\u0142\u0105czy\u0107 bibliotek\u0119 Thickbox do swojej strony wtyczki, po prostu dodaj ten tag. Je\u015bli przestrzegasz jakichkolwiek standard\u00f3w kodowania, prawdopodobnie Twoja strona ma blok docowy u g\u00f3ry strony. Tutaj zwykle dodaj\u0119 kod.<\/p>\n<p>Funkcja <a href=\"https:\/\/developer.wordpress.org\/reference\/functions\/add_thickbox\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">add_thickbox<\/a> to funkcja dostarczana przez WordPress, kt\u00f3ra wykonuje nast\u0119puj\u0105ce czynno\u015bci:<\/p>\n<blockquote>\n<p>Zakolejkuje domy\u015blne js i css ThickBox.<\/p>\n<\/blockquote>\n<p>Troch\u0119 niejasne, prawda? Technicznie d\u0142u\u017cszy opis to:<\/p>\n<blockquote>\n<p>ThickBox to widget okna dialogowego interfejsu u\u017cytkownika strony internetowej napisany w JavaScript na bazie biblioteki jQuery. Jego funkcj\u0105 jest pokazanie pojedynczego obrazu, wielu obraz\u00f3w, zawarto\u015bci wbudowanej, zawarto\u015bci iframe lub zawarto\u015bci obs\u0142ugiwanej przez AJAX w trybie hybrydowym.<\/p>\n<\/blockquote>\n<p>A je\u015bli interesuje Ci\u0119 sama biblioteka Thickbox, mo\u017cesz j\u0105 zobaczy\u0107 na <a href=\"http:\/\/codylindley.com\/thickbox\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">tej stronie<\/a>.<\/p>\n<p>W ka\u017cdym razie wr\u00f3\u0107my do strony. Teraz, gdy dodaj\u0119 go do mojej strony wtyczki za pomoc\u0105 funkcji API WordPress, moja strona wygl\u0105da mniej wi\u0119cej <a href=\"https:\/\/gist.github.com\/tommcfarlin\/1db21634b8b7a88a963b3875553d2539#file-01-thickbox-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">tak<\/a> :<\/p>\n<pre><code>&lt;?php\n\/**\n * A basic plugin page that will eventually be used to demonstrate how to use the\n * Thickbox library included with WordPress.\n *\n * @package Acme\n *\/\nadd_thickbox();\n?&gt;\n\n&lt;div id=\"acme-thickbox-demo\" class=\"wrap\"&gt;\n  &lt;!-- TODO --&gt;\n&lt;\/div&gt;&lt;!-- #acme-thickbox-demo --&gt;<\/code><\/pre>\n<p>Nast\u0119pnie tworzenie kotwicy i elementu do wy\u015bwietlania danych id\u0105 ze sob\u0105 w parze, poniewa\u017c kotwica potrzebuje identyfikatora elementu, kt\u00f3ry b\u0119dzie s\u0142u\u017cy\u0142 jako modalne okno dialogowe.<\/p>\n<p>Kotwica potrzebuje nast\u0119puj\u0105cych informacji:<\/p>\n<ul>\n<li>identyfikator elementu, kt\u00f3ry b\u0119dzie wy\u015bwietla\u0142 modalny,<\/li>\n<li>wymiary wspomnianego modalnego okna dialogowego<\/li>\n<\/ul>\n<p>W tym przyk\u0142adzie skonfiguruj\u0119 okno dialogowe, kt\u00f3re b\u0119dzie wy\u015bwietlane w rozdzielczo\u015bci 800\u00d7600 pikseli i b\u0119dzie mia\u0142o identyfikator <strong>acme-modal-dialog<\/strong>.<\/p>\n<p><strong>Uwaga<\/strong>: pami\u0119taj, \u017ce dobrym pomys\u0142em jest poprzedzenie element\u00f3w czym\u015b zwi\u0105zanym z nazw\u0105 wtyczki, aby nie powstawa\u0142y \u017cadne konflikty.<\/p>\n<p>Stworz\u0119 wi\u0119c kotwic\u0119, kt\u00f3ra <a href=\"https:\/\/gist.github.com\/tommcfarlin\/1db21634b8b7a88a963b3875553d2539#file-02-adding-an-anchor-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">wygl\u0105da tak<\/a> :<\/p>\n<pre><code>&lt;?php\n\/**\n * A basic plugin page that will eventually be used to demonstrate how to use the\n * Thickbox library included with WordPress.\n *\n * @package Acme\n *\/\nadd_thickbox();\n?&gt;\n\n&lt;div id=\"acme-thickbox-demo\" class=\"wrap\"&gt;\n\n  &lt;h1&gt;Acme Thickbox Demo&lt;\/h1&gt;\n  &lt;p&gt;Provides an exmaple of how to use the thickbox library within a WordPress plugin page.&lt;\/p&gt;\n\n  &lt;div id=\"acme-thickbox-content\"&gt;\n    &lt;a href=\"#\"&gt;Display The Dialog&lt;\/a&gt;\n  &lt;\/div&gt;&lt;!-- #acme-thickbox-content --&gt;\n\n&lt;\/div&gt;&lt;!-- #acme-thickbox-demo --&gt;<\/code><\/pre>\n<p>A potem stworz\u0119 taki <a href=\"https:\/\/gist.github.com\/tommcfarlin\/1db21634b8b7a88a963b3875553d2539#file-03-adding-the-modal-dialog-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">element<\/a> :<\/p>\n<pre><code>&lt;?php\n\/**\n * A basic plugin page that will eventually be used to demonstrate how to use the\n * Thickbox library included with WordPress.\n *\n * @package Acme\n *\/\nadd_thickbox();\n?&gt;\n\n&lt;div id=\"acme-thickbox-demo\" class=\"wrap\"&gt;\n\n  &lt;h1&gt;Acme Thickbox Demo&lt;\/h1&gt;\n  &lt;p&gt;Provides an exmaple of how to use the thickbox library within a WordPress plugin page.&lt;\/p&gt;\n\n  &lt;div id=\"acme-thickbox-content\"&gt;\n    &lt;a href=\"TB_inline?width=600&amp;height=550&amp;inlineId=acme-modal-dialog\" class=\"thickbox\"&gt;Display The Dialog&lt;\/a&gt;\n    &lt;div id=\"acme-modal-dialog\" style=\"display:none;\"&gt;&lt;\/div&gt;&lt;!-- #acme-modal-dialog --&gt;\n  &lt;\/div&gt;&lt;!-- #acme-thickbox-content --&gt;\n\n&lt;\/div&gt;&lt;!-- #acme-thickbox-demo --&gt;<\/code><\/pre>\n<p>A powy\u017cszy kod b\u0119dzie tak wygl\u0105da\u0142 ostateczna wersja strony wtyczki. Po klikni\u0119ciu na kotwic\u0119 powinno pojawi\u0107 si\u0119 puste okno dialogowe o okre\u015blonych wymiarach (tj. 800\u00d7600 pikseli).<\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-165812-61e789a51e4aa.png\" data-rel=\"lightbox\"><img decoding=\"async\" class=\"SDStudio-light-box-enable SDStudio-editor-tools-md-imp\" src=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-165812-61e789a51e4aa.png\" alt=\"Dodawanie modalnych okien dialogowych WordPress (z wbudowanymi bibliotekami)\" ><\/a><\/p>\n<p>Oczywi\u015bcie b\u0119dzie pusty, poniewa\u017c nie b\u0119dzie wy\u015bwietla\u0142 \u017cadnych danych.<\/p>\n<h2>Wy\u015bwietlanie danych<\/h2>\n<p>W nast\u0119pnym po\u015bcie z tej serii om\u00f3wi\u0119, jak wy\u015bwietla\u0107 dane w kontek\u015bcie okna dialogowego.<\/p>\n<p>Jest to \u0142atwe, ale jest dobrym punktem wyj\u015bcia, je\u015bli chcesz rozpocz\u0105\u0107 w\u0142\u0105czanie danych dynamicznych za po\u015brednictwem interfejsu API REST lub Ajax. Ale om\u00f3wi\u0119 to przed ko\u0144cem tego.<\/p>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">\u0179r\u00f3d\u0142o nagrywania:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/tommcfarlin.com\" class=\"external external_icon\">tommcfarlin.com<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Je\u015bli chodzi o opracowywanie rozwi\u0105za\u0144 dla klient\u00f3w, b\u0119d\u0105 chwile, kiedy prawdopodobnie b\u0119dziesz mia\u0142 za zadanie wy\u015bwietla\u0107 informacje w modalnych oknach dialogowych WordPress.<\/p>\n","protected":false},"author":1,"featured_media":165813,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_wp_rev_ctl_limit":""},"categories":[897,845,866],"tags":[1169],"class_list":["post-229215","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-kod","category-samouczki","category-wordpress-7","tag-affiai-pl"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/posts\/229215","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/comments?post=229215"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/posts\/229215\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/media\/165813"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/media?parent=229215"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/categories?post=229215"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/tags?post=229215"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}