✅ Nowości, motywy, wtyczki WEB i WordPress. Tutaj dzielimy się wskazówkami i najlepszymi rozwiązaniami dla stron internetowych.

Szybkie prototypowanie: Przedstawiamy automatyczne ładowanie

17

W ciągu ostatnich kilku postów przeszedłem przez proces przechodzenia pomysłu od koncepcji do prototypu.

Oczywiście, jest kilka rzeczy, które możesz zmienić (i jest kilka rzeczy, które ja bym zmieniła, jeśli chodzi o organizację zajęć). Jednak celem tej serii nie jest omówienie wszystkich różnych technik obiektowych, które można wykorzystać do stworzenia rozwiązania.

Zamiast tego chodzi o zrobienie prototypu i przekształcenie go w coś bardziej profesjonalnego. Jest jednak jeszcze jedna rzecz, którą musimy zrobić.

W tej chwili dołączamy wszystkie nasze pliki za pomocą oświadczeń wymaganych. Działa to dobrze w przypadku małych plików, ale wprowadzenie automatycznego ładowania w połączeniu z przestrzeniami nazw może sprawić, że aplikacja będzie jeszcze czystsza.

I to właśnie zamierzamy zrobić.

Przedstawiamy automatyczne ładowanie

Przypomnij sobie z wcześniejszego posta (jeśli go przeczytałeś), że automatyczne ładowanie to prosty pomysł:

Brzmi świetnie, prawda? Ale jest zastrzeżenie: musisz napisać autoloader. PHP nie może sam tego rozgryźć.

I właśnie dlatego jestem fanem upewniania się, że nasze przestrzenie nazw również mają spójną strukturę katalogów: jeśli przeanalizujesz przestrzeń nazw i nazwę pliku, stosunkowo łatwo jest zbudować ścieżkę do pliku i automatycznie go załadować.

Dźwięk mylący? Najpierw spójrzmy, gdzie umieścimy autoloader w odniesieniu do naszej struktury katalogów:

Następnie zaktualizuj plik ładowania początkowego wtyczki tak, aby wymagał tylko pliku autoloadera.

<?php
/**
 * Three Recent Posts
 *
 * @package     TRP
 * @author      Tom McFarlin
 * @copyright   2017 Tom McFarlin
 * @license     MIT
 *
 * @wordpress-plugin
 * Plugin Name: Three Recent Posts
 * Plugin URI:  https://tommcfarlin.com/three-recent-posts/
 * Description: Displays the three mot recent posts in your post editor screen.
 * Version:     1.0.0
 * Author:      Tom McFarlin
 * Author URI:  https://tommcfarlin.com
 * Text Domain: three-recent-posts
 * License:     GPL
 * License URI: http://www.gnu.org/licenses/gpl-3.0.txt
 */

namespace McFarlinTRP;
use McFarlinTRPDisplayMeta_Box;

// Import the autoloader.
include_once 'Includes/autoload.php';

add_action( 'add_meta_boxes', __NAMESPACE__. 'trp_start' );
/**
 * Starts the plugin.
 */
function trp_start() {

    $meta_box = new Meta_Box( dirname( __FILE__) );
    $meta_box->init();
}

Oczywiście potrzebujemy autoloadera, aby załadować nasze pliki. Zasadniczo działa to tak:

  1. oddzielić składniki nazwy pliku przychodzącego (takie jak ścieżka katalogu i nazwa pliku),
  2. zastąp wszelkie podkreślenia myślnikami, aby upewnić się, że plik jest zgodny ze strukturą nazwy pliku klasy,
  3. zacznij budować w pełni kwalifikowaną nazwę ścieżki (która jest katalogiem, nazwą pliku itp.),
  4. iterować przez przestrzeń nazw aż do nazwy klasy i budować w pełni kwalifikowaną nazwę pliku,
  5. włączyć go do projektu.

To proste, prawda? Jeśli postępujesz zgodnie ze spójną przestrzenią nazw, katalogiem, nazwą klasy i schematem nazewnictwa plików, możesz ponownie użyć tego samego programu ładowania w dowolnych projektach.

Oto kopia autoloadera, którego używam i wrzucam go do prawie każdego używanego przeze mnie projektu. Zobaczysz, że jest to dokładnie to, co omówiono powyżej:

<?php
/**
 * Automatically loads the specified file.
 *
 * @package McFarlinTFP
 */

namespace McFarlinTFP;

/**
 * Automatically loads the specified file.
 *
 * Examines the fully qualified class name, separates it into components, then creates
 * a string that represents where the file is loaded on disk.
 *
 * @package McFarlinTFP;
 */
spl_autoload_register(function( $filename) {

    // First, separate the components of the incoming file.
    $file_path = explode( '', $filename );

    // Get the last index of the array. This is the class we're loading.
    if (isset( $file_path[ count( $file_path) - 1 ])) {

        $class_file = strtolower(
            $file_path[ count( $file_path) - 1 ]
        );

        /**
         * The classname has an underscore, so we need to replace it
         * with a hyphen for the file name.
         */
        $class_file = str_ireplace( '_', '-', $class_file );
        $class_file = "class-$class_file.php";
    }

    /**
     * Find the fully qualified path to the class file by iterating through the $file_path array.
     * We ignore the first index since it's always the top-level package. The last index is always
     * the file so we append that at the end.
     */
    $fully_qualified_path = trailingslashit(
        dirname(
            dirname( __FILE__)) );

    /**
     * We start at the second index of the namespace because our directory
     * structure does not include 'McFarlin/TRP'.
     */
    for ($i = 2; $i < count( $file_path) - 1; $i++) {

        $dir = strtolower( $file_path[ $i ] );
        $fully_qualified_path .= trailingslashit( $dir );
    }
    $fully_qualified_path .= $class_file;

    // Now we include the file.
    if (file_exists( $fully_qualified_path)) {
        include_once( $fully_qualified_path );
    }
});

I dzięki temu wtyczka jest pakowana do wersji 1.0.0. Możesz to sprawdzić na GitHub (dosłownie i tylko do recenzji). Miejmy nadzieję, że pomogło to przejść przez proces przechodzenia od szybkiego prototypowania do koncepcji w ramach koncepcji WordPress.

Posty z serii

  1. Szybkie prototypowanie z WordPress: od koncepcji do wtyczki
  2. Szybkie prototypowanie z WordPress: analiza koncepcji
  3. Szybkie prototypowanie: Prototypowanie do kodu, część 1
  4. Szybkie prototypowanie: Prototypowanie do kodu, część 2
  5. Szybkie prototypowanie: Przedstawiamy automatyczne ładowanie

Źródło nagrywania: tommcfarlin.com

Ta strona korzysta z plików cookie, aby poprawić Twoje wrażenia. Zakładamy, że nie masz nic przeciwko, ale możesz zrezygnować, jeśli chcesz. Akceptuję Więcej szczegółów