Skip to main content
Customers can view their order history and detailed information about each order.

Template locations

Order list page

src/views/pages/customer/orders/index.twig

Order details page

src/views/pages/customer/orders/single.twig

Order list page

Available variables

VariableTypeDescription
page.titlestringPage title
page.slugstringPage slug
ordersCollectionCollection of orders

Code example

{% if orders|length %}
  <salla-orders></salla-orders>
{% else %}
  <div class="no-content-placeholder">
    <i class="sicon-packed-box"></i>
    <p>{{ trans('pages.orders.non_orders') }}</p>
  </div>
{% endif %}

Order details page

Order object

VariableTypeDescription
order.idintOrder ID
order.reference_idintCustomer-facing order number
order.created_atdateOrder creation date
order.sub_totalfloatOrder subtotal
order.totalfloatOrder total
order.cod_costfloatCash on delivery cost
order.can_reorderboolWhether order can be reordered
order.can_cancelboolWhether order can be cancelled
order.can_rateboolWhether order can be rated
order.cancel_urlstringURL to cancel order
order.payment_urlstringURL to complete payment
order.is_pending_paymentboolWhether payment is pending
order.pending_payment_ends_inintSeconds until pending payment expires

Order status

VariableTypeDescription
order.status.namestringStatus name
order.status.iconstringStatus icon class
order.status.colorstringStatus color

Order shipping

VariableTypeDescription
order.shipping.idintShipping method ID
order.shipping.namestringShipping company name
order.shipping.numberstringTracking number
order.shipping.logostringShipping company logo URL
order.shipping.costMoneyShipping cost
order.shipmentsarrayArray of shipment objects

Order tax

VariableTypeDescription
order.tax.amountfloatTax amount
order.tax.percentfloatTax percentage

Order items

VariableTypeDescription
order.itemsarrayArray of order items
order.items[].namestringItem name
order.items[].imagestringItem image URL
order.items[].priceTaxableMoneyItem price
order.items[].quantityintItem quantity
order.items[].totalTaxableMoneyItem total
order.items[].productProductProduct object (nullable)
order.items[].notestringItem note
order.items[].optionsarrayItem options
order.items[].ratingRatingItem rating

Order rating

VariableTypeDescription
order.rating.storeRatingStore rating
order.rating.shippingRatingShipping rating
order.is_ratedboolWhether order is rated

Code examples

Display order header

<div class="order-header">
  <div class="order-date">
    <span>{{ trans('pages.orders.date') }}</span>
    <b>{{ order.created_at|date|number }}</b>
  </div>
  
  <div class="order-status">
    <span style="color: {{ order.status.color }}">
      <i class="{{ order.status.icon }}"></i>
      {{ order.status.name }}
    </span>
  </div>
</div>

Display order items

{% for package in order.packages %}
  <div class="order-package">
    {% if package.shipping_company %}
      <div class="shipping-info">
        <span>{{ package.shipping_company.name }}</span>
        {% if package.shipping_company.number %}
          <span>{{ trans('pages.orders.shipment_no') }}: 
            {{ package.shipping_company.number|raw }}
          </span>
        {% endif %}
      </div>
    {% endif %}
    
    {% for item in package.items %}
      <div class="order-item" data-order-item-id="{{ item.id }}">
        <img src="{{ item.image }}" alt="{{ item.name }}">
        <div class="item-details">
          <h3>{{ item.name }}</h3>
          <p>{{ trans('pages.products.quantity') }}: {{ item.quantity }}</p>
          <p>{{ trans('pages.products.price') }}: {{ item.price|money }}</p>
          <p>{{ trans('pages.orders.total') }}: {{ item.total|money }}</p>
        </div>
      </div>
    {% endfor %}
  </div>
{% endfor %}

Order totals

<salla-order-totals-card order="{{ order }}"></salla-order-totals-card>

Pending payment

{% if order.is_pending_payment %}
  {% if order.pending_payment_ends_in == 0 %}
    <span class="text-red-500">
      {{ trans('pages.orders.pending_payment_expired') }}
    </span>
  {% else %}
    <salla-button href="{{ order.payment_url }}">
      <i class="sicon-wallet"></i>
      {{ trans('pages.orders.finish_payment') }}
    </salla-button>
  {% endif %}
{% endif %}

Reorder button

{% if order.can_reorder %}
  <salla-button 
    onclick="document.querySelector('#reorder-modal').open()">
    <i class="sicon-rotate"></i>
    {{ trans('pages.orders.reorder') }}
  </salla-button>
  
  <salla-modal 
    id="reorder-modal"
    modal-title="{{ trans('pages.orders.reorder') }}"
    sub-title="{{ trans('pages.orders.reorder_confirmation') }}">
    <div slot="footer">
      <salla-button id="btn-reorder">
        {{ trans('common.elements.ok') }}
      </salla-button>
    </div>
  </salla-modal>
{% endif %}

Cancel order

{% if order.can_cancel %}
  <salla-button 
    color="danger"
    onclick="document.querySelector('#modal-order-cancel').open()">
    <i class="sicon-cancel-circle"></i>
    {{ trans('pages.orders.cancel') }}
  </salla-button>
  
  <salla-modal 
    id="modal-order-cancel"
    icon-style="error"
    modal-title="{{ trans('common.elements.warning') }}"
    sub-title="{{ trans('pages.orders.cancel_confirmation') }}">
    <div slot="footer">
      <salla-button id="confirm-cancel" color="danger">
        {{ trans('common.elements.ok') }}
      </salla-button>
    </div>
  </salla-modal>
{% endif %}

Rate order

{% if order.can_rate %}
  <div class="rating-section">
    <h2>{{ trans('pages.order.order_rating_title') }}</h2>
    <p>{{ trans('pages.order.order_rating_message') }}</p>
    <salla-button onclick="salla.event.dispatch('rating::open')">
      {{ trans('pages.rating.rate') }}
    </salla-button>
  </div>
  
  <salla-rating-modal></salla-rating-modal>
{% endif %}

Hooks

Order list hooks

{% hook 'customer:orders.index.items.start' %}
{% hook 'customer:orders.index.items.end' %}

Order details hooks

{% hook 'customer:orders.single.details.start' %}
{% hook 'customer:orders.single.details.end' %}
Both order pages extend the layouts.customer layout, which provides a customer account sidebar with navigation.

Build docs developers (and LLMs) love