Multilingual CMS built with Laravel.

Overview

TypiCMS

Latest Version on Packagist Software License Scrutinizer Code Quality

TypiCMS is a modular multilingual content management system built with Laravel. Out of the box you can manage pages, events, news, places, menus, translations, etc.

TypiCMS screenshot

Table of contents

Features

URLs

This kind of URLs are managed by the CMS:

Modules:

  • /en/events/slug-in-english
  • /fr/evenements/slug-en-francais

Pages:

  • /en/parent-pages-slug-en/subpage-slug-en/page-slug-en
  • /fr/parent-pages-slug-fr/subpage-slug-fr/page-slug-fr

Requirements

  • PHP >= 7.2
  • MySQL 5.7.8
  • BCMath PHP Extension
  • Ctype PHP Extension
  • JSON PHP Extension
  • Mbstring PHP Extension
  • OpenSSL PHP Extension
  • PDO PHP Extension
  • Tokenizer PHP Extension
  • XML PHP Extension

Installation

First install Composer

  1. Create a new project

    composer create-project typicms/base mywebsite
    
  2. Enter the newly created folder

    cd mywebsite
    
  3. Migration of the database, seeding, user creation, npm installation and directory rights

    php artisan typicms:install
    

Note: if you use MariaDB, set 'mariadb' to true in config/typicms.php

Go to http://mywebsite.test/admin and log in.

Assets

Assets are managed with Laravel Mix. In order to work on assets, you need to install Node.js, then go to your website folder and run these commands:

  1. Install npm packages (in directory node_modules)

    npm install
    
  2. Compile admin and public assets

    npm run dev
    

Locales configuration

  1. Set the locales in config/typicms.php, the first key of this array is the main locale and should be the same as the locale defined in config/app.php.
  2. Set main_locale_in_url in config/typicms.php to true or false.

Installation of a module

This example is for the News module. After these steps, the module will appear in the sidebar of the back office. If you need to customize it, you can publish it!

  1. Install a module with Composer

    composer require typicms/news
    
  2. Add TypiCMS\Modules\News\Providers\ModuleServiceProvider::class, to config/app.php, before TypiCMS\Modules\Core\Providers\ModuleServiceProvider::class,

  3. Publish the views and migrations

    php artisan vendor:publish
    
  4. Migrate the database

    php artisan migrate
    

Module scaffolding

Let’s create a module called Cats.

  1. Create the module with artisan:

    php artisan typicms:create cats
    
  2. The module is in /Modules/Cats, you can customize it

  3. Add TypiCMS\Modules\Cats\Providers\ModuleServiceProvider::class, to config/app.php, before TypiCMS\Modules\Core\Providers\ModuleServiceProvider::class,

  4. Migrate the database

    php artisan migrate
    

Available modules

Each module can be published.

Pages

Pages are nestable with drag and drop, on drop, URIs are generated and saved in the database. Each translation of a page has its own route. A page can be linked to a module. A page can have multiple sections.

Menus

Each menu has nestable entries. One entry can be linked to a page or URL. You can return a HTML formated menu with Menus::render('menuname') or @menu('menuname').

Projects

Projects have categories, projects URLs follows this pattern: /en/projects/category-slug/project-slug

Tags

Tags are linked to projects and use the Selectize plugin. The tags module has many to many polymorphic relations so a tag can be easily linked to any module.

Events

Events have starting and ending dates.

News

News module.

Contacts

Frontend contact form and admin side records management.

Partners

A partner has a logo, website URL, title and body content.

Files

The files module allows you to upload and organize images, documents and folders. It works with DropzoneJS for the uploading proccess. Thumbnails are generated on the fly thanks to Croppa.

If you want to store the original images on a storage service such as Amazon s3 and your cropped images on the local disk, set FILESYSTEM_DRIVER=s3 in your .env file and in config/croppa.php set 'src_dir' => 'filesystem.default.driver' and 'crops_dir' => storage_path('app/public').

Users and roles

User registration can be enabled through the settings panel (/admin/settings). Roles and Permissions are managed with spatie/laravel-permission.

