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

Konfigurácia

Balík funguje bez akejkoľvek konfigurácie. Publikovaný config/shops.php celý (bez komentárov):

use RoundlyConsulting\Coupons\Models\Coupon;
use RoundlyConsulting\Shops\Discounts\CouponPackageDiscountResolver;
use RoundlyConsulting\Shops\Orders\NumberGenerators\DefaultNumberGenerator;
use RoundlyConsulting\Shops\Payments\NullPaymentGateway;
use RoundlyConsulting\Shops\Reviews\NullVerifiedPurchaseResolver;
use RoundlyConsulting\Shops\Shipping\FreeShippingMethod;
use RoundlyConsulting\Shops\Shops\Shop;
use RoundlyConsulting\Shops\Support\Tax\DatabaseTaxResolver;

return [
    'shop_model' => env('SHOPS_SHOP_MODEL', Shop::class),
    'key_type' => env('SHOPS_KEY_TYPE', 'bigint'),

    'pricing' => [
        'price_type' => env('SHOPS_PRICE_TYPE', 'gross'),
        'default_currency' => env('SHOPS_DEFAULT_CURRENCY', 'EUR'),
    ],

    'tax_classes' => [
        'standard' => env('SHOPS_TAX_RATE', 20),
        'reduced' => 10,
        'zero' => 0,
    ],

    'tax' => [
        'resolver' => DatabaseTaxResolver::class,
    ],

    'inventory' => [
        'low_stock_threshold' => env('SHOPS_LOW_STOCK_THRESHOLD', 0),
    ],

    'media' => [
        'featured_bucket' => env('SHOPS_MEDIA_FEATURED_BUCKET', 'featured'),
        'gallery_bucket' => env('SHOPS_MEDIA_GALLERY_BUCKET', 'gallery'),
        'variant_bucket' => env('SHOPS_MEDIA_VARIANT_BUCKET', 'gallery'),
        'banner_bucket' => env('SHOPS_MEDIA_BANNER_BUCKET', 'banner'),
        'disk' => env('SHOPS_MEDIA_DISK'),
        'public' => env('SHOPS_MEDIA_PUBLIC', true),
        'responsive_widths' => [320, 640, 1024, 1600],
        'max_file_size' => null,
    ],

    'reviews' => [
        'verified_purchase_resolver' => env(
            'SHOPS_VERIFIED_PURCHASE_RESOLVER',
            NullVerifiedPurchaseResolver::class,
        ),
    ],

    'attributes' => [
        'definitions' => [
            // 'material' => ['type' => 'string'],
            // 'weight'   => ['type' => 'integer', 'rules' => ['min:0']],
        ],
    ],

    'locales' => [
        'fallback' => env('SHOPS_FALLBACK_LOCALE', config('app.fallback_locale', 'en')),
    ],

    'slugs' => [
        'history' => env('SHOPS_SLUG_HISTORY', false),
    ],

    'payment' => [
        'gateway' => env('SHOPS_PAYMENT_GATEWAY', NullPaymentGateway::class),
        'allow_store_credit' => env('SHOPS_ALLOW_STORE_CREDIT', false),
        'store_credit_bucket' => env('SHOPS_STORE_CREDIT_BUCKET', 'store_credit'),
        'refund_to_store_credit' => env('SHOPS_REFUND_TO_STORE_CREDIT', false),
    ],

    'shipping' => [
        'method' => env('SHOPS_SHIPPING_METHOD', FreeShippingMethod::class),
    ],

    'discounts' => [
        'coupon_model' => env('SHOPS_COUPON_MODEL', Coupon::class),
        'resolver' => CouponPackageDiscountResolver::class,
    ],

    'addresses' => [
        'billing_same_as_shipping' => env('SHOPS_BILLING_SAME_AS_SHIPPING', true),
    ],

    'orders' => [
        'number_generator' => DefaultNumberGenerator::class,
    ],
];

Všetky kľúče

