8 KiB
Hypothetical Template
The Hypothetical website template based on Laravel 5.6
Utilities
Language
The default language is set by the DEFAULT_LANGUAGE
variable in the .env
file. This will be the language used until it is changed, which can be done using the /language/{lang}
route or directly using Language::setSessionLanguage($lang)
where in both cases lang
is the language code for a given language.
In the view, a block of text can be configured with multiple languages using the following syntax:
@lang([
'en' => "This is a sentence",
'fr' => "C'est une phrase"
])
or
{{ Language::select([ 'en' => "This is a sentence", 'fr' => "C'est une phrase" ]) }}
Public
The default public facing website uses vue.js. To configure a non-SPA traditional website, look at the files in traditional-bootstrap
.
The following list of files and directories are where various pieces of the public website are located:
resources/views/templates/base.blade.php
: The outer template for the entire websiteresources/views/templates/public.blade.php
: The inner template for the public siteresources/assets/fonts
: The folder containing website fonts (these get loaded intopublic/fonts/
by the gulpfile)resources/assets/js/app.js
: The main javascript file that loads the public siteresources/assets/js/mixins
: The folder containing vue.js mixins that can be applied globally inresources/assets/js/app.js
or in individual componentsresources/assets/js/mixins/base-page.js
: The base-page mixin with page functionality that should be imported into all page componentsresources/components
: The folder containing vue.js componentsresources/components/pages
: Page components that should be imported into vue-router inresources/assets/js/app.js
resources/components/sections
: Section components (single-use per page) that should be imported into mixins or page componentsresources/components/partials
: Partial components (multi-use per page or section) that should be imported into mixins and/or page and section components
resources/assets/sass/app.scss
: The main sass file for the public siteresources/assets/sass/_fonts.scss
: Stylesheet containing font declarations and mixins declared to use those fonts in other stylesheetsresources/assets/sass/_var.scss
: Stylesheet containing variables to be used in other stylesheetsresources/assets/sass/pages
: Stylesheets for page-specific styles wrapped in the respective page component classresources/assets/sass/sections
: Stylesheets for section-specific styles wrapped in the respective section component classresources/assets/sass/partials
: Stylessheets for partial-specific styles wrapped in the respective partial component classresources/assets/sass/classes
: General stylesheets for classes that can be used anywhereresources/assets/sass/mixins
: Stylesheets declaring SCSS mixins for use in other stylesheets
Dependencies can be included with bower or npm and loaded either into the jsPublicLibs
array in the gulpfile or imported in the javascript.
Other information about database interaction, routing, controllers, etc can be viewed in the Laravel Documentation.
Dashboard
Updating the dashboard menu
The dashboard menu can be edited by changing the $menu
array in app/Models/Dashboard.php
.
The each item in the array is itself an array, containing either a menu item or a dropdown of menu items.
Dropdowns should contain the following keys:
title
: The text that appears on the dropdown itemsubmenu
: This is an array of menu items.
Menu items should contain the following keys:
title
: The text that appears on the menu itemtype
: The dashboard type (this can beview
for a viewable table oredit
for an editable list)model
: The lowercase name of the database model
Adding a new model to the dashboard
Create a model that extends the DashboardModel
class and override variables that don't fit the defaults.
DashboardModel variables
$dashboard_type
: The dashboard type (this can beview
for a viewable table oredit
for an editable list)$dashboard_heading
: This sets the heading that appears on the dashboard page; not setting this will use the model name$export
: This enables a button that allows the table to be exported as a spreadsheet
Edit variables
These are variables that only function when the $dashboard_type
variable is set to edit
.
$create
: A boolean determining whether to enable a button that allows new records to be created$delete
: A boolean determining whether to enable a button that allows records to be deleted$filter
: A boolean determining whether to enable an input field that allows records to be searched$dashboard_help_text
: An html string that will add a help box to the top of the edit-item page$dashboard_display
: An array to configure what column data to show on each item in the edit-list$dashboard_reorder
: A boolean determining whether to render drag handles to reorder the items in the list$dashboard_sort_column
: A string containing the column used to sort the list (this should be aninteger
when$dashboard_reorder
is true)$dashboard_sort_direction
: When$dashboard_reorder
is false this determines the sort direction (this can bedesc
for descending orasc
ascending)$dashboard_button
: An array containing the following items in this order:- The title
- Confirmation text asking the user to confirm
- A "success" message to display when the response is
success
- A "failure" message to display when the response is not
success
- The URL to send the POST request to with the respective
id
in the request variable
Configuring the columns
All DashboardModel
models require a $dashboard_columns
array that declares which columns to show and how to treat them.
All models use the following attributes:
name
: The name of the modeltitle
: (optional) The title that should be associated with the model; when unset this becomes the model name with its first letter capitalized
Models with their $dashboard_type
set to edit
also use:
type
: The column type which can be any of the following:text
: Text input field for text datamkd
: Markdown editor for text data containing markdowndate
: Date and time selection tool for date/time dataselect
: Text input via option select with possible options in anoptions
arrayhidden
: Fields that will contain values to pass to the update function but won't appear on the page (this must be used for the sort column)image
: Fields that contain image uploadsfile
: Fields that contains file uploadsdisplay
: Displayed information that can't be editeduser
: This should point to a foreign key that references the id on the users table; setting this will bind items to the user that created them
name
: (required byfile
andimage
) Used along with the record id to determine the filenamedelete
: (optional forfile
andimage
) Enables a delete button for the upload when set to trueext
: (required byfile
) Configures the file extension of the upload
An example of the $dashboard_columns
array in a model with its $dashboard_type
set to view
:
public static $dashboard_columns = [
[ 'title' => 'Date', 'name' => 'created_at' ],
[ 'name' => 'email' ],
[ 'name' => 'name' ]
];
An example of the $dashboard_columns
array in a model with its $dashboard_type
set to edit
:
public static $dashboard_columns = [
[ 'name' => 'user_id', 'type' => 'user' ],
[ 'name' => 'created_at', 'title' => 'Date', 'type' => 'display' ],
[ 'name' => 'title', 'type' => 'text' ],
[ 'name' => 'body', 'type' => 'mkd' ],
[ 'name' => 'tags', 'type' => 'text' ],
[ 'name' => 'header-image', 'title' => 'Header Image', 'type' => 'image', 'delete' => true ]
];