1 June 2020
Textpattern version 4.8.1 is now available.
Upgrading to Textpattern 4.8.1
Textpattern 4.8.1 can be upgraded to (or installed) using any of Installatron's products. Use Installatron's optional Automatic Update feature to automatically apply Textpattern updates as new versions are released, or use Installatron's Clone feature to duplicate an existing Textpattern install to test the 4.8.1 upgrade prior to applying it live. Get started managing your Textpattern installations with Installatron
What's New in Textpattern 4.8.1
We have been busy improving, fixing, adding and extending our beloved content management system to make it better than ever.
UI and UX
- Changed: Improved pophelp for update check status on Diagnostics panel.
- Changed: Tag builder includes new 4.8.x attributes where possible.
- Changed: Lazy load images within Images list on supported browsers.
- Changed: Dedicated ‘*’ option when altering theme/page/style to leave assets as they are.
- Fixed: Development and live assets are kept in sync when renamed.
- Fixed: When setting development assets/themes, link to both live and dev assets even if they share a name.
- Changed: Multi-assign pageless (live) sections.
- Changed: Improved handling of yyyy/mm/dd article permlinks. Single-digit months and days permitted, and /section/yyyy/mm/dd will limit articles to the given section.
- Changed: Use noopener on target=”_blank” links.
- Fixed: Default value of permlink_format on new installs. Thanks, cara-tm.
- Fixed: Multi-site index.php correctly included in multi-site css.php.
- Changed: Support <txp:else /> in shortcodes.
- Added: showalways attribute for <txp:pages /> tag.
- Added: Latest translations. Thank you to all translators for your hard work.
Libraries and internal workings
- Changed: Optimised language loading.
- Added: Support for InnoDB database engine.
- Fixed: RPC errors when altering content from remote editors.
- Fixed: Fall back on partial language identifier if code is not found.
- Fixed: Strings loaded from plugin cache no longer break those already loaded. Thanks, David.
- jQuery 3.5.1.
- PrismJS 1.20.0.
- jQuery File Upload 10.29.0.
Although Textpattern 4.8.0 is a minor release in terms of its version number, over 800 changes have been made to Textpattern’s code to add new functionality, enhance existing features, resolve some issues from previous Textpattern releases and lay more foundations for extending the capabilities of Textpattern in future.
Tags and attributes
- Changed: <txp:newer /> and <txp:older /> tags support pagination ranges.
- Changed: Non-searchable sections can be omitted from <txp:section_list> output with valueless ‘exclude’ attribute.
- Changed: Author’s real name is available in <txp:page_url />.
- Changed: Custom fields support from/to filtering.
- Changed: <txp:evaluate /> removes empty items from lists.
- Added: <txp:if_request /> tag for checking server, URL, POST and cookie variables.
- Added: <txp:pages /> tag for enhanced pagination schemes.
- Added: ‘item’ attribute to <txp:yield /> tag.
- Added: ‘title’ attribute to image tags.
- Added: ‘class’ attribute to comment form tags.
- Added: ‘match’ and ‘separator’ attributes to <txp:if_variable /> tag.
- Added: ‘pg’, ‘total’ and ‘limit’ attributes to <txp:newer /> and <txp:older /> tags.
- Added: Support for id ranges in some tags and admin fields.
- Added: Custom field aliases and URL filters via valueless attributes.
- Added: Global ‘evaluate’, ‘replace’ and ‘yield’ attributes. Evaluate can execute contained content in arbitrary order.
- Added: Ability to trim lists when using valueless ‘trim’ attribute.
- Fixed: <txp:category_list> ‘sort’ attribute respects ‘categories’ attribute instead of requiring sort=”“ override.
- Fixed: <txp:recent_articles /> only uses default link without form/container.
- Support for native PHP password hashing.
- Improved password handling when using MySQL 8+.
Efficiency and performance
- Performance optimizations via cacheing and preloading frequent content.
- Tag parser tweaks for secondpass handler.
- Dark Mode support in Hive admin theme.
- Scroll to top on list panels during navigation.
- Consistent Edit step search behaviour on Plugins and Links panels.
- Text/HTML tabs now in popup dialog, with optional live preview.
- Hive and Classic admin themes now support 3 column layouts.
- Option to disable auto-expanding text areas in Hive admin themes via config.php file. See Hive theme’s README.txt file for instructions.
- Links have an editable publish time and date.
- Removed obsolete ‘No widowed words’ preference setting. If this feature is needed it can be implemented directly with <txp:title /> tag.
- Link to phpinfo() in Diagnostics panel.
- Use locale on admin side.
- Localization of pre-flight diagnostic upgrade messages.
- Fixed undefined variable warnings thrown via compact().
Front side content
- Pageless sections for content snippets and creative article flows.
- Per-section article link format override.
- ‘breadcrumb/title’ article link format.
- ‘section/category/title’ article link format.
- Improved indication of required form fields.
- Honour ‘prefers-reduced-motion’ in official themes.
- Target WCAG 2.0 AAA contrast levels in official themes.
- Improved ARIA experience.
- Improved keyboard-only access experience.
- Support for Bengali language translation.
- Support for Khmer language translation.
- Support for Norwegian Nynorsk language translation.
- Support for Welsh language translation.
- Refined scope of root .htaccess, and restricted directory listing in /files/ and /textpattern/ with their respective .htaccess.
- Plugins cached and loaded from disk to avoid eval().
Designers and developers
- Dedicated live/dev theme switching.
- Plugins can be uploaded with .php and .zip extensions.
- Upload order and file totals sent when batch uploading files.
- Some txplib_misc.php functions moved to txplib_admin.php.
- PHP magic_quotes_gpc, magic_quotes_runtime, safe_mode and register_globals support removed.
- Title accessible to plugins in Atom/RSS.
- Merge headers on demand.
- Tags can be registered with custom attributes/parameters.
- Multiple forms can be fetched at once.
- txp.article > neighbour.criteria callback on Write panel.
File under “Miscellaneous”
- Improved performance of syndication feed handling for sections.
- Random generator supports random_bytes and doesn’t throw errors.
- Support for HTTP status 451 (Unavailable For Legal Reasons).
- index.php correctly included in css.php.
- Removed some deprecated functions from long ago.
- Textile 3.7.6.
- jQuery 3.4.1.
- PrismJS 1.19.0.
- jQuery File Upload 10.8.0.
Textpattern now requires a minimum PHP version of PHP 5.4. PHP 7 is highly recommended.
- Additional code optimization for PHP 5.4 and later.
- Improved language string coverage in setup process.
- Extended use of Textpattern 4.7.*-native tags in Four Point Seven theme.
- Additional database-related information included in Diagnostics.
- <txp:article /> and <txp:article_custom /> correctly parse their content.
- <txp:article /> with 'listform' attribute returns correct value.
- Textpack correctly updates timestamp where web server and database server reside in different timezones.
- Fallback to 'C' locale in some situations.
- Section page/style selectors are correctly populated.
- Articles without a URL-only title have a valid permlink across all link formats.
In memory of Dean Cameron Allen, creator of Textpattern CMS.
- Changed minimum system requirements increased to PHP 5.4.0.
- Textpattern instances older than version 4.2.0 (released 17 Sep 2009) should upgrade to version 4.2.0 before upgrading to version 4.7.0.
- Support for website themes, markup stored within the database (accessed via the Themes panel) and available as flat file templates for easier version control, portability and installation (many many thanks, NicolasGraph).
- Support for installation on Nginx web servers (thanks, makss).
- Support for automated installation from CLI (thanks, makss).
- Filipino language translation (thanks, Joseph Buarao).
- Tagalog language translation (thanks, Kurt Lem Zamora).
- User-selectable column list options in tables replaces 'Show more detail' checkboxes. Settings remembered per device.
- Valueless attributes.
- Optional short-tags.
- Ability to use Forms as tags via <txp:output_form /> or <txp::shortcode /> tags.
- Tag global attributes: 'breakby', 'breakclass', 'class', 'escape', 'html_id', 'not' and 'wraptag'.
- <txp:article_custom /> tag can count pages.
- <txp:evaluate /> tag.
- <txp:header /> tag allows optional setting of HTML headers on page output.
- <txp:if_logged_in /> tag.
- XML and JSON file support. Completely overhauled setup procedure to centralise and verify/delete preferences on upgrade. Table structure and preferences defined in files for easier maintenance (thanks, makss).
- Per-user admin panel language preference (decoupled from site language preference).
- All users can administer their own key biographical info.
- Ability to copy an article without enforced save.
- Button to swap width and height values on image edit thumbnail generator.
- Ctrl+S/Cmd+S keyboard shortcuts for Submit, Publish and Save buttons on any admin panel.
- Multiple Files and Images upload with progress meter.
- Section searches by description.
- Visual indicator that a subset of search fields are in use.
- One-pass comment searches by parent article (thanks, makss).
- Diagnostics can optionally suppress sensitive path data.
- 'Expire now' checkbox on Write panel.
- Automatic table of contents generation for well-structured plugin help text.
- JSON-LD and Open Graph metadata scaffold included with default theme.
- Involuntary Personally Identifiable Information within comments (IP address) and logs (IP address/host) no longer collected - for GDPR compliance.
- Any pre-existing IP addresses stored in comments database table are deleted upon upgrade to 4.7.0 (and not stored in future) - for GDPR compliance.
- Comments 'Remember me?' option is now an opt-in instead of opt-out, setting stored in localStorage instead of as a cookie - for GDPR compliance.
- Revised multi-site installation routine and symbolic linking (thanks, jools-r).
- Most panels perform saves/searches/pagination without page refreshes (Ajax).
- Last used Page/Form/Stylesheet remembered.
- Forms can recursively (up to 15 levels deep) call themselves.
- <txp:breadcrumb /> can be used as a container tag, and accepts 'type' attribute.
- Enhanced <txp:article /> sort and status handling.
- Enhanced <txp:article_custom /> 'exclude', 'expired', 'month' and 'time' attributes.
- <txp:category_list /> can output nested lists.
- <txp:if_category /> accepts 'parent' attribute.
- <txp:image_author /> tag accepts 'id' and 'name' attributes.
- <txp:link_to_next/> and <txp:link_to_prev /> are more consistent.
- Reinstate <txp:keywords> tag and add 'break', 'class' and 'wraptag' attributes.
- Deprecated <txp:image_display /> and <txp:image_index /> tags, use <txp:image /> and <txp:images />, respectively, instead.
- <txp:newer /> and <txp:older /> tags accept 'rel' attribute.
- <txp:output_form /> tag supports user-defined attributes, coupled with <txp:yield>.
- <txp:page_title /> tag SEO - site name renders after page name, default separator changed from ': ' to ' | ', page numbers added.
- <txp:page_url /> tag can return more URL paths via 'type' attribute.
- <txp:site_url /> tag accepts 'type' attribute to return admin-side URL.
- Deprecated the 'poplink' attribute on <txp:thumbnail /> tag.
- <txp:yield> tag accepts 'name' and 'default' attributes.
- Pagination tags (like <txp:newer /> and <txp:older />) can be placed before <txp:article /> tag.
- Image Edit panel available to all users - read-only to some (thanks, phiw13).
- Textfilter options and help topics moved inline with their textareas. Write panel 'sidehelp' twisty and article>sidehelp callback removed.
- Categories moved from Sort & Display subpanel to their own twisty. Override Form (if used) moved to 'Sort and display' subpanel. 'Advanced' twisty and its callback removed.
- Languages are updated automatically on upgrade.
- Further improvements to RTL language support.
- Language translations included in core instead of legacy RPC server.
- Diagnostics and tag trace reports always rendered in English (for easier international support enquiries). Text strings moved to 'mode.ini'.
- Use local inline help files instead of legacy RPC server. Help topics rendered in dialogs instead of new window (thanks, makss).
- Use JSON file to check for new releases/pre-releases instead of legacy RPC server (thanks, makss).
- Cleanup of panels/UI elements shown based on specific user roles.
- Plugin Textpacks stored in database and installed on demand.
- Plugins have persistent data column available for custom storage.
- Clearer plugin list on Diagnostics panel.
- Article posted/modified info and ID moved below Title field.
- Enable HTTP 226 responses (thanks, da2x).
- Make Preferences panel and subpanels fully printable (thanks, phiw13).
- Panel states stored only client-side (localStorage).
- pluggable_ui() behaves more intelligently when chaining.
- Pagination steps are more grid friendly: 12/24/48/96 items.
- More locale-aware date handling in safe_strftime().
- Deprecated support for uploading .swf files via Images panel (support will be removed entirely at Textpattern 4.8.0).
- Extensive admin theme image optimizations.
- Admin theme accessibility improvements.
- Admin theme layout improvements on small devices.
- Pagination and search added to Plugins panel.
- Plugin preview page syntax highlighting and layout improvements. Also show Textpack string additions preview (if applicable).
- Removed 'Create ...' links from Pages/Forms/Styles panels when viewing a new, unsaved Page/Form/Style (thanks, adi).
- Categories can no longer reassign the parent of a child element to its children. Avoids infinite tree loops.
- Article preview includes debug info.
- 'wraptag' attribute can prepend/append content using special '<+>' syntax.
- Developer: 'ahu' constant as multi-site-compatible URL to admin side. Plugin authors please use ahu in place of hu.'textpattern'.
- Removed zxcvbn password strength meter.
- Multi-site setup overhauled: Correct setup and install messages, diagnostics information, login URL in user-invite email, login cookie accessible to public and admin URLs (thanks, jools-r).
- SQL injection in 'qty' attribute (thanks Manuel Garcia Cárdenas).
- Keyboard navigation on select list popups.
- Only update database version string if using release version.
- Support for other MySQL client versions (thanks, CeBe).
- URL handling for /title and /year/month/day/title (thanks, planeth44).
- Panel layout improvements across all privilege levels.
- Per-user preferences exposed to all users (thanks, gaekwad).