KľúčPredvolenéEnvÚčel
shop_modelShops\ShopSHOPS_SHOP_MODELModel tenanta, na ktorý ukazuje každé shop_id — ľubovoľný Eloquent model; trieda, ktorá ním nie je, vyhodí InvalidConfigurationException s názvom kľúča. Rozšírte Shop, aby ste si zachovali funkcie tenanta.
key_typebigintSHOPS_KEY_TYPETyp kľúča polymorfných stĺpcov customer, owner a reference: bigint, uuid alebo ulid. Iná hodnota vyhodí pri spustení migrácií InvalidConfigurationException. Po ich spustení sa už nedá zmeniť.
pricing.price_typegrossSHOPS_PRICE_TYPEgross (daň sa z ceny vyčlení) alebo net (daň sa pripočíta); iná hodnota vyhodí InvalidConfigurationException so zoznamom oboch. Objednávky si ho zafixujú.
pricing.default_currencyEURSHOPS_DEFAULT_CURRENCYZáložná mena ISO 4217 pre obchod bez vlastnej meny, objednávku bez obchodu a predvolený variant produktu bez obchodu.
tax_classesstandard 20, reduced 10, zero 0SHOPS_TAX_RATEZáložné sadzby v celých percentách, keď obchod nemá zodpovedajúcu sadzbu v databáze. Každá sadzba je 0 – 100, číslo alebo reťazec ako „21“; „twenty“ či „19.5“ vyhodí výnimku namiesto sadzby 0 %. Dodaná trieda, ktorej sadzba nie je nastavená — vynechaná, null alebo prázdna (SHOPS_TAX_RATE=) — dostane dodanú sadzbu (standard 20 %, reduced 10 %, zero 0 %), nikdy nie 0 %; vaša vlastná trieda bez nastavenej sadzby použije sadzbu standard a prázdna mapa znamená dodané sadzby. Bez dane nastavte výslovne 0. Env nastavuje len standard.
tax.resolverDatabaseTaxResolver—Určí sadzbu pre kombináciu (obchod, trieda, krajina). Pre dane len z konfigurácie nastavte ConfigTaxResolver.
inventory.low_stock_threshold0SHOPS_LOW_STOCK_THRESHOLDStockRanLow sa spustí raz, keď úprava zníži dostupnú zásobu sledovaného variantu zo stavu nad touto úrovňou na ňu alebo pod ňu. Aspoň 0; neceločíselná hodnota vyhodí výnimku.
media.featured_bucketfeaturedSHOPS_MEDIA_FEATURED_BUCKETSkupina s jedným hlavným obrázkom produktu.
media.gallery_bucketgallerySHOPS_MEDIA_GALLERY_BUCKETSkupina galérie produktu.
media.variant_bucketgallerySHOPS_MEDIA_VARIANT_BUCKETSkupina obrázkov variantu.
media.banner_bucketbannerSHOPS_MEDIA_BANNER_BUCKETSkupina bannera kategórie (jeden obrázok).
media.disknullSHOPS_MEDIA_DISKDisk pre všetky skupiny katalógu; nenastavená hodnota (null alebo prázdna) použije predvolený disk media-library.
media.publictrueSHOPS_MEDIA_PUBLICVerejná (CDN, SEO) alebo súkromná viditeľnosť všetkých skupín katalógu.
media.responsive_widths[320, 640, 1024, 1600]—Rebrík responzívnych šírok; každá šírka sa vygeneruje ako variant responsive-<šírka>. Každá šírka musí byť kladné celé číslo — chybná či prázdna položka vyhodí výnimku, nevynechá sa.
media.max_file_sizenull—Voliteľný limit v bajtoch na obrázok pre všetky skupiny katalógu — produkt, variant aj kategóriu. Nenastavená hodnota (null alebo prázdna) znamená bez limitu; inak aspoň 1.
reviews.verified_purchase_resolverNullVerifiedPurchaseResolverSHOPS_VERIFIED_PURCHASE_RESOLVERRozhoduje, či Product::review() vopred označí recenziu ako overený nákup.
attributes.definitions[]—Definície špecifikácie produktu podľa názvu, registrované pri štarte.
locales.fallbackapp.fallback_localeSHOPS_FALLBACK_LOCALEZáložný jazyk pre preklady a slugy; odvodzuje sa z neho SKU predvoleného variantu.
slugs.historyfalseSHOPS_SLUG_HISTORYUchováva vyradené slugy a na staré URL odpovedá presmerovaním 301 na aktuálne.
payment.gatewayNullPaymentGatewaySHOPS_PAYMENT_GATEWAYStrháva platby za objednávky. Refundácie riadi vaša aplikácia.
payment.allow_store_creditfalseSHOPS_ALLOW_STORE_CREDITShops::order($order)->charge() pred platobnou bránou uplatní kredit kupujúceho.
payment.store_credit_bucketstore_creditSHOPS_STORE_CREDIT_BUCKETPoužitá skupina kreditov; musí byť v mene objednávky.
payment.refund_to_store_creditfalseSHOPS_REFUND_TO_STORE_CREDITPri OrderRefunded vráti konečnú cenu objednávky ako kredit v obchode.
shipping.methodFreeShippingMethodSHOPS_SHIPPING_METHODVáš ShippingMethod; pri vytvorení objednávky cez neho vypočíta cenu dopravy na doručovaciu adresu.
discounts.coupon_modelCoupon (coupons)SHOPS_COUPON_MODELModel za $order->coupon: Coupon z balíka coupons alebo vaša jeho podtrieda. Čokoľvek iné vyhodí InvalidConfigurationException s názvom kľúča.
discounts.resolverCouponPackageDiscountResolver—Z kódu a medzisúčtu tovaru vytvorí DiscountResult.
addresses.billing_same_as_shippingtrueSHOPS_BILLING_SAME_AS_SHIPPINGfromAddressBook() použije primárnu doručovaciu adresu ako fakturačnú, ak fakturačná chýba.
orders.number_generatorDefaultNumberGenerator—Generuje číslo objednávky; musí implementovať NumberGenerator.

