1 of 91

Getting started with Pimcore

2 of 91

Igor Benko

Lead Dev at Basilicom GmbH

Twitter: @igorbenko

LinkedIn: benkoigor

3 of 91

Pimcore Partner since 2010

Golden Pimcore Partner since 2015

4 of 91

Our business use case?

5 of 91

6 of 91

7 of 91

  • Configurable laptops
    • color
    • display
    • RAM
    • disk size

8 of 91

Project roadmap

  • CMS
  • PIM
  • DAM
  • Create technical data sheet
  • Send newsletter update

9 of 91

Website

10 of 91

Editable text

11 of 91

Editable text

<div class="slider-area">

<div class="single-slider ptb-240 bg-img">

<div class="container">

<div class="slider-content slider-animated-1">

<h1 class="slider-title">Want to stay healthy drink matcha.</h1>

<p>

Lorem ipsum dolor sit amet, consectetu adipisicing elit sedeiu tempor

inci ut labore et dolore magna aliqua.

</p>

<div class="slider-img-container">

<img class="slider-img" src="/img/product/front.jpg" alt="Our product">

</div>

</div>

</div>

</div>

</div>

12 of 91

Editable text

<h1 class="slider-title">Want to stay healthy drink matcha.</h1>

<h1 class="slider-title">{{ pimcore_input('headline') }}</h1>

<h1 class="slider-title">{{ pimcore_input('headline') }}</h1>

13 of 91

Editable text

14 of 91

Editable image

15 of 91

Editable images

<img class="slider-img" src="/img/product/front.jpg" alt="Our product">

{{ pimcore_image('stage-image', {

'class': 'slider-img'

}) }}

16 of 91

Editable image

17 of 91

18 of 91

All possible editables

19 of 91

PIM

20 of 91

Product Data

21 of 91

Product Data

22 of 91

Product Data

23 of 91

Product Data

24 of 91

Product Data

25 of 91

Product Data

26 of 91

Product Data

27 of 91

Product Data

28 of 91

Product Data

29 of 91

Product Data

30 of 91

Product Data

31 of 91

Product Data

32 of 91

Variants and inheritance

33 of 91

Variants and inheritance

34 of 91

Variants and inheritance

35 of 91

Using Data Objects in code

Get product data

Create product programmatically

$product = \Pimcore\Model\DataObject\Product::getByPath('/products/Laptop Pro Gold - 15 inch');

$product->getName();

$product->getEan();

$product->getImageMain();

$product->getColor()->getName();

$product->getColor()->getColorValue();

$product = new \Pimcore\Model\DataObject\Product();

$product->setKey('New Product');

$product->setParentId(1);

$product->setName('Our new product');

$product->setDescription('Some Text');

$product->save();

36 of 91

All possible Data Object field types

37 of 91

All possible Data Object field types

38 of 91

All possible Data Object field types

39 of 91

All possible Data Object field types

40 of 91

All possible Data Object field types

41 of 91

All possible Data Object field types

42 of 91

All possible Data Object field types

43 of 91

All possible Data Object field types

44 of 91

All possible Data Object field types

45 of 91

All possible Data Object field types

46 of 91

MDM

47 of 91

Brick and mortar stores

48 of 91

DAM

49 of 91

Upload assets with simple drag and drop

50 of 91

Add metadata

51 of 91

Add metadata

52 of 91

Add metadata

53 of 91

Add metadata

54 of 91

EXIF and IPTC embedded metadata

55 of 91

Use assets in code

Get the URL of the image

Get html of the image tag

$asset = \Pimcore\Model\Asset::getByPath('/laptops/new-photos/laptop-gold.png');

$asset->getFullPath();

$asset->getThumbnail()->getHtml();

/laptops/new-photos/laptop-gold.png

<img alt="Hey Google, this is the best laptop over | © Me" title="This is the best laptop ever | © Me" src="/laptops/new-photos/laptop-gold.png">

56 of 91

Use assets in view code

{{ photo.getThumbnail('product-thumbnail').getHtml()|raw }}

Get html of the thumbnail

{{ photo.getMetadata('copyright') }}

Get metadata

{{ photo.getWidth() }}

{{ photo.getHeight() }}

Get dimensions

{{ photo.getFormat() }}

Get format

57 of 91

Thumbnail pipeline

Source image

58 of 91

Thumbnail pipeline�Resize and change background

59 of 91

Thumbnail pipeline�Crop to size for a banner

60 of 91

Thumbnail pipeline�Set a focal point

61 of 91

Thumbnail pipeline�Crop to size for a banner with a focal point

62 of 91

CMS and PIM

Easy integration

63 of 91

PIM data on the website

64 of 91

Show the data objects in frontend

Retrieve the products to display in the controller

$productSelection = new Product\Listing();

$productSelection->setObjectTypes([

AbstractObject::OBJECT_TYPE_VARIANT,

AbstractObject::OBJECT_TYPE_OBJECT

]);

$this->view->productSelection = $productSelection;

65 of 91

Show the data objects in frontend

