All about the development of Exponential (CMS) by Graham Brookins, 7x (formerly Brookins Consulting) and our think tank kracker.org.
7x and Graham Brookins are proud to share the news of the release of a rebranded v2.5.0.1 of Exponential Platform Legacy (100% Compatible with eZ Publish Platfom 5.x & eZ Platform Legacy 2.5).
Download it for free here at GitHub: https://github.com/se7enxweb/exponential-platform-legacy/releases/tag/v2.5.0.1
https://github.com/se7enxweb/exponential-platform-legacy/archive/refs/tags/v2.5.0.1.zip
Download it for free here at SourceForge: https://sourceforge.net/projects/exponentialplatformlegacy/files/v2.5.0.1/v2.5.0.1%20source%20code.zip/download
Release posted here on the project website, https://platform.exponential.earth/download
Install it via PHP + Composer Package using: # composer require se7enxweb/exponentialplatformlegacy:v2.5.0.1 --ignore-platform-reqs;
Installation instructions documentation, https://platform.exponential.earth/installation
Free Online Demo of this software including the AdminUI, https://platform.exponential.earth/about/demo
This project uses the remains of the abandoned eZ Publish Platform Software Stack licensed under GPLv2, when updated to php8+ support it resumes working as originally designed despite it's maturity and free and open framework cms values.
We believe in supporting users of legacy software stacks as first class citizens where user freedoms are exalted above the corporate desire to bind users to costly purchases just to use the core product.
Notable Changes (Since eZ Platform Legacy 2.5.0.0 for PHP8):
Updated: Rebranding package UI assets from eZ Platform to Exponential Platform. Updated / Replaced Logos used within AdminUI.
Task name before, "Replacing most front facing branding of text string, 'eZ Platform', 'ezplatform' from the user facing displays in code and templates."
Updated: Bugfix to core distribution app/config/config.yml and composer.json rules which fix content tree browse feature in AdminUI.
Open Source Project Website Content Expanded: https://platform.exponential.earth
To learn more about Exponential, Exponential Platform Legacy and Exponential Basic From 7x and to download the latest version please visit:
- https://exponential.earth
- https://lnkd.in/g284XiWh
To learn more about Exponential Family of CMS Software From 7x and to join the community please visit Share Exponential! @ Visit: https://lnkd.in/gdAHpy-m
7x is now offering turn key Exponential and Exponential Platform Legacy CMS Website Hosting, Design, Development, Training, Long term maintenance and support at https://lnkd.in/gvPkYU8T
Cheers,
Graham Brookins
7x
- https://platform.exponential.earth
Continuing the tradition of regular advances we are proud to share the news of our latest release Exponential Projects (Rebooted; Responsive; Expanded; Freed) which now supports PHP 8+ a familiar place to support, advertise and maintain visibility in the greater Exponential Ecosystem. Check out our newest portal with unified user account logins (between share and projects sites).
7x is very excited to announce the release of Exponential Projects Portal to users worldwide. Try our improved version containing responsive design, new features, git features and more! Try our new Software Code and Design Sharing Development Forge today!
Rebooting our community software extension / plugin source code forge / support portal in 2025.
7x and Graham Brookins are proud to share the news of a responsive projects.ez.no replacement portal from 7x release silently on 09/10 and shared with Telegram Channel Support Exponential as a preview.
Exponential Projects is a full responsive redesign of the older projects.ez.no website portal, upgraded to a stable edition of Exponential 6.0.x.
To see Exponential Projects yourself please enjoy this preview available now. Visit: https://projects.exponential.earth
Projects uses the remains of the incomplete development version without db passwords or email addresses to help restore access to this once vital tool for social networking within the eZ Publish Community of extension / plugin developers who used the site historically to share extensions, support extensions users (with support forums and more) and project news distribution (every project has a news section; self managed).
Exponential Projects provides the following to the worldwide community and greater ecosystem
- Projects, Signup and create your own extension projects within the site to promote your Git/GitHub repository for your extension(s) and their composer package details to install (Example: https://projects.exponential.earth/exponential/git)
- Projects, All projects have a news section dedicated to promotion of your extension news and project news
- Projects, Reviews section dedicated to collection of end user reviews of your project / extension. Great for developers who care about quality reviews!
- Projects, Screenshot Image Gallery per project
- Projects, Download Section per project for file based releases or other file distribution needs
- Projects, Project Git Commit import for GitHub based extension repositories for display / search within the software forge
- Projects, Social Networking Team features allow for large teams to manage a project via permissions system
- Projects, Organized by Organization (New feature; /org structure storage)
- Responsive design (works great on iPhones)
- Browsable /news section (New feature; /news custom layout with pagination)
- Rss feeds, All projects on the site Rss feed
- Rss feeds, All forum posts on the site Rss feed
- Rss feeds, All news posts on the site Rss feed
- Rss feeds, All git commits on the site Rss feed
- Projects provide user links to your Git Extension Repository (The code)
- Projects provide user support forums for your extension (User support, feedback)
- Projects help provide vital documentation for general use right out of the box with no blocking breakdowns (Documentation to support end users before they ask for help)
Exponential Projects is considering the following improvements / features currently:
- Supported Extension Syndication: A new web based project / extension / repository / composer package web service / XML Feed of all available extension's with composer packages.
- Package Management: Updates to ezupdate extension to provide for searchable, browsable, featured apps lists, app store within the admin module view that gets it's data dynamically from a configured by default feed to the projects site's web service.
- Design: Further design improvements to help expand the visual presentation of the core features of the site to be more native app in look and feel.
- Design: Adding a responsive secondary menu for enhanced feature display and reference.
- Deprecating all subversion: Deprecating all Subversion related information views further as this has largely been replaced by Git/GitHub/GitLab usage for storage / management of extension source code. Note: If you wish to see our forge support subversion like previously provided contact Graham Brookins to request this support to be saved. I'm open to it but don't like the larger amount of management it requires (central subversion server management). I used to love Subversion features over CVS freedoms and failures until the day Git Changed my whole life.
There are currently 439 registered projects today on this preview release of Exponential Projects.
This number is expected to grow greatly once we complete our data import from the ezpublishlegacyprojects Github User Account which contains 987 unique repositories of extensions and project extension downloads (from the download section of each project archived @ https://github.com/ezpublishlegacyprojects).
Also we are planning on importing the ezpublishlegacy GitHub User Account contains 987 unique repositories of extensions, bundles and tools for Exponential Platform Legacy CMS Software Stack (New stack; eZ5 @ https://github.com/ezpublishlegacy).
Also we are planning on importing the ezecosystem GitHub User Account contains 234 unique repositories of extensions, bundles and tools for Exponential Platform Legacy CMS Software Stack (New stack; eZ5 @ https://github.com/ezecosystem).
Also we are planning on importing the se7enxweb GitHub User Account containing 787 unique repositories of extensions, bundles and tools for Exponential + Exponential Platform Legacy (Both Stacks; EXP6+EXPPL2.5+PHP).
Also we are planning on importing the brookinsconsulting GitHub User Account containing 987 unique repositories of extensions, bundles and tools for Exponential + Exponential Platform Legacy (Both Stacks; EXP6+EXPPL2.5).
More on this as it happens to go live, stay tuned!
Community Education Corner
Also worth noting once again to help educate users in the Exponential Community / Ecosystem:
- Exponential 6.x is 100% Source Kernel API Compatible with the as-released eZ Publish APIs and Extensions.
- Software from Exponential Projects is 100% Source Kernel API Compatible with Exponential 6.x (From GitHub/Git based Projects)
- At the specific request of Ibexa, 7x is changing the project name to "Exponential" or "Exponential (CMS)" effective as of August, 11th 2025. More at: https://lnkd.in/gKkyC-dU
- Please Note: This project is not associated with the original eZ Publish software or its original developer, eZ Systems or Ibexa.
About 7x :: Seattle, Washington, USA, [2025/08/25] – 7x, a trailblazer in website software development, is proud to announce the release of Exponential Version 6.0.10 (Stable), reinforcing its dedication to advancing the robust content management platform.
Building on over 25 years of innovation and a commitment to excellence, Exponential (Formerly eZ Publish 6) From 7x promises enhanced features and continued evolution to empower businesses in the rapidly evolving digital landscape.
Key Highlights of Exponential Version 6.0.10 (Stable)
- Very stable software administration GUI, Word like
- Once you build a site in Exponential will by design almost never go down or offline
- Rebranded source code that refrains from use of eZ Publish text variations of the registered trademark term in text and binary forms.
- Enhanced Debug Output Markup Class Names and IDs which provide for advanced CSS and JS Customization
- Rest API v2 Write Support and CRUD Support. Expand your sharing of content via REST based apis!
- PHP 8.4 Support; Upgrade today!
- Template: Debug Output support refactored to now provide div ids and wrapper divs used to provide enhanced styles to debug output.
- DB: Enhanced Postgres 17 Support to prevent large amounts of deprecation notices.
Learn More
To learn more about Exponential From 7x and to download the latest version. Visit: https://exponential.earth
To learn more about Exponential Platform Legacy From 7x and to download the latest version. Visit: https://platform.exponential.earth
To learn more about Exponential Basic From 7x and to download the latest version. Visit: https://basic.exponential.earth
To learn more about Exponential Family of CMS Software From 7x and to join the community please visit Share Exponential! @ Visit: https://share.exponential.earth
7x is now offering turn key Exponential CMS Website Hosting at https://lnkd.in/gvPkYU8T
Read the Share announcement. You can download the release from GitHub or Composer! Then start a conversation about your own experience on our share forums thread about the release. For those who don’t know about eZ Publish yet read up on our favorite free software (GPL) content management system Exponential.
When 7x was bringing our lead designer Amin on board on of the first things he wanted to learn how to do within Exponential in terms of design related tasks was to customized the markup to include custom class names to uniquely style embeded content like images, etc. This blog post is for everyone who designs with Exponential, here we will show the settings required to store this class name information.
The next example is small in size and only a few parts are important here. Look for the [embed_image] AvailableClasses[] array of Custom CSS Class Names used only when embedding image content.
In, settings/override/content.ini.append.php:
<?php /* #?ini charset="utf-8"? [embed_image] AvailableClasses[] AvailableClasses[]=rssicon AvailableClasses[]=style1 AvailableClasses[]=imageinclude AvailableClasses[]=style2 */ ?>
Next remember to clear ini caches. Then use these new CSS Class names by assigning them within your Exponential Admin Editor when embedding contenting within eZXMLText fields using eZOE or via manual exml editing. Publish your content with your new class name assignment. View your site to see the changed markup ready to use.
Look at this blog post image container div css class names to see the imageinclude class name in use.
I have been working on adding exponential.earth node view count tracking to the site/network of sites recently.
After some initial questions on why web server access log (ssl) page request logging data import into the very node template features desired for simple display in many ways throughout a website portal built using Exponential was not more popular in the past as hoped to end users to adopt the feature instead seeking a more powerful external solution, still for me it seems this feature has been very simple to work with.
First remember to configure your siteaccess settings file, settings/siteaccess/website/logfile.ini.append.php
Here is an example from our work:
<?php /* #?ini charset="utf-8"? # Exponential configuration file for logfile configuration for stats parsing. # Exponential configuration file for parse apache log file # [AccessLogFileSettings] # Storage of the log file, for example /var/log/httpd # Do not add trailing slash StorageDir=/usr/local/apache/domlogs/exponential/ # The name of log file, for example mytest.log LogFileName=ezpublish.se7enx.com-ssl_log # If using site match by URL, the site may like http://siteurl/mysite and # apache log will start with for example mysite/content/view/full/node_id. To # remove this prefix in apache log before analysis the log, add mysite to # SitePrefix. Example: SitePrefix[]=mysite # SitePrefix[]= # If any site accesses use the PathPrefix setting, enter them here PathPrefix[] PathPrefix[]=Exponential */ ?>
Then I had an issue that may have been affecting other users of PathPrefix setting in logfile.ini.append.php and site.ini.append.php the root / matched node 2 the root node and not /Exponential/ (a much larger nodeID) due to a multi site flaw in the cronjobs/updateviewcount.php. We are soon to publish a clean fix from 7x the company producing new versions with new improvements and updates of Exponential CMS in version 6.0.11 (coming soon).
Here is a diff:
diff -ri cronjobs/updateviewcount.php.default cronjobs/updateviewcount.php 7c7 < * @version //autogentag// --- > * @version 2014.07.0 19c19 < eZDB::instance()->setIsSQLOutputEnabled( false ); --- > eZDB::instance()->setIsSQLOutputEnabled( true ); 180,183c180,189 < $nodeID = eZURLAliasML::fetchNodeIDByPath( $path ); < < // Support for PathPrefix < for ( $pathPrefixIndex = 0; !$nodeID && $pathPrefixIndex < $pathPrefixesCount; ++$pathPrefixIndex ) --- > // Support for PathPrefix > if( $pathPrefixesCount >= 1 ) > { > for ( $pathPrefixIndex = 0; !$nodeID && $pathPrefixIndex < $pathPrefixesCount; ++$pathPrefixIndex ) > { > // Try prepending each of the existing pathPrefixes, to see if one of them matches an existing node > $nodeID = eZURLAliasML::fetchNodeIDByPath( $pathPrefixes[$pathPrefixIndex] . $path ); > } > } > else 185,186c191 < // Try prepending each of the existing pathPrefixes, to see if one of them matches an existing node < $nodeID = eZURLAliasML::fetchNodeIDByPath( $pathPrefixes[$pathPrefixIndex] . $path ); --- > $nodeID = eZURLAliasML::fetchNodeIDByPath( $path ); 208a214 > $cli->output( "Node ( " . $nodeID . " ) View count have increased: Count: $count \n" ); 215c221,222 < $counter->increase( $count ); --- > $cli->output( "Node ( " . $nodeID . " ) View count have increased: Count: $count \n" ); > $counter->increase( $count ); 235c242 < $cli->output( "View count have been updated!\n" ); --- > $cli->output( "View count have been updated.!\n" );
Here is the configured cronjob (part defined by ini settings/override/site.ini.append.php) example for update_view_count script:
<?php /* #?ini charset="utf-8"? # eZ Publish configuration file for cronjobs. # # # NOTE: It is not recommended to edit this files directly, instead # a file in override should be created for setting the # values that is required for your site. Either create # a file called settings/override/cronjob.ini.append or # settings/override/cronjob.ini.append.php for more security # in non-virtualhost modes (the .php file may already be present # and can be used for this purpose). [CronjobSettings] ScriptDirectories[]=cronjobs Scripts[]=unpublish.php Scripts[]=rssimport.php Scripts[]=indexcontent.php Scripts[]=hide.php # Since 4.6 the following script is not activated by default #Scripts[]=subtreeexpirycleanup.php Scripts[]=internal_drafts_cleanup.php #Scripts[]=unlock.php #Scripts[]=staticcache_cleanup.php Scripts[]=updateviewcount.php #Extension directory for cronjobs. ## ExtensionDirectories[] # No more than one instance of a cronjob script can be run at any given time. # If a script uses more time than MaxScriptExecutionTime, the next instance of # it will try to gracefully steal the cronjob script mutex. If the process has # been running for more than two times MaxScriptExecutionTime, the original # process will be killed. The default is 12 hours. MaxScriptExecutionTime can # also be set per cronjob part, that will override this global setting. MaxScriptExecutionTime=43200 [CronjobPart-infrequent] Scripts[]=basket_cleanup.php Scripts[]=linkcheck.php [CronjobPart-frequent] Scripts[]=notification.php Scripts[]=workflow.php [linkCheckSettings] # Specify full path of all site URL # Example: # SiteURL[]=http://ezpublish.ez.no/admin # SiteURL[]=http://ezpublish.ez.no/news SiteURL[]= [CronjobPart-unlock] Scripts[]=unlock.php [CronjobPart-cluster_maintenance] Scripts[]=clusterpurge.php # Example of a cronjob part # This one will only run the workflow cronjob script # #[CronjobPart-workflow] #Scripts[]=workflow.php [CronjobPart-index] Scripts[]=indexcontent.php [CronjobPart-view_count_update] Scripts[]=updateviewcount.php */ ?>
Then run the cronjob:
./runcronjobs.php -s exponential view_count_update;
Which outputs:
./runcronjobs.php -s exp view_count_update Using siteaccess exponential for cronjob Running cronjob part 'view_count_update' Running cronjobs/updateviewcount.php at: 09/09/2025 01:44 am Update content view count... Started at Tuesday September 09 2025 01:44:58 am Start line: 217.113.194.215 - - [09/Sep/2025:01:31:03 -0700] "GET /layout/set/print/content/keyword/Book HTTP/1.1" 200 6133 "-" "Mozilla/5.0 (compatible; Barkrowler/0.9; +https://babbar.tech/crawler)" Node ( 60005 ) View count have increased: Count: 8 Finished at Tuesday September 09 2025 01:44:58 am View count have been updated.! Completing cronjobs/updateviewcount.php at: 09/09/2025 01:44 am Elapsed time: 00:00:00
And with that the data has been collected and is available for display within Exponential Templates!
Views: <b>{$node.view_count}</b>
Happy Hacking in the Exponential Community and the Greater Exponential Ecosystem!
7x has recently launched their company blog at https://blog.se7enx.com
7x will expand to cover more recent news from 7x directly from the 7x website news and blog.
I think more coverage from 7x on less than news yet important progress points and changes to be documented this way.
I'll be posting, will you be reading? There is also a blog rss feed available for remote consumption.
7x now offers a new supported product Exponential Platform Legacy 2.5 GPL Stable
Based upon older released eZ Platform Legacy (PHP 7 version) upgraded to PHP 8.3 Support.
Exponential Platform Legacy as it's name mentions includes Platform (Symfony + Legacy Hybrid Kernel) + Legacy Stack. Two in one. Dual Kernel. Super powerful.
This doubles your features in one simple CMS.
Our first release is now available for download via Composer, GitHub, SourceForge in tar.gz or zip files.
7x has also started another open source project for this product and website @ platform.exponential.earth
7x is excited once again as we have officially released Exponential 6.0.10 GPL Stable Rebranded CMS + Web Development Framework for download.
This release removes from general use the eZ Publish Trademark text phrase in text, source code and used binaries, a new collapsed by default (reducing page scrolling issues in general by default) debug output tool bar initial implementation markup, CSS classes and JavaScript within the debug class which is also further override-able via extension (classes) as a kernel override class extension, this release also offers minor improvements and bug-fixes to continue to deliver the best cms possible to everyone.
Looking for a WordPress alternative that is a compelling case for better organized software platforms in general? Try Exponential it will certainly open up your eyes to continued possibilities not dead ends. Give Exponential a try today!
Enjoy Everyone!
Cheers!
Per specific request by Ibexa, 7x is rebranding the software and community knowing as eZ Publish 6 Maintained By 7x as Exponential.
You can also call the software Exponential CMS, EXP, exponential, exp.
This allows us the freedom to continue to deliver the same stable enterprise grade cms software to end users without conflict.
Please pardon us while we rename, re-link and generally replace the older eZ Publish trademark from general usage through the 7x / Exponential Network of Website Portals.
Happy Hacking!
I am very excited to announce the release of eZ Publish 6.0.9 which includes the new PHP 8.4 support to the kernel.
The headless cms crud rest apis were released originally as ezprestapi extension which replaces the ezprestapiprovider extension.
This is the first which we are bundling this extension (enabled by default installation) but not enabled via configuration settings to ensure a secure default installation. That said it's very easy to get started by configuring it for use and accessing the REST APIs.
My first attempt was to enable this package for use on digg.one to allow for remote content publishing apis to use to create stories nodes remotely in eZ. It works perfectly and it's very secure by design.
I would like to write an article with example source code showing how to consume and create content using this extensions HTTP APIs for rest calls.
There are very minimal booting changes from the previous release which require PHP 8.1 support. This means as of 6.0.8 PHP 7 Support is Deprecated and You must use PHP 8.1 or greater from now on. This is best for security reasons related to PHP support of older releases being minimal at best.
This means with eZ Publish 6.0.9 you can use the new PHP 8.4 support on your existing eZ Publish website with a simple backup and upgrade.
If you must continue to use PHP7 you can use the latest release from the 6.0.7 branch / release for the foreseeable future.
I am very excited to announce the release of eZ Publish Basic 2.4.0.0 which includes the new PHP 8.3 support to the kernel.
eZ Publish Basic is based upon an eZ Publish 2.x module based kernel now reorganized and refactored to use the main directory named 'kernel/' to hold all of the eZ Publish Basic Modules (presently, including your custom modules (refactor to operate within the eZ Publish Basic Kernel Layout)).
eZ Publish Basic comes with a strong recommendation to use mod_rewrite provided by Apache and many other similar web servers to route all requests through our main front index.php file. Same for admin virtual host based website administration.
eZ Publish Basic is the same cms as originally introduced as eZ Publish 1.0 to 2.2.9 (last version; surprisingly minimal changes in this time) with regards to base features provided and supported, yet eZ Publish Basic goes further with the integration of eZ Region from (Brookins Consulting; 2001) and many features developed to refine the e-commerce store integration not seen in years or ever. This makes eZ PB a more usable solution for USA based users. More feature expansion is expected in future releases as we release more code over time.
This means with eZ Publish Basic 2.4.0.0 you can use the new PHP 8.3 support on your existing eZ Publish 2 website(s) with a simple backup and upgrade. Note: eZ PB DB Schema is more improved than changed with few differences other than bugfixes.
Pull your older eZ Publish 2 code out of your hard drive records and take a walk down memory lane and upgrade today! Some development may be required.
7x plans to continue to support and develop eZ Publish Basic for the foreseeable future. Contact me if you are interested in buying 7x Paid Support to Hire me to help you reach your goals faster than alone.
I am very excited to announce the release of eZ Publish 6.0.8 which includes the new PHP 8.4 support to the kernel.
These were very minimal booting changes which require PHP 8.1 support. This means as of 6.0.8 PHP 7 Support is Deprecated and You must use PHP 8.1 or greater from now on. This is best for security reasons related to PHP support of older releases being minimal at best.
This means with eZ Publish 6.0.8 you can use the new PHP 8.4 support on your existing eZ Publish website with a simple backup and upgrade.
If you must continue to use PHP7 you can use the latest release from the 6.0.7 branch / release for the foreseeable future.
7x Releases eZ Publish 6.0.7 On Valantines Day With New Copy Tree Feature for the eZ Administration!
I am very excited to announce the release of eZ Publish 6.0.7 which includes the new admin feature added into the sub items display which allows the copying of subtree selections of content locations (nodes/objects/folders/articles/etc) to a new existing location by default.
This means with eZ Publish 6.0.7 you can use the admin3 design to copy content on your website to exiting locations with ease, perhaps using your cell phone!
I bring news of a new solution 7x is working on for developers with an interest to syndicate information without an rss / atom / xml / etc feed available.
Today if you want to include your companies YouTube Playlist videos (say commercials or educational materials) you can embed this content manually within the administrator content editing features available by default.
What if you want to sync content from YouTube like your companies playlist video content (the meta data not the actual videos, playback is through YouTube's embed video URL APIs) into the eZ Content Tree Automatically?
Currently this is possible today without a feed via old fashioned web page scraping of specific account playlists video title and video URL URI v element data (video's id) using RSS-Bridge.
Normally RSS-Bridge (doc) is a standalone application well written in OOP PHP. Because documentation on using the library standalone is limited we created a solution to bootup the software layers and call the provided YouTube Playlist Data Collection APIs from RSS-Bridge within an eZ Publish Request Scope within a eZ Publish Cronjob Part Script.
Filename: extension/sevenx_rss_bridge/cronjobs/7xRssBridgeYoutubeFeedImport.php
<?php if ( !$isQuiet ) { $cli->output( "Creating youtube video object(s) ..." ); } $count = SevenxRssBridgeFeedImport::importFeedContentObjects(); if ( !$isQuiet ) { $cli->output( "Number of objects created: $count" ); $cli->output( "Done." ); } ?>
Got your attention now with a stub for calling the features we need within eZ (Remember to enable via cronjob settings and clear all caches).
Filename: extension/sevenx_rss_bridge/settings/cronjobs.ini.append.php
<?php /* #?ini charset="utf8"? [CronjobSettings] ExtensionDirectories[]=sevenx_rss_bridge [CronjobPart-youtube-feed-import] Scripts[]=7xRssBridgeYoutubeFeedImport.php */ ?>
Next we have the worker class that does the work to fetch the YouTube information, create the YouTube videos (Meta Data Based Embeds in a Playlist) underneath Youtube Playlist Nodes Containing the Playlist Meta Data.
With this we first create the playlist nodes (locations) with the required playlist YouTube embed URL + Parameters (like list which helps provide long form content within a playlist). With the following code in place (remember to regenerate eZ's Autoloads) we can call the cronjob and sync / import the data from YouTube into eZ Publish Content Tree.
Filename: extension/sevenx_rss_bridge/classes/SevenxRssBridgeFeedImport.php
<?php class SevenxRssBridgeFeedImport { public static function importFeedContentObjects() { // Settings $storageNodeID = eZINI::instance('sevenx_videos.ini')->variable('PlaylistSettings','PlaylistNodeID'); // Fetch Playlists Objects to store the videos underneath. $playlists = self::fetchNodeContent($storageNodeID ); // Initialize the count of imported items $importedCount = 0; // Include RSS-Bridge autoloader require_once('vendor/rss-bridge/rss-bridge/lib/bootstrap.php'); foreach ( $playlists as $playlist ) { if ( $playlist->attribute('children_count') <= 0 ) { $playlistsNodeID = $playlist->attribute('node_id'); $dm = $playlist->dataMap(); $playlistID = $dm[ 'youtube_url' ]->content(); if ( !str_contains($playlistID, 'videoseries' ) ) continue; $playlistID = explode( 'list=', $playlistID )[1]; $bridgeParams = [ 'p' => $playlistID ]; try { $main = new RssBridge(); $bridgeFactory = new BridgeFactory(); // Directly instantiate the YouTubeBridge class $bridge = $bridgeFactory->create( YoutubeBridge::class ); // Set parameters $bridge->setInput( $bridgeParams ); // Fetch data $data = $bridge->collectData(); $items = $bridge->getItems(); //var_dump( $items ); // Process each video entry foreach ($items as $item) { $importedCount += self::importYouTubeVideo($item, $playlistsNodeID, $playlistID); } } catch (Exception $e) { echo "Error: " . $e->getMessage() . "\n"; return 0; // Return 0 in case of error } } } echo "Successfully imported YouTube videos.\n"; return $importedCount; // Return the count of imported items } private static function importYouTubeVideo($item, $storageNodeID, $playlistID) { $adminUser = 'admin'; // no password used so safe and available by default. change if needed. $classID = 48; // Note: Please change to your video class. // Extract video data $title = $item['title']; $description = $item['content']; $url = $item['uri']; $video = explode( '?v=', $url )[1]; $url = "https://www.youtube.com/embed/$video?si=" . $video . '&list=' . $playlistID; // var_dump($item['title']); // var_dump($url); // die('fin'); // return 1; // Fetch admin user $user = eZUser::fetchByName( $adminUser ); $userCreatorID = $user->attribute( 'contentobject_id' ); // Create object $defaultSectionID = 1; $class = eZContentClass::fetch( $classID ); $contentObject = $class->instantiate( $userCreatorID, $defaultSectionID ); // Set remote_id content //$remoteID = "contentserver:incomingnode"; //$contentObject->setAttribute( 'remote_id', $remoteID ); $contentObject->store(); // Fetch related IDs $contentObjectID = $contentObject->attribute( 'id' ); //$userID = $contentObjectID; // Create node assignment $nodeAssignment = eZNodeAssignment::create( array( 'contentobject_id' => $contentObjectID, 'contentobject_version' => 1, 'parent_node' => $storageNodeID, 'is_main' => 1 ) ); $nodeAssignment->store(); // Set version modified and status content $version = $contentObject->version( 1 ); $version->setAttribute( 'modified', time() ); $version->setAttribute( 'status', eZContentObject::STATUS_DRAFT ); $version->store(); // Fetch contentObject IDs $contentObjectID = $contentObject->attribute( 'id' ); $contentObjectAttributes = $version->contentObjectAttributes(); // Set Name $contentObjectAttributes[0]->setAttribute( 'data_text', $title ); $contentObjectAttributes[0]->store(); // Set Name $contentObjectAttributes[2]->fromString( "$url|$title" ); $contentObjectAttributes[2]->store(); // Publish content object to top level root node $operationResult = eZOperationHandler::execute( 'content', 'publish', array( 'object_id' => $contentObjectID,'version' => 1 ) ); echo "Imported video: $title\n $url\n"; return 1; // Return 1 to indicate successful import } public static function fetchNodeContent( $nodeID = 2, $limit = false, $classIdentifierArray = array( 'playlist' ) ) { $node = eZContentObjectTreeNode::fetch($nodeID); if (!$node) { echo "Node with ID $nodeID not found.\n"; return []; } // Fetch only objects of 'playlist' class $params = [ 'ClassFilterType' => array( 'include' ), 'ClassFilterArray' => $classIdentifierArray, // Replace 'playlist' with your desired class identifier 'Limit' => $limit // Adjust the limit as needed ]; $result = eZContentObjectTreeNode::subTreeByNodeID($params, $nodeID); return $result; } } ?>
Here is an example of calling the cronjob script. We do this after the above is properly installed and configured.
cd /path/to/ezpublish/; clear; date;./runcronjobs.php youtube-feed-import; date
This solution works well by simulation of the RSS-Bridge Application which effortlessly (once you learn how to call it correctly) fetches Youtube / Instagram / Telegram / Other content for you to store and use within your own website powered by eZ Publish.
We are working to release a package of this software ready to install and customize to meet your own needs. Until then use this blog post as a project origin story / working example of a solution for content stored in web applications which do not provide feeds.
Hello eZ Community!
I write today to fulfil on the commitment made to describe the eZ Publish Symbolic Link Distribution I talked about previously in passing.
Here is how it works. No files are needed. The eZ Publish Symbolic Link Distribution is A Process to Turning an Empty sub domain virtual host folder ~/doc/ (main site) + ~/doc/admin.ezpublish.one (subdomain site) into a full fledged working eZ Publish Installation.
We do this by creating our base normal installation which gives us the eZ Files needed in ~/doc (main site).
If your like me and prefer full control via directory structure abstraction you'll quickly see that we need a way to use the main site files without var dir duplication (variable) so admin.ezpublish.one links to the same eZ Installation as the main site.
Here is how to do it:
cd /home/ezp/doc/admin.ezpublish.one; for filename in ../*; do ln -s $filename .; done
This takes care of the files an eZ request requires for operation and addresses the var directory variable with a dynamic link sharing the var dir for both virtual host eZ Installations.
It's really that simple of a process. The symbolic links are generated dynamically based on the installed files in the path of the command and is a quick solution in bash shell to do the heavy lifting.
Next and perhaps the most important on 7x cPanel Based Server Hosting is that fact that when using mod_rewrite in the main site ~/doc .htaccess file we require nothing special per say.
But with the admin.ezpublish.one subdomain we are using a subdomain virtualhost which requires the following added to the top of your .htaccess file to load the second virtualhost eZ Publish Installation Normally.
# Static Subdirectory Virtual Host Required Options RewriteEngine On RewriteOptions IgnoreInherit DirectoryIndex index.html index.php
These are just a few power querks to using these software platforms to quickly build multi-domain installations when changing the directory path in the virtual host is not an option.
Remember folks, there is always another way in all things eZ!
Announcing eZ Publish Basic: Revitalizing a Classic Open-Source CMS with Full PHP 8 Compatibility
We are thrilled to announce a new project to breathe new life into eZ Publish 2.x, the community-supported CMS that served users for nearly a decade. With PHP's evolution over the years, the original eZ Publish has faced compatibility issues. But now, 7x is leading an open-source initiative to bring eZ Publish 2 into 2025 with full PHP 8 support.
Introducing eZ Publish Basic (Version 2.4.0.0-preview1)
Launched on GitHub on November 1, 2024, "eZ Publish Basic" marks the first step in our mission to modernize this reliable content management system. Our goal is to retain its core functionality while updating the codebase to work seamlessly with PHP 8. By addressing major changes, such as replacing the outdated "register globals" setting, we aim to ensure that developers and community sites can continue to use and customize eZ Publish Basic with confidence.
The Power of Open Source and the Choice of the GNU GPL License
From the start, eZ Publish was built to be adaptable, transparent, and community-centered. In keeping with that mission, we’ve chosen to update eZ Publish Basic under the GNU GPLv2 (or later version). This choice is central to our commitment: the GPL not only allows everyone to access, use, and modify the software freely but also ensures that improvements remain open and available for all. The GNU license strengthens eZ Publish as a platform by safeguarding both the community’s and developers’ contributions, creating a CMS ecosystem where freedom, adaptability, and innovation flourish.
A Fresh Start for New Developers and PHP Enthusiasts
eZ Publish Basic is designed to be more than just a CMS upgrade—it’s an invitation for new end users or developers to experience the capabilities of a powerful, well-structured CMS that offers a breath of fresh air compared to writing vanilla PHP. This project provides a unique entry point for aspiring developers, where they can learn core CMS concepts that make eZ Publish worth using and adapting in 2025. By working with eZ Publish Basic, developers can gain foundational skills and insight into a robust CMS structure that emphasizes freedom, scalability, and practical solutions.
An Educational Tool for Students and New Developers
This project is intentionally educational, crafted with students and beginner developers in mind, even as it retains the power for production-grade tasks. eZ Publish Basic allows newer developers to learn the fundamentals of PHP and CMS design in an open-source, collaborative setting. While it’s accessible to those still learning PHP, it remains fully functional and ready for any production environment. This approach empowers emerging developers to build real-world skills while contributing to a larger, impactful project and experiencing the value of community-driven software.
Why Join the eZ Publish Basic Project?
For developers, historians of the open-source world, or anyone who used eZ Publish 2 or subsequent versions (eZ Publish 3, 4, 5, and the Netgen or Ibexa OSS adaptations), this project is a chance to support and preserve a piece of open-source history. The open-source community has always been a critical part of eZ Publish’s journey, and we are inviting contributors to help complete this PHP 8 migration and keep eZ Publish Basic as a useful, adaptable solution for years to come.
Project Details
- Repository: GitHub - eZ Publish Basic
- Current Version: 2.4.0.0.0
- Current preview release: First Preview Release Tag
- Planned Release for Full PHP 8 Compatibility: Q2 2025
- License: GNU GPLv2 (or later version)
I am very excited to announce the release of eZ Publish 6.0.6 which includes the new responsive admin design by default.
This means with eZ Publish 6.0.6 you can use the admin3 design to edit the content on your website using your cell phone!
Announcing eZ Publish Basic: Revitalizing a Classic Open-Source CMS with Full PHP 8 Compatibility
We are thrilled to announce a new project to breathe new life into eZ Publish 2.x, the community-supported CMS that served users for nearly a decade. With PHP's evolution over the years, the original eZ Publish has faced compatibility issues. But now, 7x is leading an open-source initiative to bring eZ Publish 2 into 2025 with full PHP 8 support.
Introducing eZ Publish Basic (Version 2.4.0.0.0)
Launched on GitHub on November 1, 2024, "eZ Publish Basic" marks the first step in our mission to modernize this reliable content management system. Our goal is to retain its core functionality while updating the codebase to work seamlessly with PHP 8. By addressing major changes, such as replacing the outdated "register globals" setting, we aim to ensure that developers and community sites can continue to use and customize eZ Publish Basic with confidence.
The Power of Open Source and the Choice of the GNU GPL License
From the start, eZ Publish was built to be adaptable, transparent, and community-centered. In keeping with that mission, we’ve chosen to update eZ Publish Basic under the GNU GPLv2 (or later version). This choice is central to our commitment: the GPL not only allows everyone to access, use, and modify the software freely but also ensures that improvements remain open and available for all. The GNU license strengthens eZ Publish as a platform by safeguarding both the community’s and developers’ contributions, creating a CMS ecosystem where freedom, adaptability, and innovation flourish.
A Fresh Start for New Developers and PHP Enthusiasts
eZ Publish Basic is designed to be more than just a CMS upgrade—it’s an invitation for new end users or developers to experience the capabilities of a powerful, well-structured CMS that offers a breath of fresh air compared to writing vanilla PHP. This project provides a unique entry point for aspiring developers, where they can learn core CMS concepts that make eZ Publish worth using and adapting in 2025. By working with eZ Publish Basic, developers can gain foundational skills and insight into a robust CMS structure that emphasizes freedom, scalability, and practical solutions.
An Educational Tool for Students and New Developers
This project is intentionally educational, crafted with students and beginner developers in mind, even as it retains the power for production-grade tasks. eZ Publish Basic allows newer developers to learn the fundamentals of PHP and CMS design in an open-source, collaborative setting. While it’s accessible to those still learning PHP, it remains fully functional and ready for any production environment. This approach empowers emerging developers to build real-world skills while contributing to a larger, impactful project and experiencing the value of community-driven software.
Why Join the eZ Publish Basic Project?
For developers, historians of the open-source world, or anyone who used eZ Publish 2 or subsequent versions (eZ Publish 3, 4, 5, and the Netgen or Ibexa OSS adaptations), this project is a chance to support and preserve a piece of open-source history. The open-source community has always been a critical part of eZ Publish’s journey, and we are inviting contributors to help complete this PHP 8 migration and keep eZ Publish Basic as a useful, adaptable solution for years to come.
Project Details
- Repository: GitHub - eZ Publish Basic
- Current Version: 2.4.0.0.0
- Planned Release for Full PHP 8 Compatibility: Q2 2025
- License: GNU GPLv2 (or later version)
Whether you’re a seasoned developer, an advocate for free software, or someone who used eZ Publish 2 in its early days, we invite you to join us. Your contributions—whether in code, testing, feedback, or ideas—will help ensure that eZ Publish Basic thrives as a resource for anyone seeking a robust, open-source CMS. Let’s preserve the values of openness and collaboration while creating a tool ready for today’s web.
Help us keep eZ Publish Basic open, accessible, and adaptable for years to come. Join us today on GitHub and be part of the journey to make this legendary CMS a modern, powerful solution for all.
Together, let’s keep the spirit of free software alive and well in eZ Publish Basic!
This is interesting to others who always wanted to provide more similar features the eZ Publish Information Collection System implementation of php + templates + settings that collects information about content objects. I wanted to use the system of features for collecting voting information so I created a duplicate implementation using the core kernel of eZ Publish as a reference while extending it to provide more features unique to the use case of generic content object voting collection and display functionality.
Digg [Sigma] is an idea. A re-implementation of digg.com during it's early php website implementation at v1 through v3 era. A website that promoted small business, group efforts, social networking, social interaction, social bookmarking, web promotions and loads of exciting stories, reading and voting through their implementation of digg.com. Well digg.com got sold, voting and social aspects were shelved and that abruptly ended an era of social news voting and bookmarking from a once prominent source online.
Digg [Sigma] is the engine that is added to any eZ Publish 6 (required) compatible website software installation, when properly configured, provides amazing additional features to your eZ Publish Website like display of content with voting information and functionality from the moment of creation of new content.
Currently there are a lot of configuration and usage requirements changes to be made to the Digg [Sigma] engine implementation for eZ Publish. We aim to simplify this in the future though continued development and abstraction of common themes into better customized templates, settings, views (module/content), php and documentation with usage examples.
To help speed things up for everyone we have quickly assembled the DiggClone Project to help spin up more eZ Publish based websites with the Digg [Sigma] engine built in using composer, default settings, default content (using a full dump of database content to sql file, and all website code files configured) to host clone.digg.one project homepage implementation example zipped up and ready to change the hostname, logo and defaults to meet your own unique needs and you too can host your own digg.one (our project turned into a social bookmarking website) based website using the stable eZ Publish System we live problem free lives knowing our pages are stable and reliably serving the public.
The DiggClone Project serves as a ready to use solution. The DiggClone Project provides a easy to use, reliable and up to date build of the latest digg [Sigma] software (as made available on digg.one social bookmarking and networking website (Example Project #0)) that can be used or merged into your existing eZ Publish website. This gives you the inner workings of the engine working for your needs.
(Primary Package to Install (Project) - This contains everything required save composer + php + web server + database server + some assembly required ;) called 7x DiggClone (Example Project #1): https://github.com/se7enxweb/clone.digg.one
(Core : Front-end : Information Collection Attribute) eZ DataType For Content Voting called 7x Digg: https://github.com/se7enxweb/sevenx_digg
(Secondary : Front-end : Digg Design + Module Views) eZ Design Extension called 7x DiggClone: https://github.com/se7enxweb/sevenx_diggclone
Really quickly now this is exciting a previous customer of 7x who also wanted a content voting and ranking features for their website already in eZ Publish, Global Mandates sponsored the development and refinement of the very first diggClone example implementation actually implemented in a real copy of any existing eZ Publish website. Now available at globalmandates.org home page. This work will be released in time at (Example Project #2): https://github.com/se7enxweb/sevenx_globalmandates on GitHub as well to provide another even faster starting point for end users to use to create their own copy of a digg [Sigma] and DiggClone based website using eZ Publish.
In the future we will reduce the amount of work needed to simply start using the templates and settings provided in a meaningful way. Currently the bindings between default structure content IDs, Identifiers, templates all lack settings support to store this information in an abstraction that allows for easier setup in seconds vs hours.
In the future we will focus on 7x Digg extension development to contain the refined templates of the diggClone extension as well as the module views and settings. This will reduce our need for the diggClone extension to just use the solution more efficiently.
In the future we will implement the example of Global Mandates implementation of a Digg (Clone/eZ) website like enhanced templates and home page design (unique from digg.one domain) into DiggClone repositories. These changes will provide a much faster starting point as they will also include written documentation and key instructions for getting started in minutes vs days without help. This documentation will help give a centralized place to explain in greater detail problems or issues which might arise while working with eZ Publish + 7x Digg based projects which will incentivize solving problems before they become real.
This should by the near future result in a consolidated, documented, and quick to implement starting point for any end user to clone this project software for any need like hosting your own digg based social network platform of websites.
Digg.one is a fun place to share information and make a searchable record of your own information that matters to you the individual.
eZ Publish is a fun website framework that makes publishing to the web a dream come true!
Together they form the DiggClone Project resulting in 7x Digg, DiggClone, clone.digg.one and GlobalMandates.org
Who can say what the future will hold for what started out as a simple test of what was possible with a little focused interest while developing with my favorite cms.
What do you think? Should I have based this solution on the eZ Star Rating DataType System implementation instead? I chose the Information Collection System because I felt it would offer more in the short term faster than the most obvious alternative.
Happy Hacking!
I’m please to note here the release and availability for download and installation and usage to update your installation of eZ Publish 6 (composer based installs+) to further improved releases in the future.
I have an omission to share for the past 20 years or more I have been providing eZ Publish based open source development support services as //kracker and kracker.org
Recently I have converted my own personal use domain from a splash page domain index into a full mult sub domain based eZ Publish 6 web applicatio platform of web content. This lets me host with ease my main domain in eZ Publish and my subdomain within the same instance / installation meaning larger network application features abound.
I plan on soon writing a detailed blog post about cpanel based mult domain mult site installation configurations using the 7x Symbolic Link Distribution of eZ Publish 6.
Add comment