Prostredie (env)

Bežné nastavenia sa riadia cez env, takže konfiguráciu publikujete len zriedka:

SHOPS_PRICE_TYPE=gross
SHOPS_DEFAULT_CURRENCY=EUR
SHOPS_TAX_RATE=20
SHOPS_LOW_STOCK_THRESHOLD=5
SHOPS_MEDIA_DISK=s3
SHOPS_SLUG_HISTORY=true
SHOPS_ALLOW_STORE_CREDIT=true
SHOPS_PAYMENT_GATEWAY='App\Payments\AcmePayGateway'

Prepínače typu bool prijmú true/false, 1/0, on/off aj yes/no, takže funguje akýkoľvek zápis v env. Čokoľvek iné vyhodí InvalidConfigurationException s názvom kľúča, takže preklep sa nikdy potichu nezmení na predvolenú hodnotu.

Prísne hodnoty

Ostatné nastavenia sú rovnako prísne. Nenastavený kľúč — vynechaný, null alebo prázdny ('' či len medzery, napríklad riadok SHOPS_DEFAULT_CURRENCY=) — dostane predvolenú hodnotu; hodnota nesprávneho tvaru vyhodí InvalidConfigurationException s názvom kľúča — nič sa nepretypuje na 0 ani nenahradí predvolenou hodnotou:

  • Celé čísla prijmú int alebo reťazec s celým číslom, napríklad „5“ — nikdy „five“ ani „5.5“. Sadzby daňových tried musia byť 0 – 100, prah nízkej zásoby aspoň 0, každá responzívna šírka aj max_file_size aspoň 1.
  • pricing.price_type musí byť gross alebo net; key_type musí byť bigint, uuid alebo ulid.
  • Názvy — mena, názvy skupín, disk médií a záložný jazyk — musia byť reťazce; prázdny názov sa počíta ako nenastavený a dostane predvolenú hodnotu, takže prázdne SHOPS_MEDIA_DISK= znamená disk balíka médií.
  • tax_classes, media.responsive_widths a attributes.definitions musia byť polia a každá definícia atribútu samostatné pole. Každá responzívna šírka musí byť skutočná šírka — prázdna položka v zozname vyhodí výnimku.
  • Daňová trieda bez nastavenej sadzby dostane dodanú sadzbu, takže prázdne SHOPS_TAX_RATE= stále účtuje dodaných 20 % pre triedu standard — ak nechcete účtovať žiadnu daň, nastavte SHOPS_TAX_RATE=0.
  • shop_model musí byť Eloquent model; discounts.coupon_model musí byť Coupon z balíka coupons alebo jeho podtrieda.

php artisan about zobrazí chybné nastavenie ako INVALID namiesto zlyhania, takže ho hneď nájdete.

Poznámky

  • tax_classes sa zadáva v celých percentách (20 = 20 %) pre pohodlie; sadzby v databáze sú v bázických bodoch (1900 = 19,00 %).
  • Obchod môže mať vlastnú menu a každá objednávka si pri vložení zafixuje svoju menu — zmena pricing.default_currency nikdy neprepočíta už vytvorené objednávky.
  • Kredit v obchode vyžaduje, aby mapa currencies balíka credits-for-laravel určila menu skupiny payment.store_credit_bucket.
  • Kľúče driverov prijmú ľubovoľnú triedu, ktorá implementuje kontrakt — alebo kontrakt naviažte sami v service provideri.

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.