NovinkaZverejnili sme 50+ Laravel balíkov ako open source
Custom AI apps, agents and automation — Roundly ConsultingRoundly
Všetky balíky
Shops for Laravel

Produkty a kategórie

Produkty a kategórie patria voliteľnému obchodu, z názvu si vygenerujú slug pre URL a používajú ho ako route key. Každý produkt dostane pri vytvorení jeden predvolený variant a $product->price číta cenu predvoleného variantu (s najnižšou pozíciou):

use RoundlyConsulting\Shops\Products\Category;
use RoundlyConsulting\Shops\Products\Product;

$category = Category::create(['name' => 'Beverages', 'published_at' => now()]);
// $category->slug === 'beverages'

$product = Product::create(['name' => 'Sparkling Water', 'published_at' => now()]);
$product->categories()->attach($category);   // many-to-many, pivot with timestamps

$product->price;   // RoundlyConsulting\Money\Money — proxied from the default variant

Relácie v skratke

$product->variants();          // HasMany<ProductVariant>
$product->defaultVariant();    // HasOne<ProductVariant> — lowest position
$product->options();           // HasMany<ProductOption>, ordered by position
$product->categories();        // BelongsToMany<Category>
$product->shop();              // BelongsTo — the configured tenant model
$product->variantFor([$id]);   // ?ProductVariant matching exactly these option-value ids

Zverejňovanie

Produkty aj kategórie zdieľajú concern HasPublishing, riadený voliteľným stĺpcom published_at — zverejnite hneď, naplánujte na neskôr alebo ponechajte koncept:

Product::query()->published();     // published_at set and not in the future
Product::query()->unpublished();   // no published_at, or scheduled for later
Product::query()->forShop($shop)->published()->get();

$product->isPublished();           // bool

$product->update(['published_at' => now()->addWeek()]);   // schedule
$product->update(['published_at' => null]);               // back to draft

Category::query()->published()->get();                   // categories publish the same way

Preklady

name, slug a description sú preložiteľné a ukladajú sa ako natívny JSON podľa jazykov. Čítanie vráti hodnotu aktuálneho jazyka so zálohou shops.locales.fallback; zápis obyčajného reťazca sa uloží pod aktuálny jazyk, takže jednojazyčné obchody nepotrebujú nič navyše:

$product->setTranslation('name', 'en', 'Sparkling Water');
$product->setTranslation('name', 'sk', 'Perlivá voda');
$product->save();

app()->setLocale('sk');
$product->name;                          // "Perlivá voda"
$product->getTranslation('name', 'en');  // "Sparkling Water"
$product->getTranslations('name');       // ['en' => 'Sparkling Water', 'sk' => 'Perlivá voda']

// A plain string is stored under the current locale:
$product->update(['description' => 'Naturally carbonated.']);

// Or set several locales at once:
Product::create(['name' => ['en' => 'Chair', 'sk' => 'Stolička']]);

Slugy sa generujú pre každý jazyk z prekladov názvu — pozrite Slugy a URL. Názvy obchodov sa prekladajú rovnako.

Prejavte lásku k open source

Tento balík je zadarmo pod licenciou MIT. Ak vám šetrí čas, jednorazový príspevok alebo členstvo na Patreone nám pomôže ho ďalej udržiavať, testovať a dokumentovať.

Ďalšie spôsoby podpory vrátane kryptomien

Odoslaním daru súhlasíte s našimi podmienkami prijímania darov.

Chcete to zabudovať do svojho produktu?

Naše balíky integrujeme do zákazkových Laravel a AI riešení. Napíšte nám, na čom pracujete, a ozveme sa do 48 hodín.