Acorn - Laravel a WordPress-ben
Az Acorn egy keretrendszer, amely Laravel komponenseket biztosít WordPress témákhoz és pluginokhoz. A Roots csapat fejleszti, és ez képezi a Sage téma alapját.
Mi az Acorn?
Az Acorn lehetővé teszi, hogy a Laravel ökoszisztéma legjobb részeit használd WordPress projektjeidben:
- Blade templating - Laravel Blade template motor
- Service Container - Laravel IoC container
- Service Providers - Moduláris szolgáltatások regisztrálása
- View Composers - Adatok automatikus átadása view-knak
- Configuration - Laravel-stílusú konfiguráció
- Caching - View és konfiguráció cache
- Console Commands - Artisan-szerű CLI parancsok
Előfeltételek
- PHP >= 8.1
- WordPress >= 5.9
- Composer
Telepítés
Composer-rel
composer require roots/acorn
WordPress pluginként
Az Acorn elérhető WordPress pluginként is, amely letölthető a roots.io/acorn oldalról.
Acorn bootolása
Az Acorn-t be kell tölteni a témádban vagy pluginodban. A functions.php fájlban:
<?php
if (! function_exists('\Roots\bootloader')) {
wp_die(
__('You need to install Acorn to use this theme.', 'sage'),
'',
[
'link_url' => 'https://roots.io/acorn/docs/installation/',
'link_text' => __('Acorn Docs: Installation', 'sage'),
]
);
}
\Roots\bootloader()->boot();
Blade Templates
A Blade a Laravel template motorja, amely tiszta és kifejező szintaxist biztosít.
Alapvető szintaxis
{{-- resources/views/partials/header.blade.php --}}
<header class="site-header">
<nav>
@if (has_nav_menu('primary_navigation'))
{!! wp_nav_menu(['theme_location' => 'primary_navigation', 'echo' => false]) !!}
@endif
</nav>
</header>
Feltételes megjelenítés
@if ($post->post_type === 'product')
<span class="badge">Termék</span>
@elseif ($post->post_type === 'post')
<span class="badge">Bejegyzés</span>
@else
<span class="badge">Oldal</span>
@endif
Ciklusok
@foreach ($posts as $post)
<article>
<h2>{{ $post->post_title }}</h2>
<p>{{ $post->post_excerpt }}</p>
</article>
@empty
<p>Nincs megjeleníthető bejegyzés.</p>
@endforeach
WordPress Loop Blade-del
@while (have_posts())
@php(the_post())
<article @php(post_class())>
<h2>{{ get_the_title() }}</h2>
{!! get_the_content() !!}
</article>
@endwhile
Komponensek
{{-- resources/views/components/button.blade.php --}}
@props(['type' => 'primary', 'url' => '#'])
<a href="{{ $url }}" class="btn btn-{{ $type }}">
{{ $slot }}
</a>
Használata:
<x-button type="secondary" url="/contact">
Kapcsolat
</x-button>
View Composers
A View Composers lehetővé teszi, hogy adatokat automatikusan adj át a view-knak.
Composer létrehozása
<?php
// app/View/Composers/Post.php
namespace App\View\Composers;
use Roots\Acorn\View\Composer;
class Post extends Composer
{
/**
* Mely view-kra vonatkozzon
*/
protected static $views = [
'partials.content',
'partials.content-*',
];
/**
* Adatok átadása a view-nak
*/
public function with()
{
return [
'title' => $this->title(),
'excerpt' => $this->excerpt(),
'categories' => $this->categories(),
];
}
public function title()
{
return get_the_title();
}
public function excerpt()
{
return has_excerpt()
? get_the_excerpt()
: wp_trim_words(get_the_content(), 40);
}
public function categories()
{
return get_the_category();
}
}
Composer regisztrálása
<?php
// app/Providers/ThemeServiceProvider.php
namespace App\Providers;
use Illuminate\Support\ServiceProvider;
class ThemeServiceProvider extends ServiceProvider
{
public function boot()
{
// Composers automatikus betöltése
}
}
Konfiguráció
Az Acorn Laravel-stílusú konfigurációs fájlokat használ a config/ mappában.
Példa konfiguráció
<?php
// config/theme.php
return [
'name' => 'My Theme',
'version' => '1.0.0',
'support' => [
'post-thumbnails',
'title-tag',
'html5' => [
'caption',
'comment-form',
'comment-list',
'gallery',
'search-form',
],
],
'menus' => [
'primary_navigation' => __('Primary Navigation', 'theme'),
'footer_navigation' => __('Footer Navigation', 'theme'),
],
];
Konfiguráció elérése
$themeName = config('theme.name');
$menus = config('theme.menus');
Console Commands (WP-CLI)
Az Acorn WP-CLI parancsokat biztosít:
# View cache törlése
wp acorn view:clear
# View cache létrehozása
wp acorn view:cache
# Konfiguráció cache
wp acorn config:cache
wp acorn config:clear
# Elérhető parancsok listája
wp acorn list
Service Providers
Saját szolgáltatásokat regisztrálhatsz Service Provider-ekkel:
<?php
// app/Providers/CustomServiceProvider.php
namespace App\Providers;
use Illuminate\Support\ServiceProvider;
class CustomServiceProvider extends ServiceProvider
{
public function register()
{
$this->app->singleton('custom.service', function () {
return new \App\Services\CustomService();
});
}
public function boot()
{
// Inicializáció a boot után
}
}
Regisztráció a config/app.php fájlban:
'providers' => [
// ...
App\Providers\CustomServiceProvider::class,
],
Mappastruktúra
Egy tipikus Acorn-alapú téma struktúrája:
theme/
├── app/
│ ├── Providers/ # Service Providers
│ ├── View/
│ │ └── Composers/ # View Composers
│ └── helpers.php # Helper függvények
├── config/
│ ├── app.php # Alkalmazás konfiguráció
│ ├── theme.php # Téma konfiguráció
│ └── view.php # View konfiguráció
├── resources/
│ ├── views/ # Blade templates
│ │ ├── layouts/
│ │ ├── partials/
│ │ └── components/
│ ├── scripts/ # JavaScript
│ └── styles/ # CSS/SCSS
├── storage/
│ └── framework/
│ ├── cache/
│ └── views/ # Compiled views
├── composer.json
├── functions.php
└── style.css
Acorn + Sage
A Sage téma az Acorn-ra épül, és egy teljes értékű modern WordPress téma fejlesztési környezetet biztosít:
# Sage téma létrehozása
composer create-project roots/sage tema-neve
cd tema-neve
# Függőségek telepítése
composer install
npm install
# Fejlesztés
npm run dev
# Build
npm run build
Cache kezelés
Éles környezetben érdemes cache-elni a view-kat és konfigurációt:
# View cache (Blade templates előfordítása)
wp acorn view:cache
# Konfiguráció cache
wp acorn config:cache
# Minden cache törlése
wp acorn optimize:clear
Hibakeresés
Debug mód
A config/app.php fájlban:
'debug' => WP_DEBUG,
Logolás
use Illuminate\Support\Facades\Log;
Log::info('Információ');
Log::warning('Figyelmeztetés');
Log::error('Hiba', ['context' => $data]);
A logok a storage/logs/ mappában találhatók.