{"id":228869,"date":"2022-11-04T16:52:00","date_gmt":"2022-11-04T13:52:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=228869"},"modified":"2022-11-09T04:35:48","modified_gmt":"2022-11-09T01:35:48","slug":"szybkie-prototypowanie-przedstawiamy-automatyczne-ladowanie","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/pl\/szybkie-prototypowanie-przedstawiamy-automatyczne-ladowanie\/","title":{"rendered":"Szybkie prototypowanie: Przedstawiamy automatyczne \u0142adowanie"},"content":{"rendered":"\n<p>W ci\u0105gu ostatnich kilku post\u00f3w przeszed\u0142em przez proces przechodzenia pomys\u0142u od koncepcji do prototypu.<\/p>\n<p>Oczywi\u015bcie, jest kilka rzeczy, kt\u00f3re mo\u017cesz zmieni\u0107 (i jest kilka rzeczy, kt\u00f3re ja bym zmieni\u0142a, je\u015bli chodzi o organizacj\u0119 zaj\u0119\u0107). Jednak celem tej serii nie jest om\u00f3wienie wszystkich r\u00f3\u017cnych technik obiektowych, kt\u00f3re mo\u017cna wykorzysta\u0107 do stworzenia rozwi\u0105zania.<\/p>\n<p>Zamiast tego chodzi o zrobienie prototypu i przekszta\u0142cenie go w co\u015b bardziej profesjonalnego. Jest jednak jeszcze jedna rzecz, kt\u00f3r\u0105 musimy zrobi\u0107.<\/p>\n<p>W tej chwili do\u0142\u0105czamy wszystkie nasze pliki za pomoc\u0105 o\u015bwiadcze\u0144 wymaganych. Dzia\u0142a to dobrze w przypadku ma\u0142ych plik\u00f3w, ale wprowadzenie automatycznego \u0142adowania w po\u0142\u0105czeniu z przestrzeniami nazw mo\u017ce sprawi\u0107, \u017ce aplikacja b\u0119dzie jeszcze czystsza.<\/p>\n<p>I to w\u0142a\u015bnie zamierzamy zrobi\u0107.<\/p>\n<h3>Przedstawiamy automatyczne \u0142adowanie<\/h3>\n<p>Przypomnij sobie z wcze\u015bniejszego posta (je\u015bli go przeczyta\u0142e\u015b), \u017ce automatyczne \u0142adowanie to prosty pomys\u0142:<\/p>\n<p>Brzmi \u015bwietnie, prawda? Ale jest zastrze\u017cenie: musisz napisa\u0107 autoloader. PHP nie mo\u017ce sam tego rozgry\u017a\u0107.<\/p>\n<p>I w\u0142a\u015bnie dlatego jestem fanem upewniania si\u0119, \u017ce nasze przestrzenie nazw r\u00f3wnie\u017c maj\u0105 sp\u00f3jn\u0105 struktur\u0119 katalog\u00f3w: je\u015bli przeanalizujesz przestrze\u0144 nazw i nazw\u0119 pliku, stosunkowo \u0142atwo jest zbudowa\u0107 \u015bcie\u017ck\u0119 do pliku i automatycznie go za\u0142adowa\u0107.<\/p>\n<p>D\u017awi\u0119k myl\u0105cy? Najpierw sp\u00f3jrzmy, gdzie umie\u015bcimy autoloader w odniesieniu do naszej struktury katalog\u00f3w:<\/p>\n<p>Nast\u0119pnie zaktualizuj plik \u0142adowania pocz\u0105tkowego wtyczki tak, aby <a href=\"https:\/\/gist.github.com\/tommcfarlin\/4f5087613f01dcb35b7fb5e79c69401d#file-00-plugin-bootstrap-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">wymaga\u0142 tylko pliku autoloadera<\/a>.<\/p>\n<pre><code>&lt;?php\n\/**\n * Three Recent Posts\n *\n * @package     TRP\n * @author      Tom McFarlin\n * @copyright   2017 Tom McFarlin\n * @license     MIT\n *\n * @wordpress-plugin\n * Plugin Name: Three Recent Posts\n * Plugin URI:  https:\/\/tommcfarlin.com\/three-recent-posts\/\n * Description: Displays the three mot recent posts in your post editor screen.\n * Version:     1.0.0\n * Author:      Tom McFarlin\n * Author URI:  https:\/\/tommcfarlin.com\n * Text Domain: three-recent-posts\n * License:     GPL\n * License URI: http:\/\/www.gnu.org\/licenses\/gpl-3.0.txt\n *\/\n\nnamespace McFarlinTRP;\nuse McFarlinTRPDisplayMeta_Box;\n\n\/\/ Import the autoloader.\ninclude_once 'Includes\/autoload.php';\n\nadd_action( 'add_meta_boxes', __NAMESPACE__. 'trp_start' );\n\/**\n * Starts the plugin.\n *\/\nfunction trp_start() {\n\n    $meta_box = new Meta_Box( dirname( __FILE__) );\n    $meta_box-&gt;init();\n}\n<\/code><\/pre>\n<p>Oczywi\u015bcie potrzebujemy autoloadera, aby za\u0142adowa\u0107 nasze pliki. Zasadniczo dzia\u0142a to tak:<\/p>\n<ol>\n<li>oddzieli\u0107 sk\u0142adniki nazwy pliku przychodz\u0105cego (takie jak \u015bcie\u017cka katalogu i nazwa pliku),<\/li>\n<li>zast\u0105p wszelkie podkre\u015blenia my\u015blnikami, aby upewni\u0107 si\u0119, \u017ce plik jest zgodny ze struktur\u0105 nazwy pliku klasy,<\/li>\n<li>zacznij budowa\u0107 w pe\u0142ni kwalifikowan\u0105 nazw\u0119 \u015bcie\u017cki (kt\u00f3ra jest katalogiem, nazw\u0105 pliku itp.),<\/li>\n<li>iterowa\u0107 przez przestrze\u0144 nazw a\u017c do nazwy klasy i budowa\u0107 w pe\u0142ni kwalifikowan\u0105 nazw\u0119 pliku,<\/li>\n<li>w\u0142\u0105czy\u0107 go do projektu.<\/li>\n<\/ol>\n<p>To proste, prawda? Je\u015bli post\u0119pujesz zgodnie ze sp\u00f3jn\u0105 przestrzeni\u0105 nazw, katalogiem, nazw\u0105 klasy i schematem nazewnictwa plik\u00f3w, mo\u017cesz ponownie u\u017cy\u0107 tego samego programu \u0142adowania w dowolnych projektach.<\/p>\n<p><a href=\"https:\/\/gist.github.com\/tommcfarlin\/4f5087613f01dcb35b7fb5e79c69401d#file-00-autoload-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Oto kopia autoloadera<\/a>, kt\u00f3rego u\u017cywam i wrzucam go do prawie ka\u017cdego u\u017cywanego przeze mnie projektu. Zobaczysz, \u017ce jest to dok\u0142adnie to, co om\u00f3wiono powy\u017cej:<\/p>\n<pre><code>&lt;?php\n\/**\n * Automatically loads the specified file.\n *\n * @package McFarlinTFP\n *\/\n\nnamespace McFarlinTFP;\n\n\/**\n * Automatically loads the specified file.\n *\n * Examines the fully qualified class name, separates it into components, then creates\n * a string that represents where the file is loaded on disk.\n *\n * @package McFarlinTFP;\n *\/\nspl_autoload_register(function( $filename) {\n\n    \/\/ First, separate the components of the incoming file.\n    $file_path = explode( '', $filename );\n\n    \/\/ Get the last index of the array. This is the class we're loading.\n    if (isset( $file_path[ count( $file_path) - 1 ])) {\n\n        $class_file = strtolower(\n            $file_path[ count( $file_path) - 1 ]\n        );\n\n        \/**\n         * The classname has an underscore, so we need to replace it\n         * with a hyphen for the file name.\n         *\/\n        $class_file = str_ireplace( '_', '-', $class_file );\n        $class_file = \"class-$class_file.php\";\n    }\n\n    \/**\n     * Find the fully qualified path to the class file by iterating through the $file_path array.\n     * We ignore the first index since it's always the top-level package. The last index is always\n     * the file so we append that at the end.\n     *\/\n    $fully_qualified_path = trailingslashit(\n        dirname(\n            dirname( __FILE__)) );\n\n    \/**\n     * We start at the second index of the namespace because our directory\n     * structure does not include 'McFarlin\/TRP'.\n     *\/\n    for ($i = 2; $i &lt; count( $file_path) - 1; $i++) {\n\n        $dir = strtolower( $file_path[ $i ] );\n        $fully_qualified_path .= trailingslashit( $dir );\n    }\n    $fully_qualified_path .= $class_file;\n\n    \/\/ Now we include the file.\n    if (file_exists( $fully_qualified_path)) {\n        include_once( $fully_qualified_path );\n    }\n});<\/code><\/pre>\n<p>I dzi\u0119ki temu wtyczka jest pakowana do wersji 1.0.0. Mo\u017cesz to <a href=\"https:\/\/github.com\/tommcfarlin\/three-recent-posts\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">sprawdzi\u0107 na GitHub<\/a> (dos\u0142ownie i tylko do recenzji). Miejmy nadziej\u0119, \u017ce pomog\u0142o to przej\u015b\u0107 przez proces przechodzenia od szybkiego prototypowania do koncepcji w ramach koncepcji WordPress.<\/p>\n<h2>Posty z serii<\/h2>\n<ol>\n<li><a href=\"https:\/\/wordpress.mediadoma.com\/pl\/szybkie-prototypowanie-z-wordpress-od-koncepcji-do-wtyczki\/\" title=\"Szybkie prototypowanie z WordPress: od koncepcji do wtyczki\">Szybkie prototypowanie z WordPress: od koncepcji do wtyczki<\/a><\/li>\n<li><a href=\"https:\/\/wordpress.mediadoma.com\/pl\/szybkie-prototypowanie-z-wordpress-analiza-koncepcji\/\" title=\"Szybkie prototypowanie z WordPress: analiza koncepcji\">Szybkie prototypowanie z WordPress: analiza koncepcji<\/a><\/li>\n<li><a href=\"https:\/\/wordpress.mediadoma.com\/pl\/szybkie-prototypowanie-prototypowanie-do-kodu-czesc-1\/\" title=\"Szybkie prototypowanie: Prototypowanie do kodu, cz\u0119\u015b\u0107 1\">Szybkie prototypowanie: Prototypowanie do kodu, cz\u0119\u015b\u0107 1<\/a><\/li>\n<li><a href=\"https:\/\/wordpress.mediadoma.com\/pl\/szybkie-prototypowanie-prototypowanie-do-kodu-czesc-2\/\" title=\"Szybkie prototypowanie: Prototypowanie do kodu, cz\u0119\u015b\u0107 2\">Szybkie prototypowanie: Prototypowanie do kodu, cz\u0119\u015b\u0107 2<\/a><\/li>\n<li><a href=\"https:\/\/tommcfarlin.com\/introducing-autoloading\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Szybkie prototypowanie: Przedstawiamy automatyczne \u0142adowanie<\/a><\/li>\n<\/ol>\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>Wprowadzenie automatycznego \u0142adowania w po\u0142\u0105czeniu z przestrzeniami nazw we wtyczce WordPress mo\u017ce sprawi\u0107, \u017ce aplikacja b\u0119dzie jeszcze czystsza.<\/p>\n","protected":false},"author":1,"featured_media":220982,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_wp_rev_ctl_limit":""},"categories":[721,919,845],"tags":[1169],"class_list":["post-228869","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-deweloper","category-inny","category-samouczki","tag-affiai-pl"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/posts\/228869","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=228869"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/posts\/228869\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/media\/220982"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/media?parent=228869"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/categories?post=228869"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/tags?post=228869"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}