PHPackages                             novactive/ezextrabundle - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. novactive/ezextrabundle

AbandonedLibrary

novactive/ezextrabundle
=======================

Novactive Ibexa Extra Bundle

v5.0.0(1mo ago)242.0k↓33.3%111MITPHPPHP ^7.3 || ^8.0

Since Feb 20Pushed 1mo ago12 watchersCompare

[ Source](https://github.com/Novactive/NovaeZExtraBundle)[ Packagist](https://packagist.org/packages/novactive/ezextrabundle)[ Docs](https://github.com/Novactive/NovaeZExtraBundle)[ RSS](/packages/novactive-ezextrabundle/feed)WikiDiscussions master Synced 1mo ago

READMEChangelog (4)Dependencies (5)Versions (22)Used By (1)

Novactive Extra Bundle for eZ Publish Platform
==============================================

[](#novactive-extra-bundle-for-ez-publish-platform)

---

This repository is what we call a "subtree split": a read-only copy of one directory of the main repository. It is used by Composer to allow developers to depend on specific bundles.

If you want to report or contribute, you should instead open your issue on the main repository:

Documentation is available in this repository via `.md` files but also packaged here:

---

[![Downloads](https://camo.githubusercontent.com/cce43c8d36212ba30aeb136caf4e3091304dc8fc7b831b66b9a491421e648d01/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f64742f6e6f766163746976652f657a657874726162756e646c652e7376673f7374796c653d666c61742d737175617265)](https://packagist.org/packages/novactive/ezextrabundle)[![Latest version](https://camo.githubusercontent.com/13b2811ab517e48fe6110e2a2482a51f0027de59e2d1e353315d670477eee8e2/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f72656c656173652f4e6f766163746976652f4e6f7661655a457874726142756e646c652e7376673f7374796c653d666c61742d737175617265)](https://github.com/Novactive/NovaeZExtraBundle/releases)[![License](https://camo.githubusercontent.com/92e8898102393933fff048881c3bb4d73f15732846a3982b0f2d7af762d1014f/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f6c2f6e6f766163746976652f657a657874726162756e646c652e7376673f7374796c653d666c61742d737175617265)](LICENSE)

Installation
------------

[](#installation)

### Step 1: Download Nova eZExtra Bundle using composer

[](#step-1-download-nova-ezextra-bundle-using-composer)

Add the lib to your composer.json, run `composer require novactive/ezextrabundle` to refresh dependencies.

### Step 2: Enable the bundle

[](#step-2-enable-the-bundle)

Then inject the bundle in the `bundles.php` of your application.

```
    Novactive\Bundle\eZExtraBundle\NovaeZExtraBundle::class => [ 'all'=> true ],
```

### Step 3: Add the default routes

[](#step-3-add-the-default-routes)

Activate the sroutes:

```
_novaezextraRoutes:
    resource: "@NovaeZExtraBundle/Resources/config/routing/main.yml"
```

### Step 4: Clear the cache and check

[](#step-4-clear-the-cache-and-check)

```
php app|ezpublish/console cache:clear --env=dev
```

Go to : */\_novaezextra/dev/test*

Documentation
-------------

[](#documentation)

### Twig Content Helper

[](#twig-content-helper)

#### eznova\_parentcontent\_by\_contentinfo( content )

[](#eznova_parentcontent_by_contentinfo-content-)

```
{% set content = eznova_parentcontent_by_contentinfo( content ) %}
```

> Note : you get the content of the parent on the main location

#### eznova\_location\_by\_content( content )

[](#eznova_location_by_content-content-)

```
{% set contentType = eznova_location_by_content( content ) %}
```

#### eznova\_relationlist\_field\_to\_content\_list( fieldValue )

[](#eznova_relationlist_field_to_content_list-fieldvalue-)

```
{% set content = eznova_relationlist_field_to_content_list( ibexa_field_value( content, 'internal_links' ) ) %}
```

> Note : return an array of direct linked contents by the relation objects FieldType

#### eznova\_is\_rich\_text\_really\_empty(richTextFieldValue)

[](#eznova_is_rich_text_really_emptyrichtextfieldvalue)

```
{% set content = eznova_is_rich_text_really_empty( ibexa_field_value( content, 'description' ) ) %}
```

> Note : returns true if the value of RichText field is empty excluding the tags, whitespaces and line breaks, false otherwise

### Twig Text Parsing Helper

[](#twig-text-parsing-helper)

#### ctaize

[](#ctaize)

```
{% set ctaField | ctaize %}
```

> Note : Filter which converts the string like ezcontent://123 or ezlocation://234 to the URL of specified content or location

#### ezlinks

[](#ezlinks)

```
{% set richTextFieldValue | ezlinks %}
```

> Note : Filter which fixes the mistakes in opening/closing div tags and converts string like ezlocation://234 to the URL of specified location

#### htmldecode

[](#htmldecode)

```
{% set stringValue | htmldecode %}
```

> Note : Filter which applies html\_entity\_decode php function to the specified var

### Twig Image Helper

[](#twig-image-helper)

#### get\_image\_tag(content, fieldIdentifier, variationAlias, params)

[](#get_image_tagcontent-fieldidentifier-variationalias-params)

```
{{ get_image_tag(content, 'thumbnail', 'card_slider') }}
```

> Generates the picture html code including images for original, retina and mobile screens specified in the image variations config like the following:

```
optimized_original:
    reference: ~
    filters:
        - { name: auto_rotate }
        - { name: strip }
        - { name: geometry/scaledownonly, params: [ 200,200 ] }
optimized_original_retina:
    reference: ~
    filters:
        - { name: auto_rotate }
        - { name: strip }
        - { name: geometry/scaledownonly, params: [ 400,400 ] }
optimized_original_mobile:
    reference: ~
    filters:
        - { name: auto_rotate }
        - { name: strip }
        - { name: geometry/scaledownonly, params: [ 50,50 ] }
```

> If the placeholder dimensions are specified with empty content and variation then the placeholder image will be displayed:

```
{{ get_image_tag(null, 'image', '', {placeholder: {width: 300, height: 100}}) }}
```

#### get\_image\_url(content, fieldIdentifier, variationAlias, params)

[](#get_image_urlcontent-fieldidentifier-variationalias-params)

> The same as previous but returning just an image URL instead of tag.

#### get\_image\_asset\_content(field)

[](#get_image_asset_contentfield)

> Returns the Content by the Image Asset field. Requires the Ibexa\\Contracts\\Core\\Repository\\Values\\Content\\Field to be specified.

> **IMPORTANT**: The image placeholder is enabled by default but can be disabled by setting the bool value to *ENABLE\_IMAGE\_PLACEHOLDER* env variable.

### Picture Controller

[](#picture-controller)

```
{{ render( controller( "eZNovaExtraBundle:Picture:alias", { "contentId": content.getField('picture').value.destinationContentId, "fieldIdentifier": "image", "alias": "large" })) }}
```

### Content/Location Helper

[](#contentlocation-helper)

The goal was to mimic the old Fetch Content List

```
public function contentTree( $parentLocationId, $typeIdentifiers = [], $sortClauses = [], $limit = null, $offset = 0, $additionnalCriterion );
public function contentList( $parentLocationId, $typeIdentifiers = [], $sortClauses = [], $limit = null, $offset = 0, $additionnalCriterion );
public function nextByAttribute( $locationId, $attributeIdentifier, $locale, $additionnalCriterions = [] );
public function nextByPriority( $locationId, $aditionnalCriterions = [] )
public function previousByAttribute( $locationId, $attributeIdentifier, $locale, $additionnalCriterion = [] )
public function previousByPriority( $locationId, $additionnalCriterion = [] )
public function getSelectionTextValue($content, $identifier)

```

> Return an array of Result

Usage:

```
    {% for child in children %}
        {{ ibexa_field_value( child.content, "title" ) }}
        {{ ibexa_render_field( child.content, "overview" ) }}
        {{ "Learn more" | trans() }}
    {% endfor %}
```

### Children Provider

[](#children-provider)

Simply inject the children ( and potentially other things on a view Full )

Add your provider in a folder of your bundle

```
Project\Bundle\GeneralBundle\ChildrenProvider\YOUCONTENTIDENTIFIERPROVIDERCLASS:
    tags:
        -  { name: novactive.ezextra.children.provider, contentTypeIdentifier: YOUCONTENTIDENTIFIER }
```

You class YOUCONTENTIDENTIFIERPROVIDERCLASS must extend Novactive\\Bundle\\eZExtraBundle\\EventListener\\Type

After you need to create a method for each view you display if you want to get children in your template The goal is to have children on each view.

Ex:

```
namespace Yoochoose\Bundle\GeneralBundle\ChildrenProvider;
use Novactive\Bundle\eZExtraBundle\EventListener\Type;
use Ibexa\Contracts\Core\Repository\Values\Content\Query;
class PersonalizationEngine extends Type
{
    //its also use as default to get the full view children
    public function getChildren($viewParameters, SiteAccess $siteAccess = null)
    {
        return $this->contentHelper->contentList( $this->location->id, [ 'article' ], array( new Query\SortClause\Location\Priority( Query::SORT_ASC ) ), 10);
    }

    public function getLineChildren( $viewParameters )
    {
        ...
    }
}
```

### RepositoryAware helper (trait)

[](#repositoryaware-helper-trait)

```
    public function loadReverseRelations(ContentInfo $contentInfo, int $offset = 0, int $limit = -1): RelationList
```

Returns the list of reverse relations (RelationList) of the specified ContentInfo

### RouterAware helper (trait)

[](#routeraware-helper-trait)

```
public function generateRouteLocation(Location $location): string
public function generateRouteContent(Content $content): string
public function generateRouteWrapper(Wrapper $wrapper): string

```

The trait that allows to get the Route by location, content or Wrapper object.

### ViewMatcher

[](#viewmatcher)

This allows you to specify different ez views for the same content type but with different values of particular field.

> **IMPORTANT**: By default the field name is set to ***matcher*** but can be rewritten by specifying it in the ***VIEW\_MATCHER\_FIELD\_IDENTIFIER*** env variable.

Then for example if you set the **business** value to the field that is set to identify the view (**matcher** by default) inside the **Article** Content Type then another template can be defined for that using the following config:

```
article_business:
    template: '@ibexadesign/full/article_business.html.twig'
    match:
        Identifier\ContentType: [ 'article' ]
        '@Novactive\Bundle\eZExtraBundle\Core\ViewMatcher\ContentTypeField': 'business'
```

###  Health Score

59

—

FairBetter than 99% of packages

Maintenance89

Actively maintained with recent releases

Popularity33

Limited adoption so far

Community24

Small or concentrated contributor base

Maturity77

Established project with proven stability

 Bus Factor1

Top contributor holds 64.9% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Every ~254 days

Recently: every ~487 days

Total

14

Last Release

58d ago

Major Versions

1.0.0 → 2.0.02017-02-21

2.0.4 → 3.0.02020-08-19

v3.0.4 → v4.0.02021-08-12

v4.0.1 → v5.0.02026-03-18

PHP version history (3 changes)1.0.0PHP &gt;=5.4.0

3.0.0PHP &gt;7.3

v5.0.0PHP ^7.3 || ^8.0

### Community

Maintainers

![](https://www.gravatar.com/avatar/246ac802ccaf4e1b674e1b0200673c56fafb89ef9130a6f7d2e2d9e5b9f71a03?d=identicon)[Plopix](/maintainers/Plopix)

![](https://www.gravatar.com/avatar/7bf781acfc713c38985bfb2e7bee5fd2decefdeed1df550643af57aa8e315db7?d=identicon)[Almaviacx](/maintainers/Almaviacx)

---

Top Contributors

[![Plopix](https://avatars.githubusercontent.com/u/313532?v=4)](https://github.com/Plopix "Plopix (24 commits)")[![maximstrukov](https://avatars.githubusercontent.com/u/15006962?v=4)](https://github.com/maximstrukov "maximstrukov (5 commits)")[![erdnaxelaweb](https://avatars.githubusercontent.com/u/2130120?v=4)](https://github.com/erdnaxelaweb "erdnaxelaweb (4 commits)")[![achourhichem](https://avatars.githubusercontent.com/u/40833498?v=4)](https://github.com/achourhichem "achourhichem (1 commits)")[![mbouchaala](https://avatars.githubusercontent.com/u/10628227?v=4)](https://github.com/mbouchaala "mbouchaala (1 commits)")[![okante](https://avatars.githubusercontent.com/u/1520155?v=4)](https://github.com/okante "okante (1 commits)")[![ddoghri](https://avatars.githubusercontent.com/u/1309464?v=4)](https://github.com/ddoghri "ddoghri (1 commits)")

---

Tags

ezplatformezpublishphp

### Embed Badge

![Health badge](/badges/novactive-ezextrabundle/health.svg)

```
[![Health](https://phpackages.com/badges/novactive-ezextrabundle/health.svg)](https://phpackages.com/packages/novactive-ezextrabundle)
```

###  Alternatives

[maatwebsite/excel

Supercharged Excel exports and imports in Laravel

12.7k144.3M712](/packages/maatwebsite-excel)[craftcms/cms

Craft CMS

3.6k3.6M2.6k](/packages/craftcms-cms)[prestashop/prestashop

PrestaShop is an Open Source e-commerce platform, committed to providing the best shopping cart experience for both merchants and customers.

9.0k15.4k](/packages/prestashop-prestashop)[kimai/kimai

Kimai - Time Tracking

4.6k7.4k1](/packages/kimai-kimai)[civicrm/civicrm-core

Open source constituent relationship management for non-profits, NGOs and advocacy organizations.

728272.9k20](/packages/civicrm-civicrm-core)[in2code/powermail

Powermail is a well-known, editor-friendly, powerful and easy to use mailform extension for TYPO3 with a lots of features

982.5M38](/packages/in2code-powermail)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
