comsa / sulu-shopping-cart
Requires
- php: ^8.0
- dantleech/phpcr-migrations-bundle: ^1.2
- doctrine/orm: >=2.0
- mollie/mollie-api-php: ^2.0
- phpoffice/phpspreadsheet: ^1.21
- sulu/sulu: ^2.0
- symfony/config: ^4.3 || ^5.0
- symfony/dependency-injection: ^4.3 || ^5.0
- symfony/event-dispatcher: ^4.3 || ^5.0
- symfony/form: ^4.3 || ^5.0
- symfony/http-foundation: ^4.3 || ^5.0
- symfony/http-kernel: ^4.3 || ^5.0
- symfony/mailer: ^4.3 || ^5.0
- twig/twig: >=2.0 || ^3.0
Requires (Dev)
- jackalope/jackalope-doctrine-dbal: ^1.3.4
- jackalope/jackalope-jackrabbit: ^1.3
- phpcr/phpcr-shell: ^1.1
- dev-master
- 4.3.1
- 4.3.0
- 4.2.2
- 4.2.1
- 4.2.0
- 4.1.1
- 4.1.0
- 4.0.0
- 3.3.1
- 3.3.0
- 3.2.11
- 3.2.10
- 3.2.9
- 3.2.8
- 3.2.7
- 3.2.6
- 3.2.5
- 3.2.4
- 3.2.3
- 3.2.2
- 3.2.1
- 3.2.0
- 3.1.17
- 3.1.16
- 3.1.15
- 3.1.14
- 3.1.13
- 3.1.12
- 3.1.11
- 3.1.10
- 3.1.9
- 3.1.8
- 3.1.7
- 3.1.6
- 3.1.5
- 3.1.4
- 3.1.3
- 3.1.2
- 3.1.1
- 3.1.0
- 3.0.2
- 3.0.1
- 3.0.0
- 2.4.8
- 2.4.7
- 2.4.6
- 2.4.5
- 2.4.4
- 2.4.3
- 2.4.2
- 2.4.1
- 2.4.0
- 2.3.1
- 2.3.0
- 2.2.1
- 2.2.0
- 2.1.3
- 2.1.2
- 2.1.1
- 2.1.0
- 2.0.0
- 1.1.1
- 1.1.0
- 1.0.0
This package is auto-updated.
Last update: 2024-09-19 19:12:37 UTC
README
composer req comsa/sulu-shopping-cart
添加到 assets/admin/package.json
"sulu-shopping-cart-bundle": "file:node_modules/@sulu/vendor/comsa/sulu-shopping-cart/Resources/js"
运行 npm install
添加到 assets/admin/app.js
import 'sulu-shopping-cart-bundle/admin'
并使用 npm run build
进行构建,这可能需要一段时间 :)
设置前端 js:添加到 package.json
"sulu-shopping-cart-bundle": "file:../../vendor/comsa/sulu-shopping-cart/Resources/js"
添加到 index.js
import 'sulu-shopping-cart-bundle/website';
并使用 npm run build
进行构建或在使用开发环境时使用 npm run dev
将路由添加到 routes_admin.yaml
和 routes_website.yaml
在:config/packages/doctrine.yaml
doctrine:
orm:
mappings:
SuluShoppingCartBundle:
is_bundle: true
type: attribute
dir: '/Entity'
prefix: 'Comsa\SuluShoppingCart\Entity'
alias: SuluShoppingCart
在:config/routes_admin.yaml
sulu_shopping_cart_admin:
type: rest
resource: "@SuluShoppingCartBundle/Resources/config/routes/admin.yaml"
prefix: /admin/api
sulu_shopping_cart_admin_controller:
resource: "@SuluShoppingCartBundle/Resources/config/routes/adminController.yaml"
在:config/routes_website.yaml
sulu_shopping_cart_website:
resource: "@SuluShoppingCartBundle/Resources/config/routes/website.yaml"
默认配置
根据您的需求进行调整
parameters:
#Configure the correct value in the .env file
comsa_sulu_shopping_mollie_api_key: '%env(COMSA_SC_MOLLIE_API_KEY)%'
Make sure your product template is called "comsa_product".
<property name="product" type="single_product_selection">
<meta>
<title lang="en">Product</title>
<title lang="nl">Product</title>
</meta>
</property>
将以下内容添加到您的产品模板中,这将渲染添加到购物车部分
{{ render(controller('Comsa\\SuluShoppingCart\\Controller\\CartController::addToCart', {'uuid': id})) }}
要将购物车添加到某个位置,请使用以下内容,您可以从自己的模板中覆盖此模板
{% include '@SuluShoppingCart/cart-small.html.twig' %}
扩展实体
在 src/entity 中创建 CartItem.php 类
<?php
declare(strict_types=1);
namespace App\Entity;
use Comsa\SuluShoppingCart\Entity\CartItem as BaseCartItem;
use Doctrine\ORM\Mapping\Entity;
#[Entity()]
class CartItem extends BaseCartItem
{
}
在 src/entity 中创建 Order.php
<?php
namespace App\Entity;
use Comsa\SuluShoppingCart\Entity\Order as BaseOrder;
use Doctrine\ORM\Mapping as ORM;
/**
* @ORM\Entity
*/
class Order extends BaseOrder
{
}
在这里您可以定义自定义属性。
例如
<?php
namespace App\Entity;
use Comsa\SuluShoppingCart\Entity\CartItem as BaseCartItem;
use Doctrine\ORM\Mapping as ORM;
/**
* @ORM\Entity
*/
class CartItem extends BaseCartItem
{
/**
* @ORM\Column(type="text", length=6000, nullable=true)
*/
private $accessoryText;
public function getAccessoryText(): ?string
{
return $this->accessoryText;
}
public function setAccessoryText(?string $accessoryText)
{
$this->accessoryText = $accessoryText;
}
}
请确保遵循 Symfony 编码标准,并且命名空间与上面所示正确。
扩展实体后,更新您的数据库
php bin/console doctrine:schema:update -f
扩展表单
通过扩展表单扩展基本表单的自定义属性。
例如
<?php
namespace App\Form\Extension;
use Comsa\SuluShoppingCart\Form\AddToCartType;
use Symfony\Component\Form\AbstractTypeExtension;
use Symfony\Component\Form\Extension\Core\Type\TextType;
use Symfony\Component\Form\FormBuilderInterface;
class AddToCartTypeExtension extends AbstractTypeExtension
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder->add("accessoryText", TextType::class);
}
public static function getExtendedTypes(): iterable
{
return [
AddToCartType::class
];
}
}
请确保命名空间与上面所示正确。
加载设置
要配置支付方法和运输方法,需要加载设置。
将以下内容复制并粘贴到 AppFixtures.php 中,位于 App/DataFixtures
<?php
namespace App\DataFixtures;
use Comsa\SuluShoppingCart\DataFixtures\AppSeed;
use Doctrine\Bundle\FixturesBundle\Fixture;
use Doctrine\Common\DataFixtures\DependentFixtureInterface;
use Doctrine\Persistence\ObjectManager;
class AppFixtures extends Fixture implements DependentFixtureInterface
{
public function load(ObjectManager $manager)
{
}
public function getDependencies(): array
{
return [
AppSeed::class
];
}
}
运行以下命令以加载设置
php bin/console doctrine:fixtures:load --append
请确保它们根据您的需求正确配置。
翻译
扩展属性将自动在订单摘要中渲染。
翻译可以在应用根目录中的 translations/sulu
文件夹内进行。文件名应为 admin.{locale}.yaml
。
例如
properties:
accessoryText: "Tekst op kaart"
请确保将所有自定义属性输入到上面所示 properties
命名空间下。
模板(可选)
产品概述 XML
<?xml version="1.0" ?>
<type name="product_overview" xmlns="http://schemas.sulu.io/template/template"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xi="http://www.w3.org/2001/XInclude"
xsi:schemaLocation="http://schemas.sulu.io/template/template http://schemas.sulu.io/template/template-1.0.xsd">
<meta>
<title lang="en">Product Overview</title>
<title lang="nl">Product Overzicht</title>
</meta>
<properties>
<property name="products" type="smart_content">
<meta>
<title lang="en">Products</title>
<title lang="nl">Producten</title>
</meta>
<params>
<param name="provider" value="pages"/>
<param name="max_per_page" value="16"/>
<param name="page_parameter" value="page"/>
<param name="properties" type="collection">
<param name="title" value="title"/>
<param name="text" value="text"/>
<param name="product" value="product"/>
<param name="images" value="images"/>
<param name="rating" value="rating"/>
<param name="description" value="description"/>
<param name="imageFormat" value="imageFormat"/>
<param name="location" value="location"/>
<param name="sold" value="sold"/>
<param name="licence" value="licence"/>
<param name="price" value="price"/>
<param name="btntext" value="btntext"/>
<param name="status" value="status"/>
</param>
</params>
</property>
</properties>
</type>
产品概述 TWIG
<section class="product-overview">
<div class="row gx-5">
{% for page in block.products %}
{% set product = page.product %}
{% if product.thumbnail %}
{% set thumbnail = sulu_resolve_media(product.thumbnail, app.request.locale) %}
{% else %}
{% set thumbnail = false %}
{% endif %}
<article class="col-12 col-sm-6 col-xl-3">
<div class="card mx-auto my-2">
<div class="image-wrapper">
{% if thumbnail %}
<img src="{{ thumbnail.formats['x380_default'] }}" class="card-img-top" alt="{{ product.title }}" title="{{ product.title }}">
{% else %}
<p>{{ 'comsa_sulu_shopping_cart.no_thumbnail'|trans }}</p>
{% endif %}
</div>
<div class="card-body">
<h5 class="card-title">{{ product.title }}</h5>
<h6 class="card-title">€{{ product.price|number_format(2) }}</h6>
<a href="{{ sulu_content_path(page.url) }}" class="btn btn-primary">Bekijk product</a>
</div>
</div>
</article>
{% endfor %}
{% if pagination is defined and pagination == true %}
<nav class="mt-3" aria-label="{{ 'label.paginering'|trans|capitalize }} ">
{% set page = viewLink.page %}
<ul class="pagination {% if page -1 < 1 %} justify-content-end {% endif %}">
{% if page-1 >= 1 %}
<li class="page-item">
<a class="page-link" href="{{ sulu_content_path(content.url) }}?page={{ page-1 }}" aria-label="Previous">
<span aria-hidden="true">«</span>
<span>{{ 'label.previous'|trans|capitalize }}</span>
</a>
</li>
{% endif %}
{% if viewLink.hasNextPage %}
<li class="page-item">
<a class="page-link" href="{{ sulu_content_path(content.url) }}?page={{ page+1 }}" aria-label="Next">
<span>{{ 'label.next'|trans|capitalize }}</span>
<span aria-hidden="true">»</span>
</a>
</li>
{% endif %}
</ul>
</nav>
{% endif %}
</div>
</section>
产品页面 HTML
{% extends "base.html.twig" %}
{% block content %}
{% set product = content.product %}
<div class="product-details-wrapper">
<div class="container">
<div class="row py-5">
{% if product.thumbnail %}
<div class="col-md-6">
{% set thumbnail = sulu_resolve_media(product.thumbnail, app.request.locale) %}
<div class="product-thumbnail-wrapper">
<img class="product-thumbnail" src="{{ thumbnail.formats['default'] }}" alt="{{ product.title }}"
title="{{ product.title }}">
</div>
</div>
{% else %}
<div class="col-md-6">
<div class="product-thumbnail-wrapper img-thumbnail d-flex align-items-center justify-content-center">
<p>Geen foto beschikbaar</p>
</div>
</div>
{% endif %}
<div class="col-md-6 mt-3 d-flex">
<div class="mx-auto product-info">
<h1>{{ product.title }}</h1>
{% if product.code %}
<p class="text-muted " style="font-size: 0.8rem;"> {{ 'comsa_sulu_shopping_cart.code'|trans }}
: {{ product.code }}</p>
{% endif %}
{% if product.description %}
{{ product.description|raw }}
{% else %}
{{ 'comsa_sulu_shopping_cart.no_description'|trans }}
{% endif %}
<div class="products">
<p class="price">
<span>€{{ product.price|number_format(2) }}</span>
</p>
</div>
{% if product.followStock %}
{% if product.stock > 0 %}
{{ render(controller('Comsa\\SuluShoppingCart\\Controller\\CartController::addToCart', {'uuid': id})) }}
{% else %}
<div class="alert alert-danger" role="alert">
{{ 'comsa_sulu_shopping_cart.not_available'|trans }}
</div>
{% endif %}
{% else %}
{{ render(controller('Comsa\\SuluShoppingCart\\Controller\\CartController::addToCart', {'uuid': id})) }}
{% endif %}
</div>
</div>
{% include 'blocks/all.html.twig' with { 'blocks': content.extendedBlocks } %}
</div>
</div>
</div>
{% endblock %}
导入产品
可以使用以下命令导入产品
comsa:shopping:import-products <inputfile> <parent-page-id> <webspace-key> <locale>
参数表示以下内容
<tr>
<th>Argument</th>
<th>Explanation</th>
<th>Requirements</th>
</tr>
<tr>
<td>Inputfile</td>
<td>The file that is being used to import the products.</td>
<td>Check chapter "Inputfile Requirements"</td>
</tr>
<tr>
<td>Parent Page Id</td>
<td>Uuid of the page where the import will run. All categories will have this page as parent.</td>
<td>/</td>
</tr>
<tr>
<td>Webspace key</td>
<td>Key of the webspace where the pages must bee made</td>
<td>/</td>
</tr>
<tr>
<td>Locale</td>
<td>For which locale must the pages be made?</td>
<td>/</td>
</tr>
输入文件要求
- 文件必须是一个 Xlsx 文件。
- 输入文件参数必须包含文件的完整路径(例如。public/uploads/files/products.xlsx)。
- 产品必须从第二行开始。
- 文件必须具有以下结构
A | B | C | D | E | F | G | H | |
---|---|---|---|---|---|---|---|---|
1 | 产品代码 | 类别 | 标题 | 描述 | 价格 | 单位 | 跟踪库存 | 库存 |
2 | PRODUCTS START |
输入文件字段要求
字段 | 必需 | 要求 |
---|---|---|
产品代码 | False | 最大长度:255 |
类别 | True | / |
标题 | True | 最大长度:255 |
描述 | False | 最大长度:65534 |
价格 | True | 必须以欧元表示(例如。€22,70) |
单位 | True | 必须
|
跟踪库存 | True | 必须是 "是" 或 "否" |
库存 | False | 只有整数 |