Blocks

Blocks are useful to display custom content in your views. You can display the content of a block with Blocks::render('blockname') or @block('blockname').

Translations

Translations can be stored in the database through the admin panel (/admin/translations).

You can get a translation from the database with the standard Laravel functions: __('Key'), trans('Key') or @lang('Key').

Sitemap

A sitemap is generated by reading all pages available in your project. The URL is /sitemap.xml.

Settings

Change the website title, logo, and other options in the settings panel.

History

created, updated, deleted, online and offline actions are logged in database. Latest records are displayed in the back office’s dashboard.

Facades

Each modules has a facade that give you access to the repository, you can call for example News::latest(3) to get the three latest news. Check available methods in each module’s repository.

Artisan commands

Commands are located in /vendor/typicms/core/src/Commands

Installation of TypiCMS

php artisan typicms:install

Initial migration and seed

php artisan typicms:database

This command is triggered by typicms:install

Publish a module

If you want to modify a module, for example to add some fields or a relation, you have to publish it by running:

php artisan typicms:publish <modulename>

The module is now located in the /Modules directory.

These steps will be executed:

  1. Publishing of views and migrations for Pages module.
  2. Copying of everything excepted views and migrations from /vendor/typicms/pages/src to /Modules/Pages.
  3. Running composer remove typicms/pages.

When a module is published, it will be tracked by git and you will be able to make changes in /Modules/Modulename directory without loosing changes when running composer update.

Changelog

Please see CHANGELOG for more information on what has changed.

Contributing

Please see CONTRIBUTING for details.

Credits

License

TypiCMS is an open-source software licensed under the MIT license.

