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 variantRelá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 idsZverejň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 wayPreklady
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 kryptomienOdoslaní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.