22 Mar 2019

feedSymfony Blog

FontAwesome adds Symfony to their icon collection

FontAwesome is the web's most popular icon set and toolkit. You've probably seen their icons in thousands of web sites and apps. In their latest 5.8 version, released on March 21, they added and/or improved 97 icons. One of those new icons is the Symfony logo, which has been included in their "brands" collection:

How can you display the Symfony icon? First, make sure to use FontAwesome 5.8 or higher. Then, add this HTML code:

<i class="fab fa-symfony"></i>

The inclusion of the Symfony icon was a nice example of community work. FontAwesome allows anyone to request and vote for new icon ideas. Thanks to your votes, the request to add the Symfony logo has become the second most upvoted request in FontAwesome's history. Thanks for your continuous Symfony support!

Be trained by Symfony experts - 2019-04-1 Clichy - 2019-04-4 Clichy - 2019-04-8 Clichy

22 Mar 2019 8:41am GMT

21 Mar 2019

feedDjango community aggregator: Community blog posts

Best way to count distinct indexed things in PostgreSQL

`SELECT COUNT(*) FROM (SELECT DISTINCT my_not_unique_indexed_column FROM my_table) t`

21 Mar 2019 10:13pm GMT

Coding for Time Zones & Daylight Saving Time — Oh, the Horror

In this post, I review some reasons why it's really difficult to program correctly when using times, dates, time zones, and daylight saving time, and then I'll give some advice for working with them in Python and Django. Also, I'll go over why I hate daylight saving time (DST).


Let's start with some problems with time zones, because they're bad enough even before we consider DST, but they'll help us ease into it.

Time Zones Shuffle

Time zones are a human invention, and humans tend to change their minds, so time zones also change over time.

Many parts of the world struggle with time changes. For example, let's look at the Pacific/Apia time zone, which is the time zone of the independent country of Samoa. Through December 29, 2011, it was -11 hours from Coordinated Universal Time (UTC). From December 31, 2011, Pacific/Apia became +13 hours from UTC.

What happened on December 30, 2011? Well, it never happened in Samoa, because December 29, 23:59:59-11:00 is followed immediately by December 31, 0:00:00+13:00.

Date Time Zone Date Time Zone
2011-12-29 23:59:59 UTC-11 2011-12-30 10:59:59 UTC
2018-12-31 00:00:00 UTC+13 2011-12-30 11:00:00 UTC

That's an extreme example, but time zones change more often than you might think, often due to changes in government or country boundaries.

The bottom line here is that even knowing the time and time zone, it's meaningless unless you also know the date.

Always Convert to UTC?

As programmers, we're encouraged to avoid issues with time zones by "converting" times to UTC (Coordinated Universal Time) as early as possible, and convert to the local time zone only when necessary to display times to humans. But there's a problem with that.

If all you care about is the exact moment in the lifetime of the universe when an event happened (or is going to happen), then that advice is fine. But for humans, the time zone that they expressed a time in can be important, too.

For example, suppose I'm in North Carolina, in the eastern time zone, but I'm planning an event in Memphis, which is in the central time zone. I go to my calendar program and carefully enter the date and "3:00 p.m. CST". The calendar follows the usual convention and converts my entry to UTC by adding 6 hours, so the time is stored as 9:00 p.m. UTC, or 21:00 UTC. If the calendar uses Django, there's not even any extra code needed for the conversion, because Django does it automatically.

The next day I look at my calendar to continue working on my event. The event time has been converted to my local time zone, or eastern time, so the calendar shows the event happening at "4:00 p.m." (instead of the 3:00 p.m. that it should be). The conversion is not useful for me, because I want to plan around other events in the location where the event is happening, which is using CST, so my local time zone is irrelevant.

The bottom line is that following the advice to always convert times to UTC results in lost information. We're sometimes better off storing times with their non-UTC time zones. That's why it's kind of annoying that Django always "converts" local times to UTC before saving to the database, or even before returning them from a form. That means the original timezone is lost unless you go to the trouble of saving it separately and then converting the time from the database back to that time zone after you get it from the database. I wrote about this before.

By the way, I've been putting "convert" in scare quotes because talking about converting times from one time zone to another carries an implicit assumption that such converting is simple and loses no information, but as we see, that's not really true.


Daylight saving time (DST) is even more of a human invention than time zones.

Time zones are a fairly obvious adaptation to the conflict between how our bodies prefer to be active during the hours when the sun is up, and how we communicate time with people in other parts of the world. Historical changes in time zones across the years are annoying, but since time zones are a human invention it's not surprising that we'd tweak them every now and then.

DST, on the other hand, amounts to changing entire time zones twice every year. What does US/eastern time zone mean? I don't know, unless you tell me the date. From January 1, 2018 to March 10, 2018, it meant UTC-5. From March 11, 2018 to November 3, 2018, it meant UTC-4. And from November 4, 2018 to December 31, 2018, it's UTC-5 again.

But it gets worse. From Wikipedia:

The Uniform Time Act of 1966 ruled that daylight saving time would run from the last Sunday of April until the last Sunday in October in the United States. The act was amended to make the first Sunday in April the beginning of daylight saving time as of 1987. The Energy Policy Act of 2005 extended daylight saving time in the United States beginning in 2007. So local times change at 2:00 a.m. EST to 3:00 a.m. EDT on the second Sunday in March and return at 2:00 a.m. EDT to 1:00 a.m. EST on the first Sunday in November.

So in a little over 50 years, the rules changed 3 times.