Comments
  • Db translations wrapped with doublequotes

    Db translations wrapped with doublequotes

    You just made new version compatible with MariDB, it is good :) But some problees are with it. In EloquentTranslation.php selects returnt translatiens wrapped with doulequotes both in MySQL and MariaDB.

    I would added

    $array = array_map(function($key, $value) { return "{$key} => {".preg_replace('~^(\")([\s\\S]*)(\")$~', '$2', $value)."}"; }, array_keys($array), $array);

    before return $array;

    opened by ludmanp 18
  • Installation Failed Class 'Memcached' not found

    Installation Failed Class 'Memcached' not found

    I tried composer create-project typicms/base. I am getting an error PHP Fatal error: Class 'Memcached' not found in /var/www/typicms/vendor/laravel/framework/src/Illuminate/Cache/MemcachedConnector.php on line 51

    I don't have php5-memcached extension installed. However My point is I don't want to use Memcache What If I want to use redis. Can you please suggest what else should I do to make it work

    opened by matrixbegins 15
  • Issue with Arcanedev/LogViewer

    Issue with Arcanedev/LogViewer

    Salut,

    Il me semble que vous parlez français du coup je tente mon post en français (sinon je traduirai ;)).

    J'essaye de faire fonctionner typi avec arcanedev/logviewer ( https://github.com/ARCANEDEV/LogViewer ) mais pas moyen d'avoir accès à l'url http://test.dev/log-viewer alors que tout semble correctement configuré et que la route est retourné si je fais un artisan route:list. Le système me renvoi à chaque fois l'erreur 404 par défaut de typi.

    Auriez vous une idée d'où pourrait provenir le soucis ?

    Merci et bonne soirée,

    Yannik

    opened by YannikFirre 14
  • Syntax error with MariaDB

    Syntax error with MariaDB

    When I have went through the documentations installing I get this error, and cannot figure out what the heck I am doing wrong.

    SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near '>'$."en"' = ? and `typicms_page_sections`.`page_id` in (?) order by `position` a' at line 1 (SQL: select * from `typicms_page_sections` where `status`->'$."en"' = 1 and `typicms_page_sections`.`page_id` in (1) order by `position` asc)
    

    Version: 10.2.8-MariaDB PHP: 7.1.8

    opened by jimmitjoo 12
  • Pages & parent_id

    Pages & parent_id

    Hi!

    I cannot find if there is removed function to put page under other page as child or there is some issue?

    And if it is new way, so how to make submenus?

    opened by mihy 12
  • Problem installing

    Problem installing

    thanks very much for this, been looking forward to it.

    But it doesnt install. I downloaded zip, unzip and...

    $ composer install
    Loading composer repositories with package information
    Installing dependencies (including require-dev)
    Your requirements could not be resolved to an installable set of packages.
    
      Problem 1
        - typicms/base v2.0.0 requires typicms/core ~1.8 -> no matching package found.
        - Installation request for typicms/base 1.0.0 -> satisfiable by typicms/base[1.0.0].
        - typicms/files v2.0.0 requires typicms/core ~2.0.0 -> satisfiable by typicms/core[v2.0.0, v2.0.1, v2.0.2].
        - typicms/core v2.0.0 requires typicms/base ~2.0.0 -> satisfiable by typicms/base[v2.0.0, v2.0.1, v2.0.2, v2.0.3].
        - typicms/core v2.0.1 requires typicms/base ~2.0.0 -> satisfiable by typicms/base[v2.0.0, v2.0.1, v2.0.2, v2.0.3].
        - typicms/core v2.0.2 requires typicms/base ~2.0.0 -> satisfiable by typicms/base[v2.0.0, v2.0.1, v2.0.2, v2.0.3].
        - Can only install one of: typicms/base[v2.0.1, 1.0.0].
        - Can only install one of: typicms/base[v2.0.2, 1.0.0].
        - Can only install one of: typicms/base[v2.0.3, 1.0.0].
        - Installation request for typicms/files ~2.0.0 -> satisfiable by typicms/files[v2.0.0].
    
    Potential causes:
     - A typo in the package name
     - The package is not available in a stable-enough version according to your minimum-stability setting
       see <https://groups.google.com/d/topic/composer-dev/_g3ASeIFlrc/discussion> for more details.
    
    Read <http://getcomposer.org/doc/articles/troubleshooting.md> for further common problems.
    
    opened by londoh 12
  • Error with COLLATE utf8mb4_unicode_ci

    Error with COLLATE utf8mb4_unicode_ci

    Hi all, Im using TypiCMS 5.0.37 with MariaDB and after installation when i click on a menu item "Pages" in the admin panel i get this error:

    SQLSTATE[42000]: Syntax error or access violation: 1253 COLLATION 'utf8mb4_unicode_ci' is not valid for CHARACTER SET 'utf8' (SQL: select `typicms_pages`.`id`, `typicms_pages`.`position`, `typicms_pages`.`parent_id`, `typicms_pages`.`module`, `typicms_pages`.`redirect`, `typicms_pages`.`is_home`, `typicms_pages`.`private`, 
    CASE WHEN JSON_UNQUOTE( JSON_EXTRACT(`status`, '$.en') ) = 'null' THEN NULL ELSE JSON_UNQUOTE( JSON_EXTRACT(`status`, '$.en') ) END COLLATE utf8mb4_unicode_ci `status_translated` , 
    CASE WHEN JSON_UNQUOTE( JSON_EXTRACT(`title`, '$.en') ) = 'null' THEN NULL ELSE JSON_UNQUOTE( JSON_EXTRACT(`title`, '$.en') ) END COLLATE utf8mb4_unicode_ci `title_translated` , 
    CASE WHEN JSON_UNQUOTE( JSON_EXTRACT(`slug`, '$.en') ) = 'null' THEN NULL ELSE JSON_UNQUOTE( JSON_EXTRACT(`slug`, '$.en') ) END COLLATE utf8mb4_unicode_ci `slug_translated` , 
    CASE WHEN JSON_UNQUOTE( JSON_EXTRACT(`uri`, '$.en') ) = 'null' THEN NULL ELSE JSON_UNQUOTE( JSON_EXTRACT(`uri`, '$.en') ) END 
    COLLATE utf8mb4_unicode_ci `uri_translated` from `typicms_pages` order by `position` asc)
    

    But when i remove COLLATE utf8mb4_unicode_ci in vendor/typicms/core/src/Models/Base.php:139 the error is no longer printed. Can someone tell me why is that collate there? and is it possible to remove it?

    Regards, Bogdan

    opened by dgtllion 11
  • Installation on domain subfolder

    Installation on domain subfolder

    What i need to configure to run it on http://domain.com/subfolder ? I checked for Laravel and there you need just .htacces RewriteBase set to subfolder.

    I set up RewriteBase to /subfolder in .htacces, it works, but then i am redirected to root (http://domain.com/en).

    opened by vizo 10
  • Add CSP when load file svg

    Add CSP when load file svg

    Fix bug Stored XSS when add media file with format .svg allows for arbitrary execution of JavaScript Disclosure: https://huntr.dev/bounties/500b0ee1-3fd7-4efc-861d-7082f2794745

    opened by noobpk 8
  • Multilingual galleries

    Multilingual galleries

    Hi,

    Is it possible to make a multilingual galleries?

    Like when you're on page where is gallery "English" after choosing another language (e.g. Espanol) content changes including gallery to be "Espanol".

    Thank you in advance.

    opened by aleksandar1909 8
  • ErrorException in News Module

    ErrorException in News Module

    Hello, firstly very good job! I have a fresh install of TypiCMS, everything runs smoothly on homestead. When I tried to install News module everything was OK in backend - the option News in menu has appeared, but in frontend I got the following error: ErrorException in UrlGenerator.php line 307: Route [en.news.feed] not defined. (View: /home/vagrant/Code/typiCMS/resources/views/vendor/core/public/_feed-links.blade.php) (View: /home/vagrant/Code/typiCMS/resources/views/vendor/core/public/_feed-links.blade.php) (View: /home/vagrant/Code/typiCMS/resources/views/vendor/core/public/_feed-links.blade.php) Could you please help me with this issue? Thanks in advance, George

    opened by gkouk 8
  • Bump engine.io from 6.2.0 to 6.2.1

    Bump engine.io from 6.2.0 to 6.2.1

    Bumps engine.io from 6.2.0 to 6.2.1.

    Release notes

    Sourced from engine.io's releases.

    6.2.1

    :warning: This release contains an important security fix :warning:

    A malicious client could send a specially crafted HTTP request, triggering an uncaught exception and killing the Node.js process:

    Error: read ECONNRESET
        at TCP.onStreamRead (internal/stream_base_commons.js:209:20)
    Emitted 'error' event on Socket instance at:
        at emitErrorNT (internal/streams/destroy.js:106:8)
        at emitErrorCloseNT (internal/streams/destroy.js:74:3)
        at processTicksAndRejections (internal/process/task_queues.js:80:21) {
      errno: -104,
      code: 'ECONNRESET',
      syscall: 'read'
    }
    

    Please upgrade as soon as possible.

    Bug Fixes

    • catch errors when destroying invalid upgrades (#658) (425e833)
    Changelog

    Sourced from engine.io's changelog.

    6.2.1 (2022-11-20)

    :warning: This release contains an important security fix :warning:

    A malicious client could send a specially crafted HTTP request, triggering an uncaught exception and killing the Node.js process:

    Error: read ECONNRESET
        at TCP.onStreamRead (internal/stream_base_commons.js:209:20)
    Emitted 'error' event on Socket instance at:
        at emitErrorNT (internal/streams/destroy.js:106:8)
        at emitErrorCloseNT (internal/streams/destroy.js:74:3)
        at processTicksAndRejections (internal/process/task_queues.js:80:21) {
      errno: -104,
      code: 'ECONNRESET',
      syscall: 'read'
    }
    

    Please upgrade as soon as possible.

    Bug Fixes

    • catch errors when destroying invalid upgrades (#658) (425e833)

    3.6.0 (2022-06-06)

    Bug Fixes

    Features

    • decrease the default value of maxHttpBufferSize (58e274c)

    This change reduces the default value from 100 mb to a more sane 1 mb.

    This helps protect the server against denial of service attacks by malicious clients sending huge amounts of data.

    See also: https://github.com/advisories/GHSA-j4f2-536g-r55m

    • increase the default value of pingTimeout (f55a79a)
    Commits
    • 24b847b chore(release): 6.2.1
    • 425e833 fix: catch errors when destroying invalid upgrades (#658)
    • 99adb00 chore(deps): bump xmlhttprequest-ssl and engine.io-client in /examples/latenc...
    • d196f6a chore(deps): bump minimatch from 3.0.4 to 3.1.2 (#660)
    • 7c1270f chore(deps): bump nanoid from 3.1.25 to 3.3.1 (#659)
    • 535a01d ci: add Node.js 18 in the test matrix
    • 1b71a6f docs: remove "Vanilla JS" highlight from README (#656)
    • 917d1d2 refactor: replace deprecated String.prototype.substr() (#646)
    • 020801a chore: add changelog for version 3.6.0
    • ed1d6f9 test: make test script work on Windows (#643)
    • See full diff in compare view

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    • @dependabot use these labels will set the current labels as the default for future PRs for this repo and language
    • @dependabot use these reviewers will set the current reviewers as the default for future PRs for this repo and language
    • @dependabot use these assignees will set the current assignees as the default for future PRs for this repo and language
    • @dependabot use this milestone will set the current milestone as the default for future PRs for this repo and language

    You can disable automated security fix PRs for this repo from the Security Alerts page.

    dependencies javascript 
    opened by dependabot[bot] 0
  • Taxonomies and terms

    Taxonomies and terms

    Hi, could someone, please, explain to me how taxonomies and terms works? I need to add custom fields to news and pages and i don't know if its posible.

    Thanks

    opened by rsenses 2
  • PHP 8.1

    PHP 8.1

    Hi!

    I would like to use latest Sail for local environment. I saw that the core package was already upped to Laravel 9, will this package update to Laravel 9 too? @sdebacker if you have any timeline, or you need any help, let me know.

    Thank you

    opened by deveti 5
  • Images don't show from Amazon S3

    Images don't show from Amazon S3

    I'm using Amazon S3 and I can upload files perfectly.

    But on the backoffice and the website all the images are still presented with the APP_URL. I guess the presenter class keeps using the path field instead of url.

    The image detail page is the only place where the image is show correctly. image

    Is there any config that needs to be changed?

    Thank you!

    opened by nunofmmarques 2
  • why tags module (model) has not translations?

    why tags module (model) has not translations?

    hello, I want to know why you don't make tags model transable? for example I want to publish a news in 2 language Persian and English and use same tag in both languages and in another hand when I load admin in Persian, titles of tags in Persian load in select input and when I load admin in English, the same tags load but in English.

    Can I customize Tags module to support tranlation? I mean is it logically correct?

    opened by parsester 0
Releases(10.0.39)
Owner
TypiCMS, Laravel multilingual CMS
Multilingual CMS based on Laravel
TypiCMS, Laravel multilingual CMS
Multilingual CMS built with Laravel.

TypiCMS TypiCMS is a modular multilingual content management system built with Laravel. Out of the box you can manage pages, events, news, places, men

TypiCMS, Laravel multilingual CMS 973 Jun 25, 2021
A modular multilingual CMS built with Laravel 5.

AsgardCMS Platform View the documentation at AsgardCMS.com/docs. Join the conversation on Slack License The AsgardCMS is open-sourced software license

AsgardCMS 770 Jan 2, 2023
Polymorphic and Multilingual CMS powered by Laravel

Nuclear CMS Polymorphic and multilingual content management system. Nuclear is a polymorphic and multilingual content management system powered by Lar

Nuclear CMS 36 Nov 29, 2022
A multilingual, extensible, community oriented CMS developed in PHP

ImpressCMS is a community developed Content Management System. With this tool maintaining the content of a website becomes as easy as writing a word d

ImpressCMS 26 Dec 14, 2022
A Concrete CMS package to add interfaces to translate multilingual content. You can translate content manually, or use cloud API.

Concrete CMS add-on: Macareux Content Translator Concrete CMS has powerful features to manage multilingual content by its default. You can add languag

株式会社マカルーデジタル 3 Nov 28, 2022
A multilingual, extensible, community oriented CMS developed in PHP

ImpressCMS is a community developed Content Management System. With this tool maintaining the content of a website becomes as easy as writing a word d

ImpressCMS 26 Dec 14, 2022
Amila Laravel CMS - Free, open-source Simple Bootstrap Laravel CMS

Simple Bootstrap Laravel CMS. Support Laravel 8.x Can integrate into any existing Laravel project. Only add few database tables with prefixes, not affect your existing database tables. Support Laravel 7.x & Laravel 6.x & Laravel 5.x & MySql & PostgreSql - Amila Laravel CMS

Alex Zeng 96 Sep 6, 2022
Doptor CMS is a Laravel 5 based CMS

Introduction Doptor CMS is a Laravel 5 based CMS. Find out more about Doptor by reading below. ;) About Doptor CMS Doptor is an Integrated and well-de

DOPTOR 4 Sep 11, 2022
Bootstrap CMS - PHP CMS powered by Laravel 5 and Sentry

Bootstrap CMS Bootstrap CMS was created by, and is maintained by Graham Campbell, and is a PHP CMS powered by Laravel 5.1 and Sentry. It utilises many

Bootstrap CMS 2.5k Dec 27, 2022
KodiCMS - CMS built on Laravel 5.2

KodiCMS based on Laravel PHP Framework English Version Установка (Installation): Клонировать репозиторий (Clone repository) git clone https://github.c

KodiCMS built on Laravel 163 Nov 27, 2022
ARCANESOFT - CMS built with Laravel Framework.

ARCANESOFT CMS built with Laravel Framework. By ARCANEDEV© Available Packages Production Package Description arcanedev/breadcrumbs A simple & easy way

ARCANESOFT 11 Oct 10, 2020
A PHP 5.3 CMS built on top of Laravel 4 and other composer components.

Anvil Forge your website! A PHP 5.3 CMS built on top of Laravel 4 and other composer components. Installation Installing Anvil is easy. Run the follow

Loïc Sharma 17 May 3, 2022
Flextype is an open-source Hybrid Content Management System with the freedom of a headless CMS and with the full functionality of a traditional CMS

Flextype is an open-source Hybrid Content Management System with the freedom of a headless CMS and with the full functionality of a traditional CMS. Building this Content Management System, we focused on simplicity. To achieve this, we implemented a simple but powerful API's.

Flextype 524 Dec 30, 2022
PHPVibe Open source video CMS / Video Sharing CMS / Youtube Api v3 / Video Embeds

PHPVibe Video CMS Free Video Sharing CMS The modern choice of design inspired by Youtube and a social videos sharing module that may just cut it for y

MediaVibe 71 Dec 18, 2022
NukeViet 132 Nov 27, 2022
BaiCloud-cms is a powerful open source CMS that allows you to create professional websites and scalable web applications. Visit the project website for more information.

BaiCloud-cms About BaiCloud-cms is a powerful open source CMS that allows you to create professional websites and scalable web applications. Visit the

null 5 Aug 15, 2022
Baicloud CMS is a lightweight content management system (CMS) based on PHP and MySQL and running on Linux, windows and other platforms

BaiCloud-cms About BaiCloud-cms is a powerful open source CMS that allows you to create professional websites and scalable web applications. Visit the

null 5 Aug 15, 2022
Bismuth CMS is a ready-made Website CMS based on Yii 2 Advance Template

Bismuth CMS is a ready-made Website CMS based on Yii 2 Advance Template, it's the simplest and easy to set up CMS you may come across.

Hamadas Telebrain 1 Feb 11, 2022
GetSimple CMS - a flatfile CMS that works fast and efficient and has the best UI around, it is written in PHP

GetSimple CMS is a flatfile CMS that works fast and efficient and has the best UI around, it is written in PHP.

null 370 Dec 30, 2022