Original template HTML

{% for i in 0..3 %}

<div class="product-wrapper">

<div class="product-img">

<a href="product-details.html">

<img alt="" src="/img/product/product-1.jpg">

</a>

</div>

<div class="product-content text-left">

<div class="product-title">

<h4><a href="product-details.html">Product</a></h4>

</div>

<div class="product-price-wrapper">

<span>$100.00</span>

</div>

</div>

</div>

{% endfor %}

66 of 91

Show the data objects in frontend

Template with the real DataObject data

{% for product in productSelection %}

<div class="product-wrapper">

<div class="product-img">

<a href="product-details.html">� {{ product.imageMain.getThumbnail('product-selection').getHtml()|raw }}� </a>

</div>

<div class="product-content text-left">

<div class="product-title">

<h4><a href="product-details.html">{{ product.name }}</a></h4>

</div>

<div class="product-price-wrapper">

<span>{{ product.price|number_format(2, ',', '.') }} </span>

</div>

</div>

</div>

{% endfor %}

67 of 91

Show the data objects in frontend

Only changes highlighted

{% for product in productSelection %}

<div class="product-wrapper">

<div class="product-img">

<a href="product-details.html">� {{ product.imageMain.getThumbnail('product-selection').getHtml()|raw }}� </a>

</div>

<div class="product-content text-left">

<div class="product-title">

<h4><a href="product-details.html">{{ product.name }}</a></h4>

</div>

<div class="product-price-wrapper">

<span>{{ product.price|number_format(2, ',', '.') }} </span>

</div>

</div>

</div>

{% endfor %}

68 of 91

Single source of truth

69 of 91

Web2Print

70 of 91

Create PDFs

Use cases:

  • Technical Data Sheets
  • Catalogues
  • Marketing Brochures
  • Customizable Products
  • etc.

Technologies:

  • PDF Reactor (license)
  • wkhtmltopdf (open source)
  • EasyCatalog (license)

71 of 91

E-mail & Newsletter

72 of 91

Send E-mail or Newsletter

73 of 91

API

74 of 91

Why and where can we use the API?

Use cases:

  • ERP (Enterprise-Resource-Planning System)
  • CRM (Customer Relations Management)
  • Ecommerce system
  • Single-page Apps
  • Microsites
  • etc.

75 of 91

Create API Endpoint in Datahub config

76 of 91

Query the GraphQL API

{

getProductListing {

edges {

node {

id,

classname,

key,

ean

}

}

}

}

{

"data": {

"getProductListing": {

"edges": [

{

"node": {

"id": "2",

"classname": "Product",

"key": "Laptop Pro Gold - 15 inch",

"ean": "31234512345"

}

},

{

"node": {

"id": "6",

"classname": "Product",

"key": "Laptop Pro Blue - 15 inch",

"ean": "31234512347"

}

},

{

"node": {

"id": "8",

"classname": "Product",

"key": "Laptop Pro Green - 15 inch",

"ean": "31234512348"

}

},

{

"node": {

"id": "12",

"classname": "Product",

"key": "Laptop Pro Gold - 13 inch",

"ean": "31234512345"

}

},

{

"node": {

"id": "13",

"classname": "Product",

"key": "Laptop Pro Blue - 13 inch",

"ean": "31234512347"

}

},

{

"node": {

"id": "14",

"classname": "Product",

"key": "Laptop Pro Green - 13 inch",

"ean": "31234512348"

}

}

]

}

}

}

77 of 91

API & Headless CMS

78 of 91

Pimtastic Global

www.pimtastic.com

Pimtastic UK

www.best-laptop.co.uk

Pimtastic Italy

www.miglior-laptop.it

Pimtastic Spain

www.melhor-laptop.pt

Pimtastic German

www.bester-laptop.de

79 of 91

System overview

80 of 91

System overview

Website

81 of 91

System overview

Website

Microsites

82 of 91

System overview

Website

Microsites

Web2Print

83 of 91

System overview

Website

Microsites

Web2Print

Newsletter

84 of 91

System overview

Website

Microsites

Web2Print

Newsletter

Mobile App

85 of 91

System overview

Website

Microsites

Web2Print

Newsletter

Mobile App

ERP

86 of 91

System overview

Website

Microsites

Web2Print

Newsletter

Mobile App

ERP

CRM

87 of 91

System overview

Website

Microsites

Web2Print

Newsletter

Mobile App

Digital signage

ERP

CRM

88 of 91

System overview

Website

Microsites

Web2Print

Newsletter

Mobile App

Digital signage

ERP

CRM

Unicorns are real!

89 of 91

What have we achieved today?

  • we centralized the PIM/MDM data - we established the single source of truth
  • we uploaded single high quality assets and used them in multiple different places with different configurations (size, crop, background color, etc.)
  • we created a system that can be easily accessed by our other systems inside or outside of the company
  • IMPROVED THE DATA QUALITY OF OUR PRODUCT AND MASTER DATA

90 of 91

THANK YOU!

91 of 91

ANY QUESTIONS?