Even if you have complete and accurate information about the rules, daylight saving time complicates things in surprising ways. For example, you can't convert 2:30 a.m. March 11, 2018. in US/eastern time zone to UTC, because that time never happened - our clocks had to jump directly from 1:59:59 a.m. to 3:00:00 a.m. See below:

Date Time Zone Date Time Zone
2018-03-11 1:59:59 EST 2018-03-11 6:59:59 UTC
2018-03-11 3:00:00 EDT 2018-03-11 7:00:00 UTC

You can't convert 1:30 a.m. November 4, 2018, in US/eastern time zone to UTC either, because that time happened twice. You would have to specify whether it was 1:30 a.m. November 4, 2018 EDT or 1:30 a.m. November 4, 2018 EST:

Date Time Zone Date Time Zone
2018-11-04 1:00:00 EDT 2018-11-04 5:00:00 UTC
2018-11-04 1:30:00 EDT 2018-11-04 5:30:00 UTC
2018-11-04 1:59:59 EDT 2018-11-04 5:59:59 UTC
2018-11-04 1:00:00 EST 2018-11-04 6:00:00 UTC
2018-11-04 1:30:00 EST 2018-11-04 6:30:00 UTC
2018-11-04 1:59:59 EST 2018-11-04 6:59:59 UTC

Advice on How to Properly Manage datetimes

Here are some rules I try to follow.

When working in Python, never use naive datetimes. (Those are datetime objects without timezone information, which unfortunately are the default in Python, even in Python 3.)

Use the pytz library when constructing datetimes, and review the documentation frequently. Properly managing datetimes is not always intuitive, and using pytz doesn't prevent me from using it incorrectly and doing things that will provide the wrong results only for some inputs, making it really hard to spot bugs. I have to triple-check that I'm following the docs when I write the code and not rely on testing to find problems.

Let me strengthen that even further. It is not possible to correctly construct datetimes with timezone information using only Python's own libraries when dealing with timezones that use DST. I must use pytz or something equivalent.

If I'm tempted to use datetime.replace, I need to stop, think hard, and find another way to do it. datetime.replace is almost always the wrong approach, because changing one part of a datetime without consideration of the other parts is almost guaranteed to not do what I expect for some datetimes.

When using Django, be sure USE_TZ = True. If Django emits warnings about naive datetimes being saved in the database, treat them as if they were fatal errors, track them down, and fix them. If I want to, I can even turn them into actual fatal errors; see this Django documentation.

When processing user input, consider whether a datetime's original timezone needs to be preserved, or if it's okay to just store the datetime as UTC. If the original timezone is important, see this post I wrote about how to get and store it.


Working with human times correctly is complicated, unintuitive, and needs a lot of careful attention to detail to get right. Further, some of the oft-given advice, like always working in UTC, can cause problems of its own.

21 Mar 2019 9:45pm GMT

feedSymfony Blog

The Symfony and API Platform Hackathon is Coming!

The European Union, through its EU-FOSSA 2 program will organise several hackathons in the coming months. We are thrilled and honoured that the first will be the Symfony and API Platform Hackathon on April 6 and 7, 2019, in Brussels.

The purpose of these events is to improve and contribute to Open Source Software projects used by the European Union, bring together key contributors from the FOSS community and collaborate on creating innovative solutions. We have set the following goals for our hackathon:


The hackathon is invite-only and over 50 active Symfony and API Platform contributors and European Commission developers have accepted this challenge and will dedicate an entire weekend towards the project.

We have done our best to gather a diverse group of participants from amongst active contributors. Some will even come from non-EU countries such as Cuba, Morocco, Russia, and Switzerland! Thanks to all of them for taking part in this event!

This will also be the first time that many contributors will meet in person. And because we spend so much time online critiquing and reviewing each other's contributions, the event will be a unique opportunity to socialise in real life and strengthen friendships inside the community.


The main hackathon organisers have been Nicolas Grekas, from the Symfony company, and Jean-François Hovinne, from the European Commission. The hackathon will be attended by key Symfony figures such as Fabien Potencier, Christophe Coevoet, and Lukas Kahwe Smith, as well as EU-FOSSA 2 members like Marek Przybyszewski, Saranjit Arora, Denislava Simeonova and Lara Canto E Castro.

Thanks to them and to Suwom Ham and others at BeMyApp for providing logistical support.

About EU-FOSSA 2

