diff --git a/docs/_images/cp-channel-categories-tab.png b/docs/_images/cp-channel-categories-tab.png new file mode 100644 index 000000000..8743a2fd8 Binary files /dev/null and b/docs/_images/cp-channel-categories-tab.png differ diff --git a/docs/_images/cp-entry-categories-tab.png b/docs/_images/cp-entry-categories-tab.png new file mode 100644 index 000000000..daee52bce Binary files /dev/null and b/docs/_images/cp-entry-categories-tab.png differ diff --git a/docs/_images/cp-members.png b/docs/_images/cp-members.png index 197381423..3d4a07684 100644 Binary files a/docs/_images/cp-members.png and b/docs/_images/cp-members.png differ diff --git a/docs/_images/cp_collapase_arrow.png b/docs/_images/cp_collapse_arrow.png similarity index 100% rename from docs/_images/cp_collapase_arrow.png rename to docs/_images/cp_collapse_arrow.png diff --git a/docs/_images/field_file.png b/docs/_images/field_file.png index 176dcf6d3..b56def094 100644 Binary files a/docs/_images/field_file.png and b/docs/_images/field_file.png differ diff --git a/docs/_images/field_file_file.png b/docs/_images/field_file_file.png new file mode 100644 index 000000000..d605958d1 Binary files /dev/null and b/docs/_images/field_file_file.png differ diff --git a/docs/_images/field_members.png b/docs/_images/field_members.png new file mode 100644 index 000000000..ef0933aba Binary files /dev/null and b/docs/_images/field_members.png differ diff --git a/docs/_images/field_short_name.png b/docs/_images/field_short_name.png new file mode 100644 index 000000000..b050d0d10 Binary files /dev/null and b/docs/_images/field_short_name.png differ diff --git a/docs/_images/icon_edit.png b/docs/_images/icon_edit.png new file mode 100644 index 000000000..ec421f13f Binary files /dev/null and b/docs/_images/icon_edit.png differ diff --git a/docs/_images/icon_edit_meta.png b/docs/_images/icon_edit_meta.png new file mode 100644 index 000000000..7dd68aa4a Binary files /dev/null and b/docs/_images/icon_edit_meta.png differ diff --git a/docs/_images/icon_remove.png b/docs/_images/icon_remove.png new file mode 100644 index 000000000..be400d33e Binary files /dev/null and b/docs/_images/icon_remove.png differ diff --git a/docs/_images/rte-buttons.png b/docs/_images/rte-buttons.png new file mode 100644 index 000000000..c75b79a9d Binary files /dev/null and b/docs/_images/rte-buttons.png differ diff --git a/docs/_tips/form-attributes.md b/docs/_tips/form-attributes.md new file mode 100644 index 000000000..c71543ebb --- /dev/null +++ b/docs/_tips/form-attributes.md @@ -0,0 +1 @@ +TIP: Valid HTML Form attributes (as listed in the [config file](config/config-files.md#html-form-attributes)), `data-` and `aria-` attributes passed through ExpressionEngine tag parameters in the template will be included into generated opening form tag. \ No newline at end of file diff --git a/docs/add-ons/consent.md b/docs/add-ons/consent.md index 1f46cd009..73cbe52c4 100755 --- a/docs/add-ons/consent.md +++ b/docs/add-ons/consent.md @@ -40,6 +40,8 @@ Consent Forms allow the visitor to grant or withdraw consent to one or more Cons [TOC=3] +{{embed:_tips/form-attributes.md}} + #### `consent=` consent='ee:cookies_functionality' @@ -179,7 +181,7 @@ If this tag would not output any consent requests due to your filters, the conte No Consent Requests Available {/if} -### Conesnt Form Examples +### Consent Form Examples #### Simple Bulk Consent Form @@ -466,7 +468,7 @@ If you need to exclude one or several types from display, use `not ` before the provider='ee' -Limits display of cookies by cookie provider. +Limits display of cookies by cookie provider. If the cookie is provided by an add-on, the provider matches the add-ons short name, e.g. `comment` or `forum` The core ExpressionEngine cookies are identified by `ee` as provider. If cookie is only being used in Control Panel, the provider is set to `cp`. diff --git a/docs/add-ons/email.md b/docs/add-ons/email.md index 16e8b1c11..3afec336c 100755 --- a/docs/add-ons/email.md +++ b/docs/add-ons/email.md @@ -56,6 +56,8 @@ The contact form is created similar to a standard web form, only you **do not** [TOC=3] +{{embed:_tips/form-attributes.md}} + ### `charset=` charset="utf-8" diff --git a/docs/add-ons/pro-search/filters.md b/docs/add-ons/pro-search/filters.md index 4fe1ab03e..a0dca61a9 100644 --- a/docs/add-ons/pro-search/filters.md +++ b/docs/add-ons/pro-search/filters.md @@ -168,7 +168,7 @@ You can use the native `search:field_name` parameter to target specific fields. ### Parameters #### `search:field_name` - Like the [channel search:field_name= parameter](/channel/channel_entries.html#search-field-name). + Like the [channel search:field_name= parameter](/channel/channel_entries.md#search-field-name). #### `search:field_name:column_name` Works just like the `search:field_name` parameter, but targets a specific column in a Grid/Matrix field. #### `search:title` @@ -178,7 +178,7 @@ You can use the native `search:field_name` parameter to target specific fields. #### `search:status` Works just like the `search:field_name` parameter, but targets statuses. #### `contains_words` - Accepts parameter names. Force the given parameter values to match the full term, to ensure that the values are [not contained within other words](/channel/channel_entries.html#contains-matching). Also possible by using `search:field_name="value\W"`. + Accepts parameter names. Force the given parameter values to match the full term, to ensure that the values are [not contained within other words](/channel/channel_entries.md#contains-matching). Also possible by using `search:field_name="value\W"`. #### `ends_with` Accepts parameter names. Force the given parameter values to match the end of the target field. Also possible by using `search:field_name="value$"`. #### `exact` diff --git a/docs/add-ons/pro-search/parameters.md b/docs/add-ons/pro-search/parameters.md index 459a3597e..386c9e6b5 100644 --- a/docs/add-ons/pro-search/parameters.md +++ b/docs/add-ons/pro-search/parameters.md @@ -117,7 +117,7 @@ This is equal to: ### SQL parameters -Pro Search supports SQL parameters. This means you can use a SQL query in any pararameter. SQL queries are limited to SELECTs only and should always end with a semi-colon (;). Pro Search will take the first item in the SELECT statement and creates a pipe-separated list from it. If the SQL query produces no results, it sets the parameter value to what comes after the semi-colon. You can optionally prefix the SQL query for better matching. Schematically, such a query looks like this: +Pro Search supports SQL parameters. This means you can use a SQL query in any parameter. SQL queries are limited to SELECTs only and should always end with a semi-colon (;). Pro Search will take the first item in the SELECT statement and creates a pipe-separated list from it. If the SQL query produces no results, it sets the parameter value to what comes after the semi-colon. You can optionally prefix the SQL query for better matching. Schematically, such a query looks like this: `param="prefix SELECT field FROM table WHERE lorem = 'ipsum';no results"` diff --git a/docs/add-ons/pro-search/settings.md b/docs/add-ons/pro-search/settings.md index c9e783cc5..035a4337f 100644 --- a/docs/add-ons/pro-search/settings.md +++ b/docs/add-ons/pro-search/settings.md @@ -40,7 +40,7 @@ The same query with GET variables would look like this: `domain.com/search/results?keywords=hello+world` -Using GET variables is not possible if the `uri_protocol` config setting is set to QUERY_STRING. It can also cause unexpected behaviour if you’re using the second exception (the question mark) in your `.htaccess` file when hiding `index.php`. If you can, use the encoded query instead as this will always work. +Using GET variables is not possible if the `uri_protocol` config setting is set to QUERY_STRING. It can also cause unexpected behavior if you’re using the second exception (the question mark) in your `.htaccess` file when hiding `index.php`. If you can, use the encoded query instead as this will always work. NOTE:**Note:** When using GET variables, make sure Dynamic Channel Query Caching is turned off. @@ -54,7 +54,7 @@ Choose a tag which is used to highlight keywords in the search excerpt. Options ### Minimum word length -The ft_min_word_len setting of your MySQL installation determines the minimum length of words indexed by the Full Text index. Setting that value here will trigger an alternative search algorithm when the search term is smaller than this size. Defaults to 4. Do not alter unless you have customised your MySQL installation. +The ft_min_word_len setting of your MySQL installation determines the minimum length of words indexed by the Full Text index. Setting that value here will trigger an alternative search algorithm when the search term is smaller than this size. Defaults to 4. Do not alter unless you have customized your MySQL installation. ### Stop words diff --git a/docs/add-ons/pro-variables/manage.md b/docs/add-ons/pro-variables/manage.md index 772f3bbcc..04a93fc3a 100644 --- a/docs/add-ons/pro-variables/manage.md +++ b/docs/add-ons/pro-variables/manage.md @@ -51,7 +51,7 @@ When using the suffix option, you can use `{suffix}` in both the variable name a ## Variable groups -You can create any number of groups to organise your variables. These groups will appear in the Group drop down for each variable, so you can assign a group to it. On the module home page, variable managers can sort the groups using drag and drop. Variable managers can also edit and delete the groups from here, by clicking on the edit or delete icon next to the group name. You can alter the variable order in a group by editing the group’s properties. +You can create any number of groups to organize your variables. These groups will appear in the Group drop down for each variable, so you can assign a group to it. On the module home page, variable managers can sort the groups using drag and drop. Variable managers can also edit and delete the groups from here, by clicking on the edit or delete icon next to the group name. You can alter the variable order in a group by editing the group’s properties. ### Group label diff --git a/docs/add-ons/pro-variables/type.md b/docs/add-ons/pro-variables/type.md index 1d1eea1ed..5b90c3af4 100644 --- a/docs/add-ons/pro-variables/type.md +++ b/docs/add-ons/pro-variables/type.md @@ -60,7 +60,7 @@ Allows applying modifiers, which, among other, are used to apply [on-the-fly ima ## Grid -Uses the native [Grid field](/fieldtypes/grid.md). All native types are available, _except for Relationships_. To output the variable, use the `{exp:pro_variables:pair}` or `{exp:pro_variables:single}` tag where appropriate. You can use any of Grid’s [parameters](/fieldtypes/grid.md#parameters) and [variables](/fieldtypes/grid.ms#variables) using these tags. Additionally, one more parameter is available: +Uses the native [Grid field](/fieldtypes/grid.md). All native types are available, _except for Relationships and Members_. To output the variable, use the `{exp:pro_variables:pair}` or `{exp:pro_variables:single}` tag where appropriate. You can use any of Grid’s [parameters](/fieldtypes/grid.md#parameters) and [variables](/fieldtypes/grid.ms#variables) using these tags. Additionally, one more parameter is available: ### Parameters diff --git a/docs/add-ons/rte.md b/docs/add-ons/rte.md index 7300af469..dd010a1a7 100755 --- a/docs/add-ons/rte.md +++ b/docs/add-ons/rte.md @@ -11,7 +11,9 @@ [TOC] -ExpressionEngine's built-in Rich Text Editor (RTE) is a fieldtype that can be used for entry editing in the Control Panel as well as frontend Channel Forms. It is offering [CKEditor 5](https://ckeditor.com/ckeditor-5/) and [Redactor](https://imperavi.com/redactor/) as editing engine. +ExpressionEngine's built-in Rich Text Editor (RTE) is a fieldtype that can be used for entry editing in the Control Panel as well as frontend Channel Forms. It is offering [CKEditor 5](https://ckeditor.com/ckeditor-5/) and [RedactorX](https://imperavi.com/redactorx/) as editing engine. + +Additionally, [Redactor 3](https://imperavi.com/redactor/) is available as a legacy option, but it is not recommended for new projects. NOTE: **Note:** If you're looking for how to use RTE fields in your channel entries loops, you should look at [the RTE field variable usage documentation](fieldtypes/rte.md) in the channel fields documentation. @@ -24,14 +26,14 @@ Tool Sets are essentially pre-created configurations that can be used by particu Initially RTE installs 4 tool sets: - **CKEditor Basic:** is based on CKEditor and has buttons for bold, italic, underline, link, and ordered/unordered lists - **CKEditor Full:** offers full set of CKEditor features -- **Redactor Basic:** is based on Redactor and has buttons for bold, italic, underline, link, and ordered/unordered lists -- **Redactor Full:** offers full set of Redactor features +- **RedactorX Basic:** is based on RedactorX and has buttons for bold, italic, underline, link, and ordered/unordered lists +- **RedactorX Full:** offers full set of RedactorX features ### Creating a Tool Set - Click the **Create New** button and the tool set creation form will appear. - Enter a tool set name. -- Select tool set type (CKEditor or Redactor) +- Select tool set type (CKEditor, RedactorX or Redactor) - Select the toolbar buttons and plugins you wish to have in your new tool set (or use the [Advanced Configuration option](#advanced-configuration)). - Click **Save Tool Set** to save your changes. @@ -49,7 +51,7 @@ Initially RTE installs 4 tool sets: #### Editor Type -Rich Text Editor comes with [CKEditor](https://ckeditor.com/) v5 and [Redactor](https://imperavi.com/redactor/) v3 support. Both are great, pick the one that fits your needs best. +Rich Text Editor comes with [CKEditor](https://ckeditor.com/) v5 and [RedactorX](https://imperavi.com/redactorx/). Both are great, pick the one that fits your needs best. [Redactor 3](https://imperavi.com/redactor/) has been deprecated, but is also available. #### Upload Directory @@ -59,43 +61,15 @@ The file management features in RTE field can be allowed to access all upload di Choose between "Left to right" and "Right to left" -#### Tool Set Buttons - -The following are the buttons that can be enabled in tool set to manipulate the data within an RTE field. - - +#### Customize the Toolbar + +![RTE buttons](_images/rte-buttons.png) + +The exact set of buttons that are available is specific to the editor type selected. CKEditor and Redactor have a single toolbar, while RedactorX has multiple toolbars, each configured separately. + +The buttons / plugins that are enabled are displayed in the order they will appear in the toolbar. You can drag and drop the buttons to change their order. + +The disabled buttons / plugins are displayed in grey. #### Custom Stylesheet CSS template with styles to be applied to fields using this tool set. All styles will be automatically prefixed with toolset class, which means that the template should hold rather generic styles for the elements. @@ -106,7 +80,7 @@ The minimal height for the field in pixels #### Maximal height -The maximum height for the field in pixels (Redactor only). +The maximum height for the field in pixels (RedactorX / Redactor only). #### Limit characters @@ -126,7 +100,7 @@ WARN: **Advanced users only.** Please be careful with using this feature and che Initially the field is loaded with the saved configuration of tool set being edited. -Consult [Redactor Docs](https://imperavi.com/redactor/docs/settings/) or [CKEDitor Docs](https://ckeditor.com/docs/ckeditor5/latest/installation/getting-started/configuration.html) for the list of properties. Note that not all features are supported by the ExpressionEngine implementation. +Consult [RedactorX Docs](https://imperavi.com/redactorx/docs/settings/), [Redactor Docs](https://imperavi.com/redactor/docs/settings/) or [CKEDitor Docs](https://ckeditor.com/docs/ckeditor5/latest/installation/getting-started/configuration.html) for the list of properties. Note that not all features are supported by the ExpressionEngine implementation. #### Extra JavaScript JavaScript template to be included with fields using this tool set. Typically used to include extra plugins when using advanced configuration with Redactor. @@ -148,14 +122,15 @@ To delete a tool set, check the tool set's checkbox in the tool set table listin - **Default RTE tool set** - select the tool set that will be selected by default when creating a field. - **File Browser** - select file browser that will be used when browsing for images and files from RTE fields. ExpressionEngine's FilePicker is used by default, third-party add-ons can provide their own filepickers +- **Use custom CKEditor build** - Allows using custom CKEditor build with extra plugins. If enabled, RTE instances running CKEditor will be built using the script in `themes/user/rte/javascript/` folder. NOTE: **Note:** If using the [Multiple Site Manager](msm/overview.md), this preference is per-site. ## Custom plugins -### Redactor +### RedactorX -When using Redactor, the javascript for the plugin can be placed in the template, which then needs to be selected in "Extra JavaScript" field for the tool set. +When using RedactorX or Redactor, the javascript for the plugin can be placed in the template, which then needs to be selected in "Extra JavaScript" field for the tool set. Then enable extended configuration, add the plugin name to list of plugins and provide plugin config if necessary. If the plugin needs extra styling, it can be placed in CSS Templates selected in "Custom Stylesheet" field for the tool set. If the CSS is targeting buttons, the selectors need to be prefixed with `.redactor-toolbar`. @@ -170,7 +145,9 @@ NOTE: **Warning** Doing this requires advanced development skills. In order to create custom CKEditor build: - Clone [GitHub repo](https://github.com/ExpressionEngine/ExpressionEngine/) - Install NPM packages by running `npm install` - - Follow the installation instructions for the plugin itself - - Make your changes to `js-src\ckeditor5-build-classic\src\ckeditor.js` and other files as necessary. + - Follow the installation instructions for the extra CKEditor plugins that you need + - Make your changes to `js-src/ckeditor5-build-classic/src/ckeditor.js` and other files as necessary. - Run the command `npm run build:ckeditor` - - Copy the files from `themes/ee/asset/javascript/src/fields/rte/ckeditor` to same folder on your EE installation + - Copy the files from `themes/ee/asset/javascript/src/fields/rte/ckeditor` to `themes/user/rte/javascript/` folder on your EE installation + +TIP: Buttons provided by extra plugins might be not availble with visual toolbar builder. You will need to use Advanced Configuration JSON file to add those. \ No newline at end of file diff --git a/docs/add-ons/search/advanced.md b/docs/add-ons/search/advanced.md index 652ee127d..76207ca6d 100755 --- a/docs/add-ons/search/advanced.md +++ b/docs/add-ons/search/advanced.md @@ -143,6 +143,8 @@ The search results are displayed on the page you specify as the [result_page=](# [TOC=3] +{{embed:_tips/form-attributes.md}} + ### `category=` category="1" diff --git a/docs/add-ons/search/simple.md b/docs/add-ons/search/simple.md index fc79b8712..664183b6d 100755 --- a/docs/add-ons/search/simple.md +++ b/docs/add-ons/search/simple.md @@ -73,6 +73,8 @@ Besides specifying whether future entries are included in the search using the [ ## Parameters +{{embed:_tips/form-attributes.md}} + ### `name=` name="search_form" diff --git a/docs/add-ons/spam.md b/docs/add-ons/spam.md index 9596d156f..53d8af3c7 100755 --- a/docs/add-ons/spam.md +++ b/docs/add-ons/spam.md @@ -25,7 +25,7 @@ The Spam Module has three important configuration settings: ### Sensitivity -The Spam Module works by calculating the probability that a piece of content is spam based on all the examples it's seen before. The sensitivity is the cutoff for what we consider spam. This defaults to 70 which means there has to be at least a 70% probability something is spam for it to get flagged. If this is higher you will have fewere false positives but more spam will slip through. +The Spam Module works by calculating the probability that a piece of content is spam based on all the examples it's seen before. The sensitivity is the cutoff for what we consider spam. This defaults to 70 which means there has to be at least a 70% probability something is spam for it to get flagged. If this is higher you will have fewer false positives but more spam will slip through. ### Word Limit diff --git a/docs/advanced-usage/front-end/dock.md b/docs/advanced-usage/front-end/dock.md index f681188dd..97d108ee7 100644 --- a/docs/advanced-usage/front-end/dock.md +++ b/docs/advanced-usage/front-end/dock.md @@ -12,7 +12,7 @@ [TOC] ## Overview -The Dock is a central component of ExpressionEngine's front-end functionality. +The Dock is a central component of ExpressionEngine's front-end functionality. ![dock overview](_images/ee-pro-dock.png) @@ -47,7 +47,7 @@ The Control Panel button on the Dock will open the site's Control Panel in a new Prolets are add-on components that reveal some of add-on's functionality for the Control Panel to the front-end, making it possible to edit data directly on the page where it belongs. ### Built-in Prolets -ExpressionEngine is shipped with the Entries and Publish prolets. +ExpressionEngine is shipped with the Entries and Publish prolets. Clicking on the Entries prolet opens a prolet window with all entries currently listed. Allowing you to quickly find and edit other entries in your site. @@ -61,6 +61,6 @@ Developers may create third-party prolets that can be installed with add-ons. Re ![dock prolets](_images/ee-pro-dock-prolets.png) ## Disabling -The Dock can be disabled by either the setting in the [Control Panel](control-panel/settings/front-end-editing.md#general-settings) or [config override](general/system-configuration-overrides.md#enable_dock). +The Dock can be disabled by either the setting in the [Control Panel](control-panel/settings/front-end-editing.md#enable-dock) or [config override](general/system-configuration-overrides.md#enable_dock). -WARN **Warning**: If the Dock is disabled, all of ExpressionEngine's [Front-End Content Management](advanced-usage/front-end/overview.md) is turned off for the front-end. \ No newline at end of file +WARN **Warning**: If the Dock is disabled, all of ExpressionEngine's [Front-End Content Management](advanced-usage/front-end/overview.md) is turned off for the front-end. \ No newline at end of file diff --git a/docs/advanced-usage/front-end/frontend.md b/docs/advanced-usage/front-end/frontend.md index c791e2b13..a57fc85f8 100644 --- a/docs/advanced-usage/front-end/frontend.md +++ b/docs/advanced-usage/front-end/frontend.md @@ -58,7 +58,7 @@ This special conditional allows you to display content if front-end editing is e ## Enable/Disable The Front Edit Link There are several ways to disable front-end editing links: - - Globally with [configuration overrides](/general/system-configuration-overrides.html#enable_frontedit_links) or in [General Settings](/control-panel/settings/front-end-editing.md#enable-automatic-front-end-editing-links) + - Globally with [configuration overrides](/general/system-configuration-overrides.md#enable_frontedit_links) or in [General Settings](/control-panel/settings/front-end-editing.md#enable-automatic-front-end-editing-links) - Per field in the [field settings](control-panel/field-manager/field-manager-settings.md) - Via the Dock on the front-end by toggling Edit Mode on/off. - In the template by using [ExpressionEngine template comments](#expressionengine-comment), [HTML comments](#html-comment), or [field parameter](#field-tag-parameter) diff --git a/docs/channels/channel-form/overview.md b/docs/channels/channel-form/overview.md index 8e7826f29..4a866b93d 100755 --- a/docs/channels/channel-form/overview.md +++ b/docs/channels/channel-form/overview.md @@ -61,6 +61,8 @@ By default, validation errors will be displayed using the User Message Template. [TOC=3 hide] +{{embed:_tips/form-attributes.md}} + The Following parameters are available for the `{exp:channel:form}`: ### `allow_comments=` diff --git a/docs/channels/channel-form/status.md b/docs/channels/channel-form/status.md index e0b3b91ac..3978df4aa 100644 --- a/docs/channels/channel-form/status.md +++ b/docs/channels/channel-form/status.md @@ -28,6 +28,6 @@ Or use the alternative syntax: {/statuses} -To manually set an entry's status upon sutmitting the Channel Form, you can use a Hidden field: +To manually set an entry's status upon submitting the Channel Form, you can use a Hidden field: diff --git a/docs/channels/entries.md b/docs/channels/entries.md index 13cade934..55db4c3bd 100755 --- a/docs/channels/entries.md +++ b/docs/channels/entries.md @@ -118,7 +118,7 @@ And, you can use an inclusive stack to only get entries with _all_ of the catego category="3&7&8" -Or you can negate the inclusive stack and get entries that do not of _all_ of those categories +Or you can negate the inclusive stack and get entries that do not match _all_ of those categories category="not 3&5" @@ -274,7 +274,7 @@ When used in an RSS/Atom feed, this parameter allows ExpressionEngine to dynamic You can hard code the channel tag to show a specific channel entry. You may also specify multiple entries by separating them with the pipe character: entry_id="13|42|147" - + Or use "not" to exclude entries:: entry_id="not 45|534|807" @@ -309,13 +309,15 @@ NOTE: **Note:** Using this parameter will automatically constrain the entries ta ### `group_id=` +NOTE: We recommend using [primary_role_id=](#primary_role_id) parameter instead, which works the same but more clearly conveys that the filtering is happening on primary role ID. + group_id="4" You can decide from which Member Role (by specifying the role ID) you wish entries to be shown. If you choose "4", then only entries created by members of the Primary Role with the ID of 4 will be shown. You can choose multiple Roles using a pipe: group_id="2|3|4" -Or exclude groups using "not" +Or exclude role using "not" group_id="not 2|3|4" @@ -422,7 +424,7 @@ This parameter is for use with entry [pagination](templates/pagination.md) and d If no parameter is specified, the navigation block will default to the "bottom" behavior. -If the pagination tag pair is not included, the entries returned will not respond to a page indicator in the URL. In othat case you would need to set the parameter to _hidden_ to allow the entries to reflect the pagination in the URL. +If the pagination tag pair is not included, the entries returned will not respond to a page indicator in the URL. In that case you would need to set the parameter to _hidden_ to allow the entries to reflect the pagination in the URL. ### `paginate_base=` @@ -436,6 +438,18 @@ This tells ExpressionEngine to override the normal [pagination](templates/pagina This tells ExpressionEngine to function in "pagination" mode for your channel entry fields so that you can automatically have an entry span multiple pages. See the [Spanning a Channel Entry Across Multiple Pages](channels/entry-spanning.md) page. +### `primary_role_id=` + + primary_role_id="4" + +You can decide from which Member Role (by specifying the role ID) you wish entries to be shown. If you choose "4", then only entries created by members of the Primary Role with the ID of 4 will be shown. You can choose multiple Roles using a pipe: + + primary_role_id="2|3|4" + +Or exclude roles using "not" + + primary_role_id="not 2|3|4" + ### `related_categories_mode=` related_categories_mode="no" related_categories_mode="yes" diff --git a/docs/channels/entry-spanning.md b/docs/channels/entry-spanning.md index 8f8f4db6f..402350cc4 100755 --- a/docs/channels/entry-spanning.md +++ b/docs/channels/entry-spanning.md @@ -84,7 +84,7 @@ The {multi_field=} variable is the core of the ability to span a channel entry a {multi_field="page1|page2|page3"} -3. When you initially visit your comment page for an entry, where you xhave the {multi_field} tag in your Template, you will see the content of your "page1" field, just as if you had used the regular {page1} variable. +3. When you initially visit your comment page for an entry, where you have the {multi_field} tag in your Template, you will see the content of your "page1" field, just as if you had used the regular {page1} variable. 4. If your entry has content in the "page2" field then you will see a "next page" link. 5. When you click that link, you'll see your entry again, but instead of {page1} being displayed, in its place would be {page2}. 6. This would continue with as many variables/pages as needed. diff --git a/docs/cli/built-in-commands/make-addon.md b/docs/cli/built-in-commands/make-addon.md new file mode 100644 index 000000000..e18cb1ef0 --- /dev/null +++ b/docs/cli/built-in-commands/make-addon.md @@ -0,0 +1,46 @@ +# `make:addon` + +Generates required add-on files in the `system/user/addons` directory. + +TIP: Read the [Add-on Development Overview](development/addon-development-overview.md) to learn more about creating an add-on. + +## Options list: + +The first (unnamed) parameter is the add-on name. + +Other options are: +``` + --version= + -v + Version of the add-on + + --description= + -d + Description of the add-on + + --author= + -a + Author of the add-on + + --author-url= + -u + Author url of the add-on +``` +## Examples: + +### Interactive example +``` + $ php system/ee/eecli.php make:addon + Let's build your add-on! + What is the name of your add-on? Amazing Add-On + Add-on description? [Amazing Add-on description] This add-on does amazing things! + Add-on version? [1.0.0]1.0.0 + Add-on author? ExpressionEngine Developer + Add-on author URL? www.expressionengine.com + Let's build! + Your add-on has been created successfully! +``` + +### One-line example + +`php ../../system/ee/eecli.php make:addon "My Example Addon" -v 0.1.0 -d "Some good description" -a "ExpressionEngine" -u https://expressionengine.com` \ No newline at end of file diff --git a/docs/cli/built-in-commands/sync-conditional-fields.md b/docs/cli/built-in-commands/sync-conditional-fields.md index acec810f3..cf1edc369 100644 --- a/docs/cli/built-in-commands/sync-conditional-fields.md +++ b/docs/cli/built-in-commands/sync-conditional-fields.md @@ -1,6 +1,6 @@ # sync:conditional-fields -Sync Conditional Field Logic -- Checks each channel entry to see if its connditional logic is correct. If it is not, it updates the conditional logic and saves the entry. +Sync Conditional Field Logic -- Checks each channel entry to see if its conditional logic is correct. If it is not, it updates the conditional logic and saves the entry. ## Options list: diff --git a/docs/cli/built-in-commands/sync-reindex.md b/docs/cli/built-in-commands/sync-reindex.md new file mode 100644 index 000000000..2ba67fa25 --- /dev/null +++ b/docs/cli/built-in-commands/sync-reindex.md @@ -0,0 +1,22 @@ +# `sync:reindex` + +The searchable content in your site may become stale after changing properties of some fields. Running the `sync:reindex` command will ensure fresh data is used by complex fields in the Entry Manager and search contexts. + +## Options list: + +``` + --site_id= + -s + Site ID. Skip this parameter to re-index content on all sites +``` + +## Examples: + +### Re-index content for all sites + +`php eecli.php sync:reindex` + +### Re-index content for Site ID 1 only + +`php eecli.php sync:reindex --site_id=1` +`php eecli.php sync:reindex -s 1` \ No newline at end of file diff --git a/docs/cli/built-in-commands/sync-upload-directory.md b/docs/cli/built-in-commands/sync-upload-directory.md new file mode 100644 index 000000000..9649a3c3e --- /dev/null +++ b/docs/cli/built-in-commands/sync-upload-directory.md @@ -0,0 +1,19 @@ +# `sync:upload-directory` + +This command synchronizes the file records in the database with the files stored in a given upload directory. This functionality is also available through the [File Manager](control-panel/file-manager/synchronizing.md). + +## Options list: + +``` + --upload-id= + -u + Upload Directory ID. If not provided, list of Upload Directories with corresponding IDs will be shown to choose from + + --manipulations= + -m + Image manipulations to regenerate. Comma separated list of manipulation IDs. Use 'all' to regenerate all manipulations. If not provided, a list of available manipulations with corresponding IDs will be shown to choose from +``` + +## Example: + +`php eecli.php sync:upload-directory --upload-id=6 --manipulations=all` \ No newline at end of file diff --git a/docs/cli/intro.md b/docs/cli/intro.md index 0360580a1..0634c2ae4 100644 --- a/docs/cli/intro.md +++ b/docs/cli/intro.md @@ -2,7 +2,7 @@ The Command Line Interface (CLI) allows a user to run system and user-generated commands in the terminal. The CLI has access to all of the ExpressionEngine resources, and can be used to update the system, clear caches, and much more. -By default the CLI is located `system/ee/eecli.php` . +By default the CLI is located `system/ee/eecli.php` . ![EE CLI](_images/6-1_cli.png) @@ -12,7 +12,7 @@ By default the CLI is located `system/ee/eecli.php` . - [List](cli/built-in-commands/list.md) - Make - [make:action - Creates a new action for an add-on](cli/built-in-commands/make-action.md) - - [make:addon - Creates a new add-on](development/addon-development-overview.md) + - [make:addon - Creates a new add-on](cli/built-in-commands/make-addon.md) - [make:command - Creates a new CLI command for an add-on](cli/built-in-commands/make-command.md) - [make:extension-hook - Implements an EE extension hook in an add-on](cli/built-in-commands/make-extension-hook.md) - [make:migration - Creates a new migration](cli/built-in-commands/make-migration.md) @@ -29,6 +29,8 @@ By default the CLI is located `system/ee/eecli.php` . - [migrate:rollback - Rolls back most recent migration group](cli/built-in-commands/migrate.md) - Sync - [sync:conditional-fields - Sync channel entry conditional logic](cli/built-in-commands/sync-conditional-fields.md) + - [sync:reindex - Sync content used in search indexes](cli/built-in-commands/sync-reindex.md) + - [sync:upload-directory - Sync files in an upload directory](cli/built-in-commands/sync-upload-directory.md) - [Update ExpressionEngine](cli/built-in-commands/update.md) - [Creating a Command](cli/creating-a-command.md) - [Defining Input](cli/defining-input.md) diff --git a/docs/comment/form.md b/docs/comment/form.md index e3c0650df..5fe92dd40 100755 --- a/docs/comment/form.md +++ b/docs/comment/form.md @@ -52,6 +52,8 @@ TIP: **Tip:** Notice the variables in the "value" form fields? These allow us to [TOC=4] +{{embed:_tips/form-attributes.md}} + #### `entry_id=` entry_id="24" diff --git a/docs/config/config-files.md b/docs/config/config-files.md index f2454ca98..0bbc83e6a 100644 --- a/docs/config/config-files.md +++ b/docs/config/config-files.md @@ -29,13 +29,27 @@ The list of the words that are being used to generate [CAPTCHA](security/captcha This file contains an array of foreign characters for transliteration conversion used by the Text helper (example would be generating URL Titles for entries). +#### HTML Form Attributes + +`valid_form_attributes.php` + +A list of HTML attributes that are allowed to be passed via EE template tag parameters to the `form` tag when creating forms with `ee()->functions->form_declaration()`. Additionally, attributes prefixed with `data-` and `aria-` can be used. + #### Allowed Mime Types `mimes.php` These are the mime types that are allowed to be uploaded using the upload class. For security reasons the list is kept as small as possible. If you need to upload types that are not in the list you can add them. -The mime types are grouped by file type. You can add the allowed mime types directly or you can add new file types containing miltiple mimes. +The mime types are grouped by file type. You can add the allowed mime types directly or you can add new file types containing multiple mimes. + +#### Reverse Proxy IP addresses + +`proxy.php` + +If the server is behind a reverse proxy or load balancer the system will need special configuration to discover a user's real IP address. If the IP address passed along by the server matches a value or range specificed in this configuration file the system will look at the request headers to determine the real IP address. + +Please consult with the provider of your reverse proxy or load balancing solutions for the IP addresses or ranges to use. Some providers will let you know the exact IP address of the load balancer, while others will give you a range. Here are the links with information for some common providers: [CloudFlare](https://www.cloudflare.com/ips/), [Google Cloud](https://cloud.google.com/load-balancing/docs/https/#firewall_rules), [AWS Elastic](https://docs.aws.amazon.com/elasticloadbalancing/latest/network/network-load-balancers.html) #### 'Remember me' expiration diff --git a/docs/config/config.md b/docs/config/config.md new file mode 100644 index 000000000..444483ab8 --- /dev/null +++ b/docs/config/config.md @@ -0,0 +1,86 @@ + + +# Main Configuration File + +The main configuration settings are stored in the form of a PHP array in the `system/user/config/config.php` file. + +This file is populated automatically during the installation process and contains the most important settings that are used by ExpressionEngine. + +Settings from this file are loaded every time the system is run. This means that [config overrides](general/system-configuration-overrides.md) set in `config.php` always affect the system’s configuration. + +At a minimum, this configuration file contains the following settings: + +#### `app_version` + +The installation's ExpressionEngine version. This value is set automatically and normally should not be modified. + +However if you need to run an update script again, you can modify this value to a lower version number so the system would "see" the update(s) available. + + $config['app_version'] = '7.4.0'; + +#### `encryption_key` + +This is the secret key used by the [Encrypt service](development/services/encrypt.md) to protect sensitive data in the database. It is set automatically during the installation process. If you need to use your own key please refer to [Troubleshooting guide](troubleshooting/error-messages.md#generating-new-encryption-keys) on how to generate a new one. + + $config['encryption_key'] = '26791dcd5c7cc9e569cc05b16b96235985cc9f03'; + +#### `session_crypt_key` + +Similar to the `encryption_key`, but used to protected session data. + + $config['session_crypt_key'] = 'd9e776dc9a5de0cd83e7c76a76756daa64ff4b8b'; + +#### `database` + +The database connection details are one of the most important settings in the configuration file. The array is required to have an element with a key of `expressionengine`, which in turn needs to be an array with the following keys: + + - `hostname` - The hostname or IP address of your database server + - `database` - The name of the database to connect to + - `username` - The username used to connect to the database + - `password` - The password used to connect to the database + - `dbprefix` - The prefix used for all database tables (default is `exp_`) + - `char_set` - The character set used in communicating with the database (default is `utf8mb4`) + - `dbcollat` - The character collation used in communicating with the database (default is `utf8mb4_unicode_ci`) + - `port` - The port used to connect to the database (default is `3306`) + + ```php + $config['database'] = array( + 'expressionengine' => array( + 'hostname' => 'localhost', + 'database' => 'ee740', + 'username' => 'root', + 'password' => '', + 'dbprefix' => 'exp_', + 'char_set' => 'utf8mb4', + 'dbcollat' => 'utf8mb4_unicode_ci', + 'port' => '' + ), + ); + ``` + +In addition, you can use following keys inside `expressionengine`: + + - `pconnect` - Whether to use persistent connections (default is `true`) + +The following keys can be specified and will be converted to [PDO constants](https://www.php.net/manual/en/ref.pdo-mysql.php#pdo-mysql.constants) when passed to the database driver: + + - `MYSQL_ATTR_LOCAL_INFILE` + - `MYSQL_ATTR_LOCAL_INFILE_DIRECTORY` + - `MYSQL_ATTR_READ_DEFAULT_FILE` + - `MYSQL_ATTR_READ_DEFAULT_GROUP` + - `MYSQL_ATTR_MAX_BUFFER_SIZE` + - `MYSQL_ATTR_INIT_COMMAND` + - `MYSQL_ATTR_COMPRESS` + - `MYSQL_ATTR_SSL_CA` + - `MYSQL_ATTR_SSL_CAPATH` + - `MYSQL_ATTR_SSL_CERT` + - `MYSQL_ATTR_SSL_CIPHER` + - `MYSQL_ATTR_SSL_KEY` + - `MYSQL_ATTR_SSL_VERIFY_SERVER_CERT` diff --git a/docs/control-panel/access.md b/docs/control-panel/access.md index a1ae2d9b9..971336e62 100644 --- a/docs/control-panel/access.md +++ b/docs/control-panel/access.md @@ -14,22 +14,22 @@ Access to the control panel is determined on a per member role level. Super admins automatically have full access to the control panel. For all other member roles, access is specified in the [Member Role Settings](control-panel/member-manager.md). Access settings determine not just the ability to login to the control panel, but which sections and actions can be taken by the member role. The navigation will automatically reflect the access permissions a user has. **Control Panel Access Location** - -By default, the control panel may be accessed via the admin.php file and, if below root, the system/index.php file. As per the post-install security recommendations, the system folder may have been renamed or be inaccessable via browser. The admin.php file may also have been renamed. - + +By default, the control panel may be accessed via the admin.php file and, if below root, the system/index.php file. As per the post-install security recommendations, the system folder may have been renamed or be inaccessible via browser. The admin.php file may also have been renamed. + **Adminstrator Sessions** How long a user stays logged into the control panel is determined by two factors, the session length and the idle check. Any activity such as clicking a link or submitting a form restarts the countdown for both times. If an admin closes the browser or leaves the site and returns before the session expires, they will not need to log back in. If the site sits open in the browser for longer than allowed by the idle check but before the session expires, they will be required to confirm their password before accessing the open browser pages. ***Session Length*** -Session Time to Logout (TTL) refers to how long a user stays logged into the control panel after logging in. By default, after 1 hour of inactivity, administrators will be logged out of the control panel and required to log back in with their username and password. The default TTL length can be overriden by the [cp_session_length](general/system-configuration-overrides.md#cp_session_length) setting. +Session Time to Logout (TTL) refers to how long a user stays logged into the control panel after logging in. By default, after 1 hour of inactivity, administrators will be logged out of the control panel and required to log back in with their username and password. The default TTL length can be overriden by the [cp_session_length](general/system-configuration-overrides.md#cp_session_length) setting. -If control panel sessions are set to use cookies only, the 'Remember me' login option will allow the session cookie to persist for 2 weeks. This may be overriden using the [remember.php configuration file](config/config-files.md#remember_me). +If control panel sessions are set to use cookies only, the 'Remember me' login option will allow the session cookie to persist for 2 weeks. This may be overriden using the [remember.php configuration file](config/config-files.md#remember-me-expiration). ***Adminstrator Idle Check*** -For added security, ExpressionEngine triggers a modal when an administrator is logged into the control panel but idle beyond a set length of time. The modal triggers afer 30 minutes if the control panel is in focus and idle, or 45 minutes if idle and out of focus. Unlike a fresh login, if the user logs back in via the modal before the TTL is exceeded, they remain on the same page(s) with no alteration of unsaved data. The idle check is not a factor if the site is no longer loaded in the browser. +For added security, ExpressionEngine triggers a modal when an administrator is logged into the control panel but idle beyond a set length of time. The modal triggers after 30 minutes if the control panel is in focus and idle, or 45 minutes if idle and out of focus. Unlike a fresh login, if the user logs back in via the modal before the TTL is exceeded, they remain on the same page(s) with no alteration of unsaved data. The idle check is not a factor if the site is no longer loaded in the browser. ![](_images/admin-access-modal.png) @@ -38,7 +38,7 @@ For added security, ExpressionEngine triggers a modal when an administrator is l Sessions are stored in cookies, session ID (URL) or both, see [Security and Privacy Settings](control-panel/settings/security-privacy.md#settings). The control panel and the frontend may have different session types. If the frontend uses cookies only for storage and the control panel uses cookies and sessions, logging into the frontend will not result in being logged into the control panel. However, logging into the control panel will result in being logged into the frontend. Logging into an area that sets a session cookie will apply to any area that requires session cookies only. So if you're logged into the control panel but the website acts like you're a guest? You probably don't have session data stored in a cookie per the control panel session settings. - + diff --git a/docs/control-panel/categories.md b/docs/control-panel/categories.md index f290b35f1..9f7977445 100644 --- a/docs/control-panel/categories.md +++ b/docs/control-panel/categories.md @@ -39,10 +39,14 @@ Extra saving options are also available from the dropdown menu under "Save": - "Save & Close" - redirects to categories list after saving - "Clone to New Category" - saves the changes into a new category. The current category is used as a "template" and remains unchanged. +Note that only members with appropriate permissions are able to perform actions on categories. The permissions are being set per Role globally as well as per each Category Group. + ## Create/Edit Category Groups **Control Panel Location: `Content > Categories > New/Edit Category Group`** +Access to this sections requires "Can edit category groups" permission to be set for the users member Role. + The category group form is broken out into 3 tabs: ### Details tab diff --git a/docs/control-panel/channels.md b/docs/control-panel/channels.md index a7115806f..7c1187aad 100755 --- a/docs/control-panel/channels.md +++ b/docs/control-panel/channels.md @@ -61,6 +61,15 @@ A channel can have any combination of fields and field groups assigned to it. Yo This tab allows you to create and assign category groups to your channel. A channel may have multiple category groups assigned, and groups can be created on the fly on this tab. +![Channel Preferences - Categories settings](_images/cp-channel-categories-tab.png) + +For each category group assigned to a channel, the following per-group settings are available: + +| Setting | Default | Description | +| --------------- | ------- | ------------------------------------------------------------------------------------------- | +| Allow multiple? | Yes | When turned on, multiple categories from the group can be selected for an entry | +| Required? | No | When turned on, selecting at least one category from the group is required to save an entry | + --- ### Statuses tab diff --git a/docs/control-panel/create.md b/docs/control-panel/create.md index ddfbddbf5..ff7c01ba9 100755 --- a/docs/control-panel/create.md +++ b/docs/control-panel/create.md @@ -51,6 +51,9 @@ This can be done in two ways: - assign custom field to a [Field Group](/control-panel/field-manager/field-manager-settings.md#createedit-field-group) which is associated to the Channel - assign field directly to channel by editing [Channel preferences](control-panel/channels.md#fields-tab) +When working with [templates](templates/overview.md) you will be referencing the field by its short name. For convenience the short name can be displayed next to the field's name in the publish form (field short name) and will be copied to the clipboard when clicked. Displaying the short name can be toggled on or off in the [Role](control-panel/member-manager.md) settings. + +Note that some fields can be displayed with just single tags while others would require a tag pair with extra variables. More information can be found in the documentation for the field's specific [field type](fieldtypes/overview.md). ## Date Tab @@ -68,9 +71,13 @@ You may _optionally_ specify a date on which comments for this entry will no lon ## Categories Tab -You may assign your entries to one ore more categories. To select more than one category you will typically hold down the CTRL (or CMD) key while choosing the individual category names. +You may assign one or multiple (depending on [channel preference](control-panel/channels.md#categories-tab)) categories to your entry from the [category groups](control-panel/categories.md) associated with the channel. + +Each associated category group will be rendered as a separate set of checkboxes. If multiple selections are not allowed they will render as a set of radio buttons. Selecting a category from a group can also be set as required for the channel. + +Additionally, a "Manage Categories" toggle is provided which allows the user to add, edit or reorder categories within the group. -Clicking the Edit Categories link will permit you to add, edit, or delete categories that appear in the list. +![Publish Form - Categories](_images/cp-entry-categories-tab.png) ## Options Tab diff --git a/docs/control-panel/file-manager/file-manager.md b/docs/control-panel/file-manager/file-manager.md index d2a7be2b6..1aba085bc 100644 --- a/docs/control-panel/file-manager/file-manager.md +++ b/docs/control-panel/file-manager/file-manager.md @@ -29,11 +29,11 @@ The File Manager is composed of several sections to help easily manage your file ### Sidebar -The sidebar gives you access to creating, viewing, and managing [Upload Directories](control-panel/file-manager/upload-directories.md); [Watermarks](control-panel/file-manager/watermarks.md); and Exporting All Files. +The sidebar gives you access to creating, viewing, and managing [Upload Directories](control-panel/file-manager/upload-directories.md); [Watermarks](control-panel/file-manager/watermarks.md); and Exporting All Files. ![File manager sidebar](_images/cp_file_manager_sidebar.png) -The sidebar can also be collapsed using the arrow icon ( cp collapase arrow ) that is displayed to the side of the sidebar when hovering over the sidebar. +The sidebar can also be collapsed using the arrow icon ( cp collapase arrow ) that is displayed to the side of the sidebar when hovering over the sidebar. ### Filters @@ -45,7 +45,7 @@ Filters allow you to quickly filter the files listed to find exactly what you ne The following selectable filters are available: * Type - Filter by the file type. Available types are Image, Document, Archive, Audio, Video (only file types of currently uploaded files are displayed) -* Category - Filter by categories available to files. +* Category - Filter by categories available to files. * Date Added - Filter by date added. Available options are Custom Date (enter in a specific date), Last 24 Hours, Last 7 Days, Last 30 Days, Last 180 Days, Last 365 Days * Added By - Filter by the member who uploaded files @@ -55,7 +55,7 @@ Files can also be filtered using the keyword search option. ### File Listing -The bulk of the File Manager screen is composed of the file list. +The bulk of the File Manager screen is composed of the file list. ![File Manager Listing](_images/cp_file-manager-listing.png) @@ -75,7 +75,7 @@ The List View also exposes a Utility Action menu which quickly allows for action ![File Manager Utility Action Menu](_images/cp_file_manager_utility_action.png) -The columns displayed in the List View can also be adjusted to display file information relevant to your needs. +The columns displayed in the List View can also be adjusted to display file information relevant to your needs. These columns include: * Title diff --git a/docs/control-panel/file-manager/synchronizing.md b/docs/control-panel/file-manager/synchronizing.md index 5eb7f005f..3ee4ca578 100644 --- a/docs/control-panel/file-manager/synchronizing.md +++ b/docs/control-panel/file-manager/synchronizing.md @@ -22,4 +22,6 @@ When submitted, all allowed file types in the directory will be checked against If an image manipulation is missing, it will be generated automatically. However, if you want to regenerate and replace all given manipulations, you can do so by checking the checkbox next to the manipulation name. -Lastly, any records in the database that do not have a corresponding file in the main directory will be highlighted as not found. \ No newline at end of file +Lastly, any records in the database that do not have a corresponding file in the main directory will be highlighted as not found. + +NOTE: This functionality is also available as a [CLI command](cli/built-in-commands/sync-upload-directory.md) diff --git a/docs/control-panel/file-manager/upload-directories.md b/docs/control-panel/file-manager/upload-directories.md index fe2d968fd..3d18ee93c 100644 --- a/docs/control-panel/file-manager/upload-directories.md +++ b/docs/control-panel/file-manager/upload-directories.md @@ -49,7 +49,7 @@ The directory can be restricted to accept one or several following file types: I By default, only images are allowed. -Only file types that are specified in ExpressionEngine's Mime Type file are allowed to be uploaded. The Mime Type file can be found in [`mimes.php`](config/config-files.md#allowed-mime-types). If you are uploading something uncommon and run into problems, you may need to add the mime type for your file to the allow list. +Only file types that are specified in ExpressionEngine's Mime Type file are allowed to be uploaded. The Mime Type file can be found in [`mimes.php`](config/config-files.md#allowed-mime-types). If you are uploading something uncommon and run into problems, you may need to add the mime type for your file to the allow list. See also [MIME allow list](general/system-configuration-overrides.md#mime_whitelist_additions) and [Mime member exception allow list](general/system-configuration-overrides.md#mime_whitelist_member_exception) for more info. ##### Share Upload Directory on all sites? @@ -86,7 +86,7 @@ Optionally set the maximum allowed height in pixels for uploaded images. Images ##### Constrain or Crop -Specify one or more alternate versions of an image that automatically get created when the original image is uploaded. A manipulation can include a resized version, a [watermark](control-panel/file-manager/file-manager.md#watermarks), or both. You can refer to a particular Image Manipulation in your templates via a File Field's [single variable tag](fieldtypes/file.md#single-variable-usage) or its [variable pair tag](fieldtypes/file.md#url). The resize type will determine whether the image is constrained (resized) or cropped to the specified dimensions. If only height or width is specified, the thumbnails will be created using that as the master dimension. For example, setting the height to 200 and leaving the width blank will result in an image that is no higher than 200 pixels, with the width resized proportionately. Setting both the height and the width to 200 would result in an image that is no higher or wider than 200 pixels. +Specify one or more alternate versions of an image that automatically get created when the original image is uploaded. A manipulation can include a resized version, a [watermark](control-panel/file-manager/watermarks.md), or both. You can refer to a particular Image Manipulation in your templates via a File Field's [single variable tag](fieldtypes/file.md#single-variable-usage) or its [variable pair tag](fieldtypes/file.md#url). The resize type will determine whether the image is constrained (resized) or cropped to the specified dimensions. If only height or width is specified, the thumbnails will be created using that as the master dimension. For example, setting the height to 200 and leaving the width blank will result in an image that is no higher than 200 pixels, with the width resized proportionately. Setting both the height and the width to 200 would result in an image that is no higher or wider than 200 pixels. ##### Allowed member roles diff --git a/docs/control-panel/member-manager.md b/docs/control-panel/member-manager.md index 695fe5cf9..1f563ed24 100755 --- a/docs/control-panel/member-manager.md +++ b/docs/control-panel/member-manager.md @@ -9,19 +9,25 @@ # Member Manager -**Control Panel Location: `Members`** +[TOC=2-3] -This page is used both to search and to browse through active members within your ExpressionEngine installation. Also, you can filter the members by member role and search members. +## Members Listing -This page also allows you to do the following: +**Control Panel Location: `Members`** -[TOC=2-3] +This page is used both to search and to browse through members within your ExpressionEngine installation. ![Member Manager Control Panel Page](_images/cp-members.png) +Filters and search input can be used to narrow down the list of members displayed. + +The set of columns displayed can be customized using the "Columns" dropdown. By default, the following columns are shown: Member ID, Name (which is composed of avatar, username and screen name), Email, Roles, Join Date, Last Visit Date. Also each member row has "Actions" buttons that contains links to some common actions and a checkbox that allows performing bulk actions on selected members. When "Pending" is selected in the "Role" filter, the bulk action options are "Approve" and "Decline", otherwise "Remove" is the only option. + +All roles assigned to a member are shown in the Roles column. When multiple roles are assigned, the primary role will have an indicator. If the member is pending the column does not say "Pending" but instead shows the role to which the member will be assigned once approved (with pending indicator) and a button to approve. + ## Member Roles -**Control Panel Location: `Members > Member Roles`** +**Control Panel Location: `Members > Roles`** The _Member Roles_ area of the Control Panel permits you to manage your Member Roles. The member roles can be sorted by ID, Role Name, and Status. @@ -31,7 +37,7 @@ You can assign multiple roles to a member. ### Create/Edit All Member Roles -**Control Panel Location: `Members > Member Roles > Create/Edit`** +**Control Panel Location: `Members > Roles > Create/Edit`** This sections allows you to set the various permissions and settings for the selected Member Role. @@ -44,23 +50,47 @@ ExpressionEngine comes with 5 built-in Roles: These roles should never be deleted. -If you need a custom set of permissions for the role, we suggest creating a new role for each case. You can do that by clicking "New Role" button, or you can create a new role based on an exsting one by picking "Clone to New Role" from the role's "Save" dropdown. +If you need a custom set of permissions for the role, we suggest creating a new role for each case. You can do that by clicking "New Role" button, or you can create a new role based on an existing one by picking "Clone to New Role" from the role's "Save" dropdown. Edit the role by clicking its name in the list. ## Custom Member Fields -**Control Panel Location: `Members > Member Fields`** +**Control Panel Location: `Settings > Members > Member Fields`** + +The link to this section is also found on top of the Member Listing page. The _Member Fields_ feature permits you to add fields to the member registration form and/or member profile and My Account areas. ### Create/Edit -**Control Panel Location: `Members > Member Fields > New/Edit`** +**Control Panel Location: `Settings > Members > Member Fields > New/Edit`** This section allows you to create or edit Member Fields. -The following fields are available: +The following field types are compatible and can be used for custom member fields: + +- Checkboxes +- Color Picker +- Date +- Duration +- Email Address +- File +- Number Input +- Multi Select +- Radio Buttons +- Range Slider +- Rich Text Editor +- Select Dropdown +- Selectable Buttons +- Text Input +- Textarea +- URL +- Value Slider + +Additionally, third-party field types that specify support for the `MemberField` model can be selected. + +The following fields are available when creating a custom field: - **Type** -- You may choose what type of field this is. There are three choices: 1. **Text Input**: This is a single input line for text. It is the type of field you might use for a title, name, or other short information. 2. **Textarea**: This is a standard text entry box with multiple lines. This is what you would use for larger amount of text. 3. **Drop-down List**: This creates a standard HTML ` +### Custom field + +The custom profile fields can be displayed individually by addressing them using the field's short name prefixed with `field:`: + + {field:birthday} + ## Custom Profile Field Variable Pair -All custom fields are output inside the ``{custom_profile_fields}`` varialble tag pair. +All custom fields are output inside the ``{custom_profile_fields}`` variable tag pair. {custom_profile_fields}

@@ -110,20 +142,53 @@ All custom fields are output inside the ``{custom_profile_fields}`` varialble ta

{/custom_profile_fields} -## Custom Profile Field Variables +### Custom Profile Field Variables + +These variables are available inside `{custom_profile_fields}` tag pair. + +#### `{lang:profile_field}` +#### `{field_label}` + +Outputs the custom field's label. -#### {lang:profile_field} +#### `{field_id}` -Outputs the custom field's name. +Field ID -#### {lang:profile_field_description} +#### `{field_name}` + +The field's short name + +#### `{lang:profile_field_description}` +#### `{field_instructions}` Outputs the field's description, if any. -#### {form:custom_profile_field} +#### `{form:custom_profile_field}` +#### `{display_field}` Shows the fully parsed custom member form field. +#### `{field_data}` + +Saved field data for the member + +#### `{if field_required}` + +Checks whether the field is set as required + +#### `{text_direction}` + +Text direction set for field (`rtl` or `ltr`) + +#### `{maxlength}` + +Maximum length set for text fields + +#### `{field_type}` + +Short name of the fieldtype used for field + ## Example {exp:member:edit_profile diff --git a/docs/member/login.md b/docs/member/login.md index ce33d2cd9..6d99cde80 100644 --- a/docs/member/login.md +++ b/docs/member/login.md @@ -28,6 +28,8 @@ Output a login form. ## Parameters +{{embed:_tips/form-attributes.md}} + ### `action=` action="https://example.com/" @@ -88,9 +90,11 @@ Member password. This is a **required** field: ### Username -Member username. This is a **required** field: +Member username. This is a **required** field. + +NOTE: Starting in ExpressionEngine 7.4 members are able to use either their email address or their username to log in. - + diff --git a/docs/member/logout.md b/docs/member/logout.md index 1b9b8b203..af8ce4dea 100644 --- a/docs/member/logout.md +++ b/docs/member/logout.md @@ -33,6 +33,8 @@ Output a log out form. ## Parameters +{{embed:_tips/form-attributes.md}} + ### `action=` action="https://example.com/" @@ -65,5 +67,3 @@ This parameter allows you to define where the user will be returned after succes 1. Use the standard Template_Group/Template syntax to specify where to return the user. For instance, if you want the user to be returned to the "local" Template in the "news" Template Group, you would use: return="news/local" 2. Use a full URL. For example: return="" - - diff --git a/docs/member/member-roles-tags.md b/docs/member/member-roles-tags.md index 7a906c057..81f3cd8f5 100644 --- a/docs/member/member-roles-tags.md +++ b/docs/member/member-roles-tags.md @@ -13,7 +13,7 @@ ## `{exp:member:roles}` -The `{exp:member:roles}` tag allows you to display all groups that the member belongs to. +The `{exp:member:roles}` tag allows you to display all roles that the member belongs to. {exp:member:roles}

{name} ({role_id}{if is_primary_role}, Primary Role{/if})

@@ -25,7 +25,13 @@ The `{exp:member:roles}` tag allows you to display all groups that the member be member_id="147" -Specifies a particular member's information to display. By default (if you do not include the member_id parameter, the tag will simply display information pertaining to the currently logged-in user. +Specifies a particular member's information to display. By default (if you do not include the `member_id`` parameter), the tag will simply display information pertaining to the currently logged-in user. + +### `username=` + + username="admin" + +Username of member to display ### Variables @@ -72,8 +78,39 @@ The `{exp:member:has_role}` tag allows you to display or hide its content depend **Required** ID or role to check against. The content of the tag will be displayed if the user belongs to this role, otherwise `{if no_results}...{/if}` contents will be displayed. +It is possible to pass multiple roles by separating the ids with a `|` character. In this case, the content will be shown if the member belongs to at least one of the roles. + + role_id="6|12" + + #### `member_id=` member_id="147" Specifies a particular member's information to display. By default (if you do not include the member_id parameter, the tag will simply display information pertaining to the currently logged-in user. + +## `{exp:member:role_groups}` + +The `{exp:member:role_groups}` tag allows you to display the role groups a member belongs to. Please note, while every member is in a Role not every member is in a role group. + + {exp:member:role_groups} +

{role_group_name} (#{role_group_id})

+ {/exp:member:role_groups} + +### Parameters + +#### `member_id=` + + member_id="147" + +Specifies a particular member's information to display. By default (if you do not include the `member_id`` parameter), the tag will display information pertaining to the currently logged-in user. + +### Variables + +#### `{role_group_id}` + +Role Group ID + +#### `{role_group_name}` + +Role Group name diff --git a/docs/member/memberlist.md b/docs/member/memberlist.md index 3a43a9f61..b80ce2140 100644 --- a/docs/member/memberlist.md +++ b/docs/member/memberlist.md @@ -17,17 +17,21 @@ Outputs a searchable list of members, including form filters to sort and limit t ## Parameters +{{embed:_tips/form-attributes.md}} + ### `role_id=` role_id="5" Restrict the output to members that belong to certain [role](control-panel/member-manager.md#member-roles). +NOTE: This parameter replaces `group_id` which is functionally identical and currently still supported. + ### `orderby=` orderby="screen_name" -The "orderby" parameter sets the display order of members. The possible options for this parameter are the built-in member fields - including, but not limited to: +The "orderby" parameter sets the display order of members. The possible options for this parameter are the built-in member fields - including, but not limited to: - `member_id` - `role_id` - `screen_name` @@ -80,6 +84,12 @@ This parameter allows you to specify the id attribute for the search <form> This parameter allows you to specify a name attribute for the search <form> tag. +### `backspace=` + + backspace="3" + +The `backspace=` parameter will remove the specified number of characters, including spaces and line breaks, from the last iteration of the tag pair. + ## Form Variables ### `{form_declaration}` diff --git a/docs/member/registration.md b/docs/member/registration.md index a03160871..4ce434879 100644 --- a/docs/member/registration.md +++ b/docs/member/registration.md @@ -19,6 +19,8 @@ NOTE: **Important:** In order for site visitors to be allowed to register for ac ## Parameters +{{embed:_tips/form-attributes.md}} + ### `return=` return="member/registration/success" @@ -26,10 +28,10 @@ NOTE: **Important:** In order for site visitors to be allowed to register for ac ### `form_class=` form_class="register" - + ### `primary_role=` - primary_role="7" + primary_role="7" This parameter allows you to specify the primary role to assign the new member, overriding the default member setting. @@ -38,6 +40,34 @@ This parameter allows you to specify the primary role to assign the new member, This parameter allows you to use inline errors in your registration form. The errors can be displayed using the `{error:field_name}` tag where `field_name` would need to be replaced with the name of the field that has an error, as used to compose the form. +### `include_assets=` + + include_assets="yes" + +Adds the Javascript and CSS that is required by custom member fields to your form. By default, these are **not** included + +### `datepicker=` + + datepicker="no" + +Adds the datepicker to your date fields. Defaults to "yes". + +NOTE: **Note:** If you are manually constructing a date field, in order to apply the date picker you must include `rel="date-picker"`. + +### `include_css=` + + include_css="no" + +Allows you to manage the inclusion of required CSS independently from the `include_assets` parameter. Defaults to "yes". + +### `include_jquery=` + + include_jquery="no" + +Includes jQuery automatically. Defaults to "yes". + +NOTE: **Note:** If you are using your own copy of jQuery you will need to load it **before** the form. + ## Form Inputs NOTE: Be sure to include the required JavaScript and CSS to use the native [Password Validation](member/password-validation.md). @@ -92,6 +122,44 @@ Please note you need to address those by ID and not name, e.g. `m_field_id_8` +And easier way to display the field's input is to use the special tag: + + + {field:work_title} + +Custom fields can also be output inside the ``{custom_fields}`` variable tag pair. + + {custom_fields} +

+
+ {lang:profile_field_description}
+ + {form:custom_profile_field} + +

+ {/custom_fields} + +### `{custom_fields}` Pair Variables + +#### `{lang:profile_field}` +#### `{field_name}` + +Outputs the custom field's name. + +#### `{lang:profile_field_description}` +#### `{field_description}` + +Outputs the field's description, if any. + +#### `{form:custom_profile_field}` +#### `{field}` + +Shows the fully parsed custom member form field. + +#### `{if required}` + +Indicates whether the field is marked as required + ## Variables ### `{accept_terms}` @@ -135,6 +203,9 @@ This will show errors with the submitted password as well as password confirm. {if error:username}{error:username}{/if} +### `{field:field_name}` + +Displays the custom field input form for the given field (substitute `field_name` with the actual field name). Note that the field must be set as "visible on registration" in order to show up. ## Example diff --git a/docs/msm/overview.md b/docs/msm/overview.md index ccb009308..60e92fbe3 100755 --- a/docs/msm/overview.md +++ b/docs/msm/overview.md @@ -25,7 +25,7 @@ That's not a perfect analogy but it conveys the scope of what the Multiple Site The site manager must be enabled in Control Panel setting: `Settings > General Settings > Enable Site Manager?` in order to create sites. -Once MSM is enabled a new site can be created or editied by clicking the icon next to the site name in the top of the Control Panel sidebar and either selecting the site to edit or adding a new site. +Once MSM is enabled a new site can be created or edited by clicking the icon next to the site name in the top of the Control Panel sidebar and either selecting the site to edit or adding a new site. ![add new site](/_images/msm_new_site.png) @@ -88,7 +88,7 @@ Open domain2's new `admin.php` file (this is the file that allows Control Panel $assign_to_config['site_name'] = 'domain2_short_name'; $assign_to_config['cp_url'] = 'https://domain2.com/admin.php'; -TIP: **Tip:** In some multi-site situations, you may not want to allow Control Panel access from anyhere other than domain1. The `admin.php` file can be removed in those cases. +TIP: **Tip:** In some multi-site situations, you may not want to allow Control Panel access from anywhere other than domain1. The `admin.php` file can be removed in those cases. ### Step 4 @@ -119,4 +119,4 @@ However, cookies for one domain cannot be set from a different domain. If your s $config['multi_login_sites'] = "https://www.example.com/index.php|https://www.sitetwo.com/index.php"; -Now when a user logs into the frontend of one of the sites, the login routine will invisibly loop through each URL in the configuration, redirecting to that site, setting the appropriate cookies, and then cycling through to the next site. Once the user has been logged into all of the sites, they'll end up back on the starting URL. The login redirects will be virtually unnoticable. +Now when a user logs into the frontend of one of the sites, the login routine will invisibly loop through each URL in the configuration, redirecting to that site, setting the appropriate cookies, and then cycling through to the next site. Once the user has been logged into all of the sites, they'll end up back on the starting URL. The login redirects will be virtually unnoticeable. diff --git a/docs/optimization/caching.md b/docs/optimization/caching.md index 8e0f27d91..eebc48e21 100755 --- a/docs/optimization/caching.md +++ b/docs/optimization/caching.md @@ -122,7 +122,7 @@ Caches are cleared automatically when certain actions occur: - Updating an Email Notification (clears all caches) - Updating a Theme Template (clears all caches) - Running a Template Sync (clears all caches) -- Submission, updating or deleting of an Entry through API (clears if needed either all or sql cache). See [Clear cache for new ntries?](control-panel/settings/content-design.md#clear-cache-for-new-entries). +- Submission, updating or deleting of an Entry through API (clears if needed either all or sql cache). See [Clear cache for new entries?](control-panel/settings/content-design.md#clear-cache-for-new-entries). - Comment Module: - Creating, updating or deleting a Comment (clears all caches) - Change Comment Status (clears all caches) diff --git a/docs/optimization/handling-extreme-traffic.md b/docs/optimization/handling-extreme-traffic.md index 076919090..f2ff5c937 100755 --- a/docs/optimization/handling-extreme-traffic.md +++ b/docs/optimization/handling-extreme-traffic.md @@ -54,3 +54,9 @@ These can be disabled in your Control Panel [Tracking Preferences](control-panel ExpressionEngine's caching mechanisms can help reduce database load in most situations. However if you use file-based caching, that may transfer some of the resources saved from the database server to the web server. Thus, it is recommended that you use either the Memcached or Redis [caching driver](optimization/caching.md#caching-drivers) instead of the file driver, especially on high-traffic sites. The increased disk i/o from file caches being created and destroyed during a high traffic event consumes significantly more server resources than the memory-based caching drivers. If you are running in a PHP environment without Opcode caching, [saving templates as files](general/system-configuration-overrides.md#save_tmpl_files) can marginally increase disk i/o as each template must be retrieved from disk. We recommend running PHP 7 or greater so that this type of file activity is managed better by the server. + +## Using Load Balancers + +Using a load balancer or reverse proxy is a popular solution to mitigate DDoS attacks and make handling large amounts of traffic easier. + +When a server is placed behind a reverse proxy or load balancer ExpressionEngine might not know the user's real IP address because it would be substituted with the proxy's IP address. Most proxies however will preserve the real user's IP address and forward it through a request header. In order to use the data in those headers to obtain the real user's IP address you need to configure the system to recognize and trust the proxy IP addresses. This can be done using the [`proxy.php` configuration file](config/config-files.md#reverse-proxy-ip-addresses). diff --git a/docs/templates/conditionals.md b/docs/templates/conditionals.md index bc1be23d6..a5f7afd45 100755 --- a/docs/templates/conditionals.md +++ b/docs/templates/conditionals.md @@ -325,6 +325,12 @@ You'll notice in the "logout" link above that a special path is used: {path='LOG There are a handful of variables that are always available to conditionals. +### `logged_in_avatar_filename` +### `logged_in_avatar_height` +### `logged_in_avatar_width` + + {if logged_in_avatar_filename}{/if} + ### `logged_in_email` {if logged_in_email $= 'example.com'} One of us! One of us! {/if} diff --git a/docs/templates/embedding.md b/docs/templates/embedding.md index d3d010284..4321e9113 100755 --- a/docs/templates/embedding.md +++ b/docs/templates/embedding.md @@ -21,7 +21,7 @@ Where "template_group" is the name of the group and "template" is the name of th You **must** include both the template group and the template name in the embed tag. -By default, you cannot use embeds inside of Forum templates. See [Other Features](add-ons/forum/other-features.md) for instructions on running the forums through regular templates. +By default, you cannot use embeds inside of Forum templates. See [Other Forum Features](https://github.com/ExpressionEngine/Forum/blob/main/docs/other-features.md) for instructions on running the forums through regular templates. ### Notes diff --git a/docs/templates/engine.md b/docs/templates/engine.md index de2c87e03..82667db62 100755 --- a/docs/templates/engine.md +++ b/docs/templates/engine.md @@ -13,7 +13,7 @@ When ExpressionEngine serves up each Template, the system must go through a rendering process to parse out the Tags, Variables, Template Partials, and Embeds being used in the Template. This page explains the order of those rendering stages. This information can be immensely useful when building pages and troubleshooting problems. -NOTE: **Note:** The information in this article applies only to rendering Templates. It doesn't apply to rendering theme files such as those used for [Member Profiles](control-panel/template-manager.md#member-profile-templates), or the [Discussion Forum](add-ons/forum/themes.md) module. +NOTE: **Note:** The information in this article applies only to rendering Templates. It doesn't apply to rendering theme files such as those used for [Member Profiles](control-panel/template-manager.md#member-profile-templates) (legacy), or the [Discussion Forum](https://github.com/ExpressionEngine/Forum/blob/main/docs/themes.md) module. ## Rendering Order diff --git a/docs/templates/globals/consent.md b/docs/templates/globals/consent.md index d10f78395..facf74ab7 100755 --- a/docs/templates/globals/consent.md +++ b/docs/templates/globals/consent.md @@ -71,7 +71,7 @@ User-created Consent requests, that you as the site builder create, are referenc ### Checking if the User has Responded -All of the above variables act like a boolean—`TRUE` if the user has given consent and `FALSE` if they've not given consent, or have denied or withdrawn it. But what about folks who haven't responded yet? You can use the `has_reponded:` prefix with any consent variable. For example, you could ask for consent for using a cool widget, but only if they've not responded. If they told you no, you don't want to keep asking. +All of the above variables act like a boolean—`TRUE` if the user has given consent and `FALSE` if they've not given consent, or have denied or withdrawn it. But what about folks who haven't responded yet? You can use the `has_responded:` prefix with any consent variable. For example, you could ask for consent for using a cool widget, but only if they've not responded. If they told you no, you don't want to keep asking. has_responded: : diff --git a/docs/templates/globals/single-variables.md b/docs/templates/globals/single-variables.md index 40b31773e..f7dce70b1 100755 --- a/docs/templates/globals/single-variables.md +++ b/docs/templates/globals/single-variables.md @@ -259,10 +259,30 @@ The email address for the site, as specified in [Email Configuration](control-pa [TOC=3] +### `{logged_in_avatar_filename}` + +The filename of avatar image for the currently logged-in user. + +### `{logged_in_avatar_height}` + +Height of avatar image for the currently logged-in user. + +### `{logged_in_avatar_width}` + +Width of avatar image for the currently logged-in user. + ### `{logged_in_email}` The email address for the currently logged-in user. +### `{logged_in_ip_address}` + +This variable will be substituted with the IP address of the currently logged in user. + +### `{logged_in_member_id}` + +The Member ID for the currently logged-in user. + ### `{logged_in_primary_role_id}` The Primary Role ID number for the currently logged-in user. @@ -279,14 +299,6 @@ The short name of the Primary Role for the currently logged-in user. The Primary Role description for the currently logged-in user. -### `{logged_in_ip_address}` - -This variable will be substituted with the IP address of the currently logged in user. - -### `{logged_in_member_id}` - -The Member ID for the currently logged-in user. - ### `{logged_in_private_messages}` The number of unread private messages for the currently logged-in user. diff --git a/docs/toc_sections/_advanced_usage_toc.yml b/docs/toc_sections/_advanced_usage_toc.yml index a40751102..993ccd2ec 100644 --- a/docs/toc_sections/_advanced_usage_toc.yml +++ b/docs/toc_sections/_advanced_usage_toc.yml @@ -7,6 +7,8 @@ - name: Config Files items: + - name: Main Configuration File + href: config/config.md - name: System Config Overrides href: general/system-configuration-overrides.md - name: Additional Config Files @@ -203,6 +205,8 @@ href: development/extension-hooks/global/pagination.md - name: Relationships Fieldtype href: development/extension-hooks/global/relationships.md + - name: Members Fieldtype + href: development/extension-hooks/global/member-ft.md - name: Session Library href: development/extension-hooks/global/session.md - name: Template Library @@ -418,6 +422,8 @@ href: development/models/category-field.md - name: Category Group Model href: development/models/category-group.md + - name: Category Group Settings Model + href: development/models/category-group-settings.md - name: Channel Entry Model href: development/models/channel-entry.md - name: Channel Field Group Model diff --git a/docs/toc_sections/_the_fundamentals_toc.yml b/docs/toc_sections/_the_fundamentals_toc.yml index 18effcaef..a74b7f465 100644 --- a/docs/toc_sections/_the_fundamentals_toc.yml +++ b/docs/toc_sections/_the_fundamentals_toc.yml @@ -235,6 +235,8 @@ href: fieldtypes/fluid.md - name: Grid href: fieldtypes/grid.md + - name: Members + href: fieldtypes/member.md - name: Notes href: fieldtypes/notes.md - name: Number Input diff --git a/docs/troubleshooting/front-end-content-management.md b/docs/troubleshooting/front-end-content-management.md index 4a223a9d4..1f5b6f35e 100644 --- a/docs/troubleshooting/front-end-content-management.md +++ b/docs/troubleshooting/front-end-content-management.md @@ -42,7 +42,6 @@ There are several settings that could prevent the Dock from showing on the front - Via Pro's [general settings](control-panel/settings/front-end-editing.md), ensure that the "Enable automatic front-end editing links" setting is toggled on. - Via the [`enable_frontedit_links` config override](general/system-configuration-overrides.md#enable_frontedit_links). If in use, this override must be set to `'y'` to automatically insert front edit links. -- Front edit links are disabled via HTML comments, EE template comments, or `disable` parameter. There are 3 ways to disable Pro's automatic generation of front edit links. Ensure that the template code your inspecting isn't surrounded by template comments or wrapped in a field tag using `disable="frontedit`. For details on these methods read the [docs regarding disabling front-edit links](advanced-usage/front-end/frontend.md#enabledisable-the-front-edit-link) +- Front edit links are disabled via HTML comments, EE template comments, or `disable` parameter. There are 3 ways to disable Pro's automatic generation of front edit links. Ensure that the template code your inspecting isn't surrounded by template comments or wrapped in a field tag using `disable="frontedit`. For details on these methods read the [docs regarding disabling front-edit links](advanced-usage/front-end/frontend.md#enabledisable-the-front-edit-link) - User does not have proper access to edit channels they are viewing. Users must be assigned access to channels and to be able to edit channel content to see related front edit links on the site. If the user is viewing entries on the front-end for which they do not have content, then no front edit links will show. -