Be notified of new releases
Create your free GitHub account today to subscribe to this repository for new releases and build software alongside 31 million developers.Sign up
* [New] Add PHP 7.3 tests * [New] Add `2.0.x-dev` alias for master branch to `composer.json` * [Changed] Update to Parsedown Extra 0.8 and Parsedown 1.8 (both still beta) * [Changed] Improve release & build process
* [Fixed] Support alternative server ports in `Pico::getBaseUrl()` * [Changed] Don't require server environment variables to be configured * [Changed] Improve release & build process * [Changed] Improve documentation * [Changed] Improve PHP class docs * [Changed] Various small improvements
* [Changed] Improve documentation * [Changed] Add missing "Formatted Date", "Time" and "Hidden" meta headers; use the "Hidden" meta header to manually hide a page in the pages list
This is Pico's second major release!
For a complete list of all changes compared to Pico 1.0, please refer to Pico's CHANGELOG.md (including the three beta releases
Please refer to Pico's new upgrade docs to find out what has changed and how to upgrade your Pico 1.0 installation to Pico 2.0.
* [New] Add Bountysource * [Changed] Improve documentation * [Changed] Improve release & build process * [Changed] Add `Pico::setConfig()` example to `index.php.dist` * [Fixed] Don't load `config/config.yml` multiple times
Third beta release of Pico's second major release. This is a pre-release!
* [Changed] Add `README.md`, `CONTRIBUTING.md` and `CHANGELOG.md` of main repo to pre-bundled releases, keep `.gitignore` * [Changed] Deny access to a possibly existing `composer.phar` in `.htaccess` * [Changed] Disallow the use of the `callback` filter for the `url_param` and `form_param` Twig functions * [Changed] Improve documentation * [Fixed] Fix page tree when sorting pages by arbitrary values * [Fixed] Fix sorting of `Pico::$nativePlugins`
Second beta release of Pico's second major release. This is a pre-release!
* [New] Improve release & build process and move most build tools to the new `picocms/ci-tools` repo, allowing them to be used by other projects * [New] Add page tree; refer to the `Pico::buildPageTree()` method for more details; also see the `onPageTreeBuilt` event * [Changed] Update dependencies: Twig 1.35 * [Changed] ! Improve `.htaccess` and deny access to all dot files by default * [Changed] ! Throw a `RuntimeException` when non-native plugins are loaded, but Pico's `PicoDeprecated` plugin is not loaded * [Changed] ! Change `AbstractPicoPlugin::$enabled`'s behavior: setting it to TRUE now leads to throwing a `RuntimeException` when the plugin's dependencies aren't fulfilled; use NULL to maintain old behavior * [Changed] ! Force themes to use `.twig` as file extension for Twig templates * [Changed] Improve PHP class docs * [Changed] Various small improvements
First beta release of Pico's second major release. This is a pre-release!
* [New] Pico is on its way to its second major release! * [New] Improve Pico's release & build process * [New] Add "Developer Certificate of Origin" to `CONTRIBUTING.md` * [New] Add license & copyright header to all relevant files * [New] Add Pico version constants (`Pico::VERSION` and `Pico::VERSION_ID`), and add a `version` Twig variable and `%version%` Markdown placeholder * [New] Add Pico API versioning for plugins (see `Pico::API_VERSION` constant); Pico now triggers events on plugins using the latest API version only ("native" plugins), `PicoDeprecated` takes care of all other plugins; as a result, old plugin's always depend on `PicoDeprecated` now * [New] Add a theme and plugin installer for composer; Pico now additionally uses the new `vendor/pico-plugin.php` file to discover plugins installed by composer and loads them using composer's autoloader; see the `picocms/composer-installer` repo for more details; Pico loads plugins installed by composer first and ignores conflicting plugins in Pico's `plugins/` dir * [New] Add `$enableLocalPlugins` parameter to `Pico::__construct()` to allow website developers to disable local plugin discovery by scanning the `plugins/` dir (i.e. load plugins from `vendor/pico-plugin.php` only) * [New] Add public `AbstractPicoPlugin::getPluginConfig()` method * [New] Add public `Pico::loadPlugin()` method and the corresponding `onPluginManuallyLoaded` event * [New] Add public `Pico::resolveFilePath()` method (replaces the protected `Pico::discoverRequestFile()` method) * [New] Add public `Pico::is404Content()` method * [New] Add public `Pico::getYamlParser()` method and the corresponding `onYamlParserRegistered` event * [New] Add public `Pico::substituteFileContent()` method * [New] Add public `Pico::getPageId()` method * [New] Add public `Pico::getFilesGlob()` method * [New] Add public `Pico::getVendorDir()` method, returning Pico's installation directory (i.e. `/var/www/pico/vendor/picocms/pico`); don't confuse this with composer's `vendor/` dir! * [New] Add `$default` parameter to `Pico::getConfig()` method * [New] Add empty `assets/` and `content/` dirs * [New] #305: Add `url_param` and `form_param` Twig functions, and the public `Pico::getUrlParameter()` and `Pico::getFormParameter()` methods, allowing theme developers to access URL GET and HTTP POST parameters * [New] Add `$meta` parameter to `markdown` Twig filter * [New] Add `remove` fallback to `sort_by` Twig filter * [New] Add `theme_url` config parameter * [New] Add public `Pico::getBaseThemeUrl()` method * [New] Add `REQUEST_URI` routing method, allowing one to simply rewrite all requests to `index.php` (e.g. use `FallbackResource` or `mod_rewrite` in your `.htaccess` for Apache, or use `try_files` for nginx) * [New] #299: Add built-in 404 page as fallback when no `404.md` is found * [New] Allow sorting pages by arbitrary meta values * [New] Add `onSinglePageLoading` event, allowing one to skip a page * [New] Add `onSinglePageContent` event * [New] Add some config parameters to change Parsedown's behavior * [Changed] ! Disallow running the same Pico instance multiple times by throwing a `RuntimeException` when calling `Pico::run()` * [Changed] ! #203: Load plugins from `plugins/<plugin name>/<plugin name>.php` and `plugins/<plugin name>.php` only (directory and file name must match case-sensitive), and throw a `RuntimeException` when Pico is unable to load a plugin; also throw a `RuntimeException` when superfluous files or directories in `plugins/` are found; use a scope-isolated `require()` to include plugin files * [Changed] ! Use a plugin dependency topology to sort `Pico::$plugins`, changing the execution order of plugins so that plugins, on which other plugins depend, are always executed before their dependants * [Changed] ! Don't pass `$plugins` parameter to `onPluginsLoaded` event by reference anymore; use `Pico::loadPlugin()` instead * [Changed] ! Leave `Pico::$pages` unsorted when a unknown sort method was configured; this usually means that a plugin wants to sort it * [Changed] Overhaul page discovery events: add `onPagesDiscovered` event which is triggered right before `Pico::$pages` is sorted and move the `$currentPage`, `$previousPage` and `$nextPage` parameters of the `onPagesLoaded` event to the new `onCurrentPageDiscovered` event * [Changed] Move the `$twig` parameter of the `onPageRendering` event to the `onTwigRegistered` event, replacing the `onTwigRegistration` event * [Changed] Unify the `onParsedownRegistration` event by renaming it to `onParsedownRegistered` and add the `$parsedown` parameter * [Changed] #330: Replace `config/config.php` by a modular YAML-based approach; you can now use a arbitrary number of `config/*.yml` files to configure Pico * [Changed] ! When trying to auto-detect Pico's `content` dir, Pico no longer searches just for a (possibly empty) directory, but rather checks whether a `index.md` exists in this directory * [Changed] ! Use the relative path between `index.php` and `Pico::$themesDir` for Pico's theme URL (also refer to the new `theme_url` config and the public `Pico::getBaseThemeUrl()` method for more details) * [Changed] #347: Drop the superfluous trailing "/index" from Pico's URLs * [Changed] Flip registered meta headers array, so that the array key is used to search for a meta value and the array value is used to store the found meta value (previously it was the other way round) * [Changed] ! Add lazy loading for `Pico::$yamlParser`, `Pico::$parsedown` and `Pico::$twig`; the corresponding events are no longer part of Pico's event flow and are triggered on demand * [Changed] ! Trigger the `onMetaHeaders` event just once; the event is no longer part of Pico's event flow and is triggered on demand * [Changed] Don't lower meta headers on the first level of a page's meta data (i.e. `SomeKey: value` is accessible using `$meta['SomeKey']`) * [Changed] Don't compare registered meta headers case-insensitive, require matching case * [Changed] Allow users to explicitly set values for the `date_formatted` and `time` meta headers in a page's YAML front matter * [Changed] Add page siblings for all pages * [Changed] ! Treat pages or directories that are prefixed by `_` as hidden; when requesting a hidden page, Pico responds with a 404 page; hidden pages are still in `Pico::$pages`, but are moved to the end of the pages array when sorted alphabetically or by date * [Changed] ! Don't treat explicit requests to a 404 page as successful request * [Changed] Change method visibility of `Pico::getFiles()` to public * [Changed] Change method visibility of `Pico::triggerEvent()` to public; at first glance this method triggers events on native plugins only, however, `PicoDeprecated` takes care of triggering events for other plugins, thus you can use this method to trigger (custom) events on all plugins; never use it to trigger Pico core events! * [Changed] Move Pico's default theme to the new `picocms/pico-theme` repo; the theme was completely rewritten from scratch and is a much better starting point for creating your own theme; refer to the theme's `CHANGELOG.md` for more details * [Changed] Move `PicoDeprecated` plugin to the new `picocms/pico-deprecated` repo; refer to the plugin's `CHANGELOG.md` for more details * [Changed] Update dependencies: Twig 1.34, Symfony YAML 2.8, Parsedown 1.6 * [Changed] Improve Pico docs and PHP class docs * [Changed] A vast number of small improvements and changes... * [Removed] ! Remove `PicoParsePagesContent` plugin * [Removed] ! Remove `PicoExcerpt` plugin * [Removed] Remove `rewrite_url` and `is_front_page` Twig variables * [Removed] Remove superfluous parameters of various events to reduce Pico's error-proneness (plugins hopefully interfere with each other less)
* [Changed] Improve documentation * [Changed] Improve handling of Pico's Twig config (`$config['twig_config']`) * [Changed] Improve PHP platform requirement checks