This initiative is part of the EU-FOSSA 2 project (EU-Free and Open Source Software Auditing) managed by DIGIT (European Commission's Directorate-General for Informatics).

EU-FOSSA 2 offers a systematic approach for the EU institutions to ensure that widely used and critical FOSS, is safe and secure. The project helps reinforce the contribution of EU institutions to ensure and maintain integrity and security of key open source software.

More information about EU-FOSSA 2.

Be trained by Symfony experts - 2019-04-1 Clichy - 2019-04-4 Clichy - 2019-04-8 Clichy

21 Mar 2019 8:19am GMT

feedDjango community aggregator: Community blog posts

Backup & Load Live Heroku PostgreSQL Database to Local Django Project

I've used [Django fixtures](ht...

21 Mar 2019 7:04am GMT

20 Mar 2019

feedSymfony Blog

Speak at SymfonyLive Berlin 2019!

SymfonyLive Berlin is already on the horizon! As every year, we'll meet from September 24th to 27th at the MOA in Berlin to bring the German Symfony community together and talk about Symfony and PHP development in general.

The CfP is live, we are looking forward to your talk proposals! This is going to be the biggest SymfonyLive Berlin ever, we are going from a single day of talks to two days, and from two parallel tracks to three!

What are we looking for?

We traditionally host a variety of talks, and besides lots of Symfony content, we are looking for talks around the whole ecosystem and related technologies. If you want to talk about software architecture, development best practices, clean code, testing, DevOps, frontend technologies, or eCommerce or CMS, we are interested!

Speaking of eCommerce and CMS, this year we are dedicating a whole track to eCommerce and CMS systems based on Symfony. So if you work for or with Shopware, Sulu, ezPublish, Drupal, Pimcore, Akeneo, ORO, Contao, Symfony CMF, Sylius (if I forgot someone, sorry, please tell me) - your talk is very welcome at SymfonyLive Berlin!

Where? How? Who?

You can hand in your papers until March 31st at cfpberlin.live.symfony.com.

As always, the conference main language will be German. We still encourage international speakers to submit their talks though, as we will host a limited number of talks in English.

We are dedicated to provide a safe and comfortable environment for every single person at our events. If you hand in your papers, you agree with our Code of Conduct (berlin2019.live.symfony.com/conduct). If you have any special requirements, needs, wishes, or just questions, please contact us at events@sensiolabs.de, we are there to help.


We have already published our full workshop schedule (berlin2019.live.symfony.com/workshops), a whopping 24 workshops over two days, that's 12 workshops per day. Every single one is designed to deliver state of the art, hands on content around Symfony and related web development technologies that you'll come across in your day job. All workshops will be presented by experienced trainers and developers from the core of the Symfony community. The early bird is still available! You can grab your ticket at berlin2019.live.symfony.com/tickets.

That's all for now - we are very much looking forward to seeing you at the conference!

Be trained by Symfony experts - 2019-04-1 Clichy - 2019-04-4 Clichy - 2019-04-8 Clichy

20 Mar 2019 10:15am GMT

08 Mar 2019

feedeZ News

[Sneak Peak] The Content Tree Strikes Back

How do we use it?

The Content Tree is accessible on the left menu (discovery bar) in the Content tab of the administration interface. Once selected, the Content Tree will be displayed and will allow editors to locate and access various content items in a matter of seconds. Since the content tree is constantly visible, editors can easily expand different parts of the tree (aka 'sub-trees') and be able to jump from one content item to another with the click of a button. This becomes extremely valuable when editors need to navigate through hundreds (or worse, thousands) of different content items.

Content Tree vs. other eZ navigation features

Besides the content tree, eZ Platform provides users multiple navigation options such as the UDW, bookmarks, and search. All four features can help the user find their content, but each feature serves a different purpose. The UDW is a tool for browsing, searching and selecting content. It is an effective navigation tool in the context of a specific operation on one content item (i.e. embedding content in block or editing the content item). The main constraint with UDW is that users want to see and navigate through the full content structure. With the UDW, the editor can only view and select one path. All the more reason why the content tree is great when the editor wants to locate a piece of content and visualize other paths at the same time.

The bookmarks feature helps editors easily find content they previously saved, knowing they would need them or would have to reuse them later, or in a frequent manner. Search on the other hand, let the editor find content just by looking for words and/or sentence that might be present in the various fields of the content regardless of where the content has been stored in the content repository. The editor may use different filters to optimize their results. Although these two last options allow editors to better streamline their work, they don't provide a complete view of the content structure or the flexibility to access different content views.

How can we improve an editor's performance using Content Tree?

Content Trees can become quite extensive and at times difficult to manage when an organization possesses millions of content items (ex. images, media, etc.). Take for instance a scenario in which an editor accesses a folder with 10,000 images. This can lead to a long page load time. To prevent this from occurring, we have introduced different parameters that can be set in order to better optimize and configure your content tree for better performance. For example, when an editor expands the content tree, the system will not be required to upload thousands of images. The developer can define for the project the specific parameters (# of sub-items under the container, maximum # items that can load, the depth of the tree, and what are the content type you want to exclude) in order to limit the number of items that will load every time.

What to expect in the future?

The Content Tree that will ship with v2.5 is only a first iteration. In the future, we plan to advance the performance of the tree by modifying how it requests the content repository, by moving from using REST queries to GraphQL queries. GraphQL will allow the tree branches to load faster which will provide a more efficient and satisfying editorial experience.

We are very excited about the upcoming release of eZ Platform v2.5 which will be supported for the long term (LTS). We believe that businesses will benefit substantially from this new version, such as improving content creation capabilities and providing developers with new ways to access content.

In the upcoming weeks, we will be releasing a sneak peek on the GraphQL query system, the integration of Webpack Encore, the inline custom tag and other novelties that are expected to be shipped with eZ Platform v2.5. Until then, if you're interested or have any questions, please feel free to leave a comment on this blog post or on www.discuss.ezplatform.com or www.portal.productboard.com/ezproduct. And of course, you can always reach out to us at productmanagement@ez.no.

08 Mar 2019 4:53pm GMT

07 Feb 2019

feedeZ News

Recapping eZ’s Global Partner Conference - Malaga 2019

Day 1

The first day's agenda on Thursday, January 24th was compact with updates revolving around eZ's Partner Program and product portfolio as well as sales and technical training on how to demo and sell eZ products. eZ's CEO, Morten Ingebrigtsen presented an overview of the company's performance in 2018 and shared updates on eZ's strategy and vision moving forward. He highlighted how eZ dedicated resources can better drive the partner program by introducing Global Partner Manager, Camilla Unger, and he announced the Customer Success team, led by Lars Eirik Rønning, to work more closely with customers.

At our partner meeting in Cologne last June, we announced that we were going to make some adjustments to our current partner program. eZ's Global Partner Manager, Camilla Unger was excited to now introduce these adjustments at the Malaga conference. The main reasons for these updates are to provide our partners with a partner program that brings them even more value. The additions to the program are mainly related to enablement and co-marketing activities with our partners. We are excited and ready to make 2019 a great year together with our partners!

Along with our updated eZ Partner Program, Camilla advanced our new Sales and Certification Program. During the presentation, it was great to see partners learn about our proposal and practice it in an interactive way. The amount of enthusiasm and positive spirit among our partners helped make our time together both productive and fun! We were thrilled to see so many leaving Malaga "sales certified." It was also the launch of our Annual Update Training, which mainly focused on the recent updates on our Long Term Supported Release. It was an intense day, perhaps more so for the partners with less experience with projects on eZ Platform version 2, but partners should be updated on the features coming with the next LTS.

Following the eZ partner channel update by Camilla, Chief Product Officer, Roland Benedetti, gave an overview of eZ's market positioning and product strategy moving forward. He presented consumers' expectations for a holistic user experience regardless of the channel they select to engage with a brand. Roland highlighted how eZ's unified solution approach helps businesses to take care of all their business processes and to meet customers' expectations as they progress in their purchasing journey.

Following Roland's presentation, partners split into business and technical tracks for further discussion.

Sales Training: How to Sell eZ

The business track, led by the product team, provided details on product capabilities and looked at different areas eZ platform is covering: content management, personalization, e-commerce and development capabilities, punctuated by demo and an interactive quiz. The sales training continued with mapping these capabilities with the different business scenarios and roles partners might encounter when offering eZ.

Sales in Practice Session

In the next session, Bertrand Maugain and Zamir Abdul elaborated to sales professionals how eZ, together with partners, should market and present the value proposition of eZ products in 2019. They also discussed the process of selling an eZ subscription according to various levels and criteria.

Afterwards, partners organized into groups for a fun, educational, and practical sales competition session. The first component of the competition required the different groups to map the value proposition to different user personas according to three sales scenarios: E-Commerce Driven Sales, Digital experience platform type of sales (content + commerce), and Content management driven sales. In the second part of the competition, partners pitched the eZ Platform for a project to a panel of executives. The panel determined the three finalists that would present in front of everyone. The fun and interactive simulation allowed partners to learn how to sell eZ according to real use cases.

Annual Update Training

On the developer track, Ramzi Arfaoui from the Professional Service Team kicked off the Annual Update Training with a 5-hour overview of the tremendous progress that has been made in eZ Platform version 2 in 2018. From v.2.0 to v.2.4 attendees were able to follow the progression in the latest releases from the smallest to the largest features. Partners received in-depth explanation on a few important features, e.g: custom style and tags, Content on the fly, Image place holder for dev environment (alternative to import GB images from prod to dev) and more.

Kevin DeJour from the PS Team also contributed to the Annual Update Training by introducing the new Page Builder and how eZ Platform delivers better UX with better usability and comfort for content creators.

In the afternoon session, Ramzi and Kevin demonstrated how to integrate the Symfony Workflow component and control content publishing on eZ Platform. Bertrand Dunogier, technical manager at eZ Systems, concluded the Annual Update Training by introducing the experimental package that brings GraphQL support to eZ Platform, ezsystems/ezplatform-graphql.

On Thursday evening we hosted a dinner and party for our partners at the Barcelo Hotel that included, great company, a flamenco show, and of course, food and drinks.

Day 2

On Friday, we began the day with a roadmap presentation, giving a state of the roadmap and showing in detail what to expect for eZ Platform v2.5 as well as what might come next. During this session we also had a look at the imminent release of eZ Commerce v2.5, going through the various new features brought to the e-Commerce add-on, which are for mostly focused towards B2B needs.

Following the roadmap session, we had a training workshop, "How to Demo eZ" from eZ's Product Marketing Manager, with Amit Gutin and Director of Customer Success, Lars Eirik Rønning. The session was compelling and went into great detail on how partners can better demo eZ Platform, eZ Commerce and their many capabilities.

How to Demo eZ Platform

This session began with understanding two typical use case scenarios for content management and commerce for which eZ would be a good fit. Amit then proceeded to the first demo session which focused on working with content in eZ Platform v2.4. The demo topic was: how to attract visitors to Norway. We created a gallery and demonstrated the multi-upload feature whereby images are automatically mapped to content objects in the system. Amit then looked at the editorial interface and created a sample article and showed how people can collaborate using the editorial workflow. Finally, the demo showed the page builder feature of eZ Platform where we built a sample page showing some of the block types offered by eZ Platform such as content list, form builder and scheduler block. He also demonstrated how administrative user can create content type and assign roles and permissions.

In the eZ Commerce demo, Amit demonstrated a wide range of B2B features. He began by demo-ing how the end user can easily find products, articles or different types of content by using the easy-to-use search engine. He also demonstrated how users can compare products in the shop before deciding on which products to purchase. For B2B users, he demo-ed how one can quickly reorder products by uploading a list to the quick order list or by purchasing product through the stored basket list. He then proceeded to show how shop admin can configure the shop to integrate a PIM and ERP system. Amit also showed how admin can use Customer Center to manage contact data, define employee roles and permissions, manage customers purchasing activity as well as ERP performance. He closed the session displaying the different e-commerce blocks that are included in the page builder (ex. product slider, best sellers and last viewed).

eZ Commerce introductory workshop

In this session, Ramzi took the attendees through a product tour Backend/Frontend demo and explained how Product and Content are managed in one Interface. Frank Dege, CTO at Silver Solutions, joined Ramzi in order to show an ERP Integration example with Microsoft Dynamics NAV and the Control Center of eZ Platform Backend. He also demo-ed how to import large catalogs from PIM and ERP and how to switch the shop between e-content and product created in eZ Platform.

eZ Platform Cloud Introductory workshop

In the afternoon, Jani Tarvainen from eZ Systems gave an overview on the features and tooling available for eZ Platform Cloud, our PaaS solution for hosting eZ Platform projects. The practical examples revealed not only how the system works, but also how it can support the development workflow without heavy investment into DevOps. Jani was followed by Gauthier Garnier from Platform.sh, our technical partner, describing the underlying infrastructure as well as the service levels available. After an in-depth look into technical and business offerings, Gauthier gave a sneak peek on some new features coming soon to all eZ Platform Cloud users: A new admin UI and a Public REST API for managing projects.

In the third and final section, Vidar Langseid from eZ Systems gave an introduction on the different methods of HTTP caching on eZ Platform Cloud. From the basic HTTP reverse proxy to Varnish (a recent addition to Platform.sh) to Fastly (a CDN with global presence) - eZ Platform Cloud is ready to support projects of all shapes and sizes.

Thank You

The 2019 Partner Conference was a special occasion because it marked our 20th anniversary. It was an important and opportune moment for us to recognize some of our partners and people that have been part of our family for a long time and who have contributed so much to our community. However, it is also important to thank all of our partners for their dedication and support. We are excited and committed to our Partner ecosystem and are looking forward to generating some great projects this year!

PARTNERS, thank you all for being a part of our ecosystem and for attending our 2019 Global Partner Conference in Malaga!

07 Feb 2019 9:28pm GMT

18 Jan 2019

feedeZ News

What do B2B customers need?

The must-have features for B2B shops

Ninety percent of B2B shoppers would say that they expect an "easy and fast shopping experience."

To satisfy their needs, here is a list of features that are indispensable for every B2B shop:

How to integrate B2B e-commerce features into your business processes

For organizations to succeed in meeting B2B customers' expectations, they must offer not only the fundamental features mentioned above but also additional capabilities.

These capabilities should include approval and workflow processes, budget management and price request functions, e.g. when customers want to negotiate individual prices for a large order. E-commerce solutions designed for the B2B sector usually offer such functionality in the form of standard modules or plugins out-of-the box.

To avoid additional costs, businesses should thoroughly examine all of their processes before selecting their e-commerce solution. This is especially crucial when setting up a new shopping system for your online store.

eZ Commerce offers customers a flexible modular design and a wide range of features. One of those modules is the Customer Center, a feature that maps customer-specific business processes and makes them available in the online shop. Large B2B customers, where many employees need access to the shop, can independently create and manage their employees as shop customers. Users then receive specific rights, e.g. access to certain product categories and budget limits in combination with approval processes.

The Customer Center also simplifies the work of the shop owner, since customers can manage their own contact data and employee shop access themselves. This data can be exchanged directly with the central ERP and is therefore always up-to-date.

In fact, as your online shop grows, your team can easily add new capabilities to meet your companies' requirements, such as an SEO add-on, automated personalization and much more.

However, in order to stand out, your shop needs to provide a unified solution that combines practical functions with an appealing design that is also rich with engaging content.

Bridging the gap between content and commerce

For B2B organizations to successfully win, retain and nurture customers, they need to begin delivering personalized experiences with relevant content anytime and anywhere.

Today, B2B customers are extremely digitally conscious and value customer experience more than the pricing of their products. Therefore, businesses should look to create and enable interactions that are engaging, differentiated and personalized to the individual at every step of the customer journey. For example, a business could create target-specific product information pages or special interest pages to address B2B customers personally.

Let's look at a use case of a manufacturer that produces screws and gaskets. He does not necessarily need to include high-quality images or craft a detailed story about the screws in order to drive sales.

However, he can build connection and trust with his customers by adding a short film on the home page that explains the company's history. Or he could include testimonials and examples of different projects where these screws were installed in the past. The more useful information the manufacturer provides, the more likely his consumers will make an informed decision on whether or not they will buy the screws and gaskets from his shop.

To achieve all this and grow your business, you will need a CMS to maintain both the marketing website and e-commerce shop. This integration should be one of the key elements you consider when choosing your e-commerce software.

Modern e-commerce solutions should have a full-featured CMS directly on board to link products and content directly together. eZ Commerce is a full-featured content and commerce solution, perfect for advanced commerce and B2B projects. To learn more about eZ Commerce, please visit www.ez.no/eZ-Commerce.

18 Jan 2019 3:52pm GMT

05 Nov 2018

feedshare.ez.no > All forums (topics and replies)

Re: duplicate an existing content object

I have the same problem duplicate records for the same user in ezuser with the same status "published"

05 Nov 2018 9:12am GMT

17 Sep 2018

feedshare.ez.no > All forums (topics and replies)

Migration from eZ Publish Community Project 2014.07 to 2018.6.1

Dear Community,

I'm wondering how to upgrade from

eZ Publish Community Project 2014.07



ezpublish-legacy 2018.6.1


Is there any documentation? When looking at the installation link in Git (http://doc.ez.no/eZ-Publish) I am only finding ressources on how to upgrade from 4.x. Which v4.x version corresponds with the community versioning system?

Any help greatly appreciated. Thanks.



17 Sep 2018 1:34pm GMT

03 Aug 2018

feedshare.ez.no > All forums (topics and replies)

Re: Is it possible to an XML text block to ezflow blocks?

Has no one found a solution?

03 Aug 2018 3:49pm GMT

29 Jun 2017

feedZend Developer Zone

PHP 7.2: Add Extension By Name

I don't know if you've been keeping up, but there's not a lot of new coming down the pipe in PHP 7.2. Yeah, there is a good list of things that are being deprecated, and a change to allow for type widening, but compared to PHP 7.0 and PHP 7.2, PHP 7.2 is positively a yawner. This makes writing articles about the new hotness coming down the pipe a bit difficult.

The post PHP 7.2: Add Extension By Name appeared first on Zend Developer Zone.

29 Jun 2017 6:36pm GMT

27 Jun 2017

feedZend Developer Zone

Deprecations in PHP 7.2

The only constant is change.
- Heraclitus of Ephesus

PHP is a living language and as such, as some things are added, others are removed. Click on inside to find out what is being flagged to go away in PHP 7.2

The post Deprecations in PHP 7.2 appeared first on Zend Developer Zone.

27 Jun 2017 3:41pm GMT

16 Jun 2017

feedZend Developer Zone

June 2017 PHP Community (coffee) Cup of Service winner

It is time for the June 2017 PHP Community (coffee) Cup of Service award. This month it goes to someone who has been giving to PHP for more than 15 years, Ms. Sara Golemon. Sara: Is a regular speaker at PHP conferences worldwide An active core contributor One of the release managers of PHP 7.2 Please join us here at... Read more »

The post June 2017 PHP Community (coffee) Cup of Service winner appeared first on Zend Developer Zone.

16 Jun 2017 12:00pm GMT

11 Nov 2011

feedCI News


What can you tell us about the team that built reportula.org?

The Team that made reportula.org is just one person. Pedro Oliveira, started Reportula when he needed a clean and fast web application that reported the Bacula Backups software of the company he works for. He has decided to open the project, and let it grow to full web application that is able to manage the Bacula Backups.

Reportula Website Screen Shot

What can you tell us about the site in general? What are the goals of the site and the main audience?

Reportula is a php based web program that provides you a summarized output of jobs that have already run. It obtains its information from the Bacula's database. Aside from a nice graphical display, it provides summaries of your jobs, as well as graphs of job usage. This is a fairly high level bacula management tool.

The main goals were to create a web reporting tool for the bacula backups system, as I got further into the project it developed into something more than that. Right know it calculates average of bacula backups, it has time line history of backups. Imagine this scenario for example, if you use the crontab feature of reportula, you can see in time by how much data your backups infrastructure is growing.

Example. in 2011.05.01 if backups infrastructure stores 500 Tera bytes, in 2011.12.30 it stores 510 terabytes. This is very handy for us because with this feature you can predict the storage needs of your backups for the future.

What was your major consideration in using CodeIgniter for this?

I chose codeigniter because I needed an easy, fast, and supported PHP development framework. I found that with Codeigniter I could achieve that. This project was made in less than month.

Another nice thing about Codeigniter is that you don't have to "re-invent the wheel". Codeigniter has most of the thing that you need for an application already developed. All you have to do is connect the blocks which is very easy.

What is next on the plate for reportula.org? Any additional functionality you can tell us about?

On the plate for Reportula is user registrations, acls, and managing Bacula Backups like "bconsole".

Do you have any other information you'd like to share with the community? Tips from this project you'd like to share? Lessons you've learned?

First of all i think that Codeigniter is one of the best frameworks on the internet. I've tried them all (Cake, Yii, Symfony, Zend) they are all too complicated, too big, with lots of features and slow. They all had one problem BIG, STEEP LEARNING CURVE.

Codeigniter has less features than the others but you start making an application in less than 30 minutes. And what it does it does well! Even if you think you need a big framework after starting with codeigniter it cames to you that you don't need another framework to develop some applications. The lessons I learned are don't re-invent the wheel, Codeigniter does it and does it well, the community are nice, and always had support on the forum.

11 Nov 2011 10:19pm GMT

09 Nov 2011

feedPlanet Zope.org

Updated MiniPlanet, now with meta-feed

My MiniPlanet Zope product has been working steady and stable for some years, when suddenly a user request came along. Would it be possible to get a feed of all the items in a miniplanet? With this update it became possible. MiniPlanet is an old-styl...

09 Nov 2011 9:41am GMT

07 Nov 2011

feedPlanet Zope.org

Welcome to Betabug Sirius

It has been quite some time that I announced_ that I'd be working as a freelancer. Lots of stuff had to be done in that time, but finally things are ready. I've founded my own little company and set up a small website: Welcome to Betabug Sirius!

07 Nov 2011 9:26am GMT

03 Nov 2011

feedPlanet Zope.org

Assertion helper for zope.testbrowser and unittest

zope.testbrowser is a valuable tool for integration tests. Historically, the Zope community used to write quite a lot of doctests, but we at gocept have found them to be rather clumsy and too often yielding neither good tests nor good documentation. That's why we don't use doctest much anymore, and prefer plain unittest.TestCases instead. However, doctest has one very nice feature, ellipsis matching, that is really helpful for checking HTML output, since you can only make assertions about the parts that interest you. For example, given this kind of page:

>>> print browser.contents
    <title>Simple Page</title>
    <h1>Simple Page</h1>

If all you're interested in is that the <h1> is rendered properly, you can simply say:

>>> print browser.contents
<...<h1>Simple Page</h1>...

We've now ported this functionality to unittest, as assertEllipsis, in gocept.testing. Some examples:

self.assertEllipsis('...bar...', 'foo bar qux')
# -> nothing happens

self.assertEllipsis('foo', 'bar')
# -> AssertionError: Differences (ndiff with -expected +actual):
     - foo
     + bar

self.assertNotEllipsis('foo', 'foo')
# -> AssertionError: "Value unexpectedly matches expression 'foo'."

To use it, inherit from gocept.testing.assertion.Ellipsis in addition to unittest.TestCase.

03 Nov 2011 7:19am GMT

02 Nov 2011

feedCI News


Every week we hear of really awesome places that CodeIgniter is being used. I want to start sharing those with the community-at-large. I will start by posting them here under a new Showcase Category with the hopes that any future revisions of CI.com will have a section for stuff like this. You guys and gals make some really cool stuff and deserve a platform to show it off.

So without further ado…

This showcase is an interview with Kyle Roseborrough about GoCart

What can you tell us about the GoCart team?

We have a pair of PHP developers who knew there was a better way to build a shipping cart. Noah (lead developer) has 6 years experience in PHP development and 4 years in CodeIgniter. Gabe has about 10 years experience in web application development. Kyle has been working in UI and management for 10 years.
GoCart Website Screen Shot

What can we tell about the site in general?

GoCartdv.com was built to showcase GoCart and offer some basic information on the system.

What are the goals of the site and the main audience?

The main audience is CodeIgniter developers who are wanting a simple, scalable, CodeIgniter shopping cart. The goal is to get people involved in development to improve the cart and allow it to fully embody the goal of the project. To be easy to customize for developers and easy to use for end users/customers

What was your major consideration in using CodeIgniter for this?

CodeIgniter has great documentation and is easy to learn. We build lot of custom projects on CodeIgniter and it only made sense for us to build our cart on it. When looking for commerce solutions, we never found a suitable solution built on CodeIgniter so we decided to set out to do it on our own.

What is next on the plate for GoCart?

We really want GoCart to foster a great community of people contributing back to the roadmap and path the project will take. We want the focus to remain the same though "Easy to Customize, Easy to Use". It would be great if we could get enough people using.

Any additional functionality you can tell us about?

Well, not really. GoCart is intended to be a shopping cart, plain and simple. It does have some basic page and banner management and a whole slew of cart related features, but ultimately it's an ecommerce platform.

Do you have any other information you'd like to share with the community?

We built GoCart to be simple and scalable. As time goes on, we want the software to become easier and easier to use. We want GoCart to be scalable and to be able to work with new platforms as they come out. We feel that CodeIgniter and the CodeIgniter community is a huge benefit here. It enables developers to tie into a whole plethora of libraries, helpers and applications easily and support each other in the endeavor to make CodeIgniter better. Essentially, what's good for CodeIgniter is good for GoCart.

Tips from this project you'd like to share?

If you really want something, do it yourself. If it doesn't happen then you probably don't want it as bad as you think.

Lessons you've learned?

- Not every idea is a good one. Generally you need someone else around to discuss ideas and methods with. Collaboration is the best way to build a good application.
- No one knows what the next trend will be. Having a scalable platform that will adjust to a new set of tools and user demands is very important.

If you have a project that you would like to see in our showcase email me

02 Nov 2011 7:31pm GMT

23 Oct 2011

feedPlanet TurboGears

Cliff Wells: FreeSWITCH on Scientific Linux 6.1

SL 6.1 (and I assume RHEL and CentOS 6.1 as well) has introduced an issue for building and running FreeSWITCH. Apparently a lot of stuff now relies on dynamically linking to libnss3. libnss3, in turn, depends on libnspr4.so, which depends on libplds4.so. Seemingly, this should not be an issue (stuff depends on chained shared objects all over the place), but somehow it is.

What happens is first you can't compile FreeSWITCH. You get complaints about unresolved symbols in /usr/lib64/libnss3.so. The solution is to run the following commands:

yum install nspr-devel
env LIBS="-lnss3 -lnspr4 -lplds4" ./configure
make && make install

This will get you a compiled version of FreeSWITCH. However, when you actually run it, you'll find that several modules won't load at runtime (including the ODBC driver, should you happen to be using it). The solution for this is similar. Assuming you are using an init script to launch FreeSWITCH, you can add the following line to the top of /etc/init.d/freeswitch:

export LD_PRELOAD="/usr/lib64/libnss3.so /usr/lib64/libnspr4.so /usr/lib64/libplds4.so"

Voila. Everything works. Hopefully the FreeSWITCH devs get on RHEL6 support soon, but meanwhile this should get you by.

23 Oct 2011 3:27pm GMT

18 Oct 2011

feedPlanet TurboGears

Michael Pedersen: Request For Ideas for Hiring Pond

So, a favor to ask of people: I'm working on a web application to help people manage their resumes. As I've gotten further in, I've realized I don't have an actual todo list for it. So, since I'm making this to be used by others, I'll ask everybody here:

What would you want to see? Currently, I've added enough code to allow the program to output something very close to my online resume ( http://www.icelus.org/ ). Next up, I have the following features on my todo list already:

What else would you all want to see in order to make you want to use this?

18 Oct 2011 8:44pm GMT

13 Oct 2011

feedshare.ez.no > Articles and Tutorials

Building native mobile applications with the eZ Publish REST API

eZ Publish is a Web Content Management System that provides a platform to publish content via any channel. Its powerful presentation engine enables you to create websites and pages that display your content in a variety of renderings. Its powerful API directly and simply integrates your content with any web-enabled application on any device, such as the iPad, iPhone, or an Android device, without ever interfering with, or impacting the platform itself.

At the end of this tutorial, you will have learnt the basics of mobile application development for both iOS and Android platforms, consuming content from eZ Publish. CMS-side adjustments for the mobile channel will be acquired too. This cheatsheet will help you leverage the multichannel capabilities of eZ Publish, and its REST API in future projects, in a more systematic fashion.

13 Oct 2011 2:21pm GMT

05 Oct 2011

feedCI News

New User Guide in Development

We are happy to announce today that the user guide has had some significant improvements, and the first commit of these changes were just pushed today.

As many of you likely heard at CICON 2011, the Reactor team has had an internal project going on for some time to move the user guide to Sphinx. In addition to handling the tedium of generating page and document tables of contents, or maintaining internal links and references, the documentation is now easier to write, as you can simply focus on the content instead of markup and presentation. Don't forget syntax highlighting of PHP, HTML, CSS, and JavaScript in code samples. Based on ReStructured Text, it's also more human readable in a text editor than HTML is, which is likely where you spend most of your time. As an added benefit, Sphinx can output HTML, PDF, and even EPUB formats all from the same source files. We will likely be taking advantage of that at a later date.

But we didn't stop there, we also enlisted the thunderous powers of EllisLab's Chief Creative Officer, James Mathias for a style redesign. They are clean, easy to read, and beautiful.

Setting up your dev environment to work with Sphinx (if you want to render and output locally) is very easy, and takes about five minutes. For those that want to geek out, we have added a readme file to the user guide source folder so the step by step instructions are available right from GitHub.

Today marks the first commit with the new user guide to the unreleased develop branch, so you may encounter some bumps. Most notably are the code blocks, which pandoc lost our line breaks on, and some navigation issues as we experiment with different table of contents presentation and depth. We'll be cleaning these up prior to the next release (much is as simple as some line breaks and tabs), but feel free to pitch in and submit some pull requests if you see anything out of whack.

And lastly, for the first time ever, we have live nightly builds of documentation for the develop branch available at the CodeIgniter web site. Enjoy!

05 Oct 2011 7:23pm GMT

04 Oct 2011

feedPlanet TurboGears

Alessandro Molina: TurboGears2 Performance Improvements

As recently some effort has been involved in improving the performances of TurboGears2, I was curious to see how much things improved. As usually, the test isn't really reliable in any way and was just for fun.

All the graphs report the request/sec the application has been able to perform on my computer with only 1 concurrent client. So higher is better.

Here is the comparison between TG2.0 and TG2dev (will be 2.1.4)

I also compared various setups with different template engines on TG2dev

The comparison happened on an application similar to the quickstarted one.
Actually as there is no database involved in this application the template engine impacts a lot and so was a good benchmark for the template engines themselves.

04 Oct 2011 3:35pm GMT

16 Aug 2011

feedshare.ez.no > Articles and Tutorials

Image Maps in ezwebin Banners

Beginners guide for learning how to use image maps in the ezwebin extension.

16 Aug 2011 12:40pm GMT

07 Jul 2011

feedshare.ez.no > Articles and Tutorials

Building mobile browser and hybrid applications with eZ Publish

eZ Publish is a Web Content Management System that provides a platform to publish content via any channel. Its powerful presentation engine enables you to create websites and pages that display your content in a variety of renderings. Its powerful API directly and simply integrates your content with any web-enabled application on any device, such as the iPad, iPhone, or an Android device, without ever interfering with, or impacting the platform itself.

At the end of this tutorial, you will have learnt the basics of mobile application development for both iOS and Android platforms, consuming content from eZ Publish. CMS-side adjustments for the mobile channel will be acquired too. This cheatsheet will help you leverage the multichannel capabilities of eZ Publish, and its REST API in future projects, in a more systematic fashion.

07 Jul 2011 1:29pm GMT

06 Apr 2011


Bash autocompletion for Git

One thing I often wished to have when using Git was the ability to autocomplete Git commands and branch names. As I had to learn this week from Markus Prinz' article A few of my Git tricks, tips and workflows, Git comes with an autocompletion script for the Bash shell. But to use the autocompletion, […]

06 Apr 2011 8:36am GMT

01 Apr 2011


Array iteration with JavaScript

Till recently I always used a for-loop when I had to iterate over an array in JavaScript. For example: var myArray = [1, 2, 3, 4]; for (var i = 0; i < myArray.length; i++) { console.log(myArray[i]); } However, with ECMAScript 5 the Array object itself got some methods for iteration purposes. With those methods […]

01 Apr 2011 2:51pm GMT

10 Jan 2011


2-legged vs. 3-legged OAuth

From emails I receive it seems like there is a bit of confusion about what the terms 2-legged OAuth and 3-legged OAuth mean. I hope I can clear up this confusion with this article (and don't contribute more to the confusion…). In short, they describe two different usage scenarios of OAuth involving two respectively three […]

10 Jan 2011 5:30pm GMT

04 Mar 2010

feedWithCake.com Companies Hiring

qpLogic Europe

We can use immediately an experienced Cake developer for assisting us with developing a multi-lingual application that needs some Jake/Joomla (css) integration. We have continuously Cake projects and prefer to work with a team of individual developers in multiple time zones. Please show me that you are experienced, affordable and have at least 24 hours available per week (40 is better ;-).

04 Mar 2010 11:54am GMT