-[**I am a developer.** Developer API.](#developer-api)
+[**I am a developer: ** Developer API](#developer-api)
-[**I am a template designer.** Guide for template designer.](#guide-for-template-designer)
+[**I am a template designer: ** Guide for template designers](#guide-for-template-designer)
+
+---
## Developer API
The plugin system let you:
- * insert content into specific places across templates.
- * alter data before templates rendering.
- * alter data before saving new links.
+- insert content into specific places across templates.
+- alter data before templates rendering.
+- alter data before saving new links.
### How can I create a plugin for Shaarli?
Parameters:
- - data: see [$data section](https://github.com/shaarli/Shaarli/wiki/Plugin-System#plugins-data)
- - conf: the `ConfigManager` instance.
+- data: see [$data section](https://shaarli.readthedocs.io/en/master/Plugin-System/#plugins-data)
+- conf: the `ConfigManager` instance.
-For exemple, if my plugin want to add data to the header, this function is needed:
+For example, if my plugin want to add data to the header, this function is needed:
hook_demo_plugin_render_header
Each file contain two keys:
- * `description`: plugin description
- * `parameters`: user parameter names, separated by a `;`.
- * `parameter.<PARAMETER_NAME>`: add a text description the specified parameter.
+- `description`: plugin description
+- `parameters`: user parameter names, separated by a `;`.
+- `parameter.<PARAMETER_NAME>`: add a text description the specified parameter.
> Note: In PHP, `parse_ini_file()` seems to want strings to be between by quotes `"` in the ini file.
`$data` is an array containing:
- * `_PAGE_`: current target page (eg: `linklist`, `picwall`, etc.).
- * `_LOGGEDIN_`: true if user is logged in, false otherwise.
+- `_PAGE_`: current target page (eg: `linklist`, `picwall`, etc.).
+- `_LOGGEDIN_`: true if user is logged in, false otherwise.
##### Template placeholders
List of placeholders:
- * `buttons_toolbar`: after the list of buttons in the header.
+- `buttons_toolbar`: after the list of buttons in the header.
![buttons_toolbar_example](http://i.imgur.com/ssJUOrt.png)
- * `fields_toolbar`: after search fields in the header.
+- `fields_toolbar`: after search fields in the header.
> Note: This will only be called in linklist.
`$data` is an array containing:
- * `_PAGE_`: current target page (eg: `linklist`, `picwall`, etc.).
- * `_LOGGEDIN_`: true if user is logged in, false otherwise.
+- `_PAGE_`: current target page (eg: `linklist`, `picwall`, etc.).
+- `_LOGGEDIN_`: true if user is logged in, false otherwise.
##### Template placeholders
List of placeholders:
- * `css_files`: called after loading default CSS.
+- `css_files`: called after loading default CSS.
> Note: only add the path of the CSS file. E.g: `plugins/demo_plugin/custom_demo.css`.
`$data` is an array containing:
- * `_PAGE_`: current target page (eg: `linklist`, `picwall`, etc.).
- * `_LOGGEDIN_`: true if user is logged in, false otherwise.
+- `_PAGE_`: current target page (eg: `linklist`, `picwall`, etc.).
+- `_LOGGEDIN_`: true if user is logged in, false otherwise.
##### Template placeholders
List of placeholders:
- * `text`: called after the end of the footer text.
- * `endofpage`: called at the end of the page.
+- `text`: called after the end of the footer text.
+- `endofpage`: called at the end of the page.
![text_example](http://i.imgur.com/L5S2YEH.png)
- * `js_files`: called at the end of the page, to include custom JS scripts.
+- `js_files`: called at the end of the page, to include custom JS scripts.
> Note: only add the path of the JS file. E.g: `plugins/demo_plugin/custom_demo.js`.
`$data` is an array containing:
- * `_LOGGEDIN_`: true if user is logged in, false otherwise.
- * All templates data, including links.
+- `_LOGGEDIN_`: true if user is logged in, false otherwise.
+- All templates data, including links.
##### Template placeholders
List of placeholders:
- * `action_plugin`: next to the button "private only" at the top and bottom of the page.
+- `action_plugin`: next to the button "private only" at the top and bottom of the page.
![action_plugin_example](http://i.imgur.com/Q12PWg0.png)
- * `link_plugin`: for every link, between permalink and link URL.
+- `link_plugin`: for every link, between permalink and link URL.
![link_plugin_example](http://i.imgur.com/3oDPhWx.png)
- * `plugin_start_zone`: before displaying the template content.
+- `plugin_start_zone`: before displaying the template content.
![plugin_start_zone_example](http://i.imgur.com/OVBkGy3.png)
- * `plugin_end_zone`: after displaying the template content.
+- `plugin_end_zone`: after displaying the template content.
![plugin_end_zone_example](http://i.imgur.com/6IoRuop.png)
`$data` is an array containing:
- * All templates data.
+- All templates data.
##### Template placeholders
List of placeholders:
- * `edit_link_plugin`: after tags field.
+- `edit_link_plugin`: after tags field.
![edit_link_plugin_example](http://i.imgur.com/5u17Ens.png)
`$data` is an array containing:
- * All templates data.
+- All templates data.
##### Template placeholders
List of placeholders:
- * `tools_plugin`: at the end of the page.
+- `tools_plugin`: at the end of the page.
![tools_plugin_example](http://i.imgur.com/Bqhu9oQ.png)
`$data` is an array containing:
- * `_LOGGEDIN_`: true if user is logged in, false otherwise.
- * All templates data.
+- `_LOGGEDIN_`: true if user is logged in, false otherwise.
+- All templates data.
##### Template placeholders
List of placeholders:
- * `plugin_start_zone`: before displaying the template content.
-
- * `plugin_end_zone`: after displaying the template content.
+- `plugin_start_zone`: before displaying the template content.
+- `plugin_end_zone`: after displaying the template content.
![plugin_start_end_zone_example](http://i.imgur.com/tVTQFER.png)
`$data` is an array containing:
- * `_LOGGEDIN_`: true if user is logged in, false otherwise.
- * All templates data.
+- `_LOGGEDIN_`: true if user is logged in, false otherwise.
+- All templates data.
##### Template placeholders
List of placeholders:
- * `plugin_start_zone`: before displaying the template content.
-
- * `plugin_end_zone`: after displaying the template content.
+- `plugin_start_zone`: before displaying the template content.
+- `plugin_end_zone`: after displaying the template content.
For each tag, the following placeholder can be used:
- * `tag_plugin`: after each tag
+- `tag_plugin`: after each tag
![plugin_start_end_zone_example](http://i.imgur.com/vHmyT3a.png)
`$data` is an array containing:
- * `_LOGGEDIN_`: true if user is logged in, false otherwise.
- * All templates data.
+- `_LOGGEDIN_`: true if user is logged in, false otherwise.
+- All templates data.
##### Template placeholders
List of placeholders:
- * `plugin_start_zone`: before displaying the template content.
-
- * `plugin_end_zone`: after displaying the template content.
+- `plugin_start_zone`: before displaying the template content.
+- `plugin_end_zone`: after displaying the template content.
For each tag, the following placeholder can be used:
- * `tag_plugin`: after each tag
+- `tag_plugin`: after each tag
#### render_daily
`$data` is an array containing:
- * `_LOGGEDIN_`: true if user is logged in, false otherwise.
- * All templates data, including links.
+- `_LOGGEDIN_`: true if user is logged in, false otherwise.
+- All templates data, including links.
##### Template placeholders
List of placeholders:
- * `link_plugin`: used at bottom of each link.
+- `link_plugin`: used at bottom of each link.
![link_plugin_example](http://i.imgur.com/hzhMfSZ.png)
- * `plugin_start_zone`: before displaying the template content.
-
- * `plugin_end_zone`: after displaying the template content.
+- `plugin_start_zone`: before displaying the template content.
+- `plugin_end_zone`: after displaying the template content.
#### render_feed
`$data` is an array containing:
- * `_LOGGEDIN_`: true if user is logged in, false otherwise.
- * `_PAGE_`: containing either `rss` or `atom`.
- * All templates data, including links.
+- `_LOGGEDIN_`: true if user is logged in, false otherwise.
+- `_PAGE_`: containing either `rss` or `atom`.
+- All templates data, including links.
##### Template placeholders
List of placeholders:
- * `feed_plugins_header`: used as a header tag in the feed.
+- `feed_plugins_header`: used as a header tag in the feed.
For each links:
- * `feed_plugins`: additional tag for every link entry.
+- `feed_plugins`: additional tag for every link entry.
#### save_link
`$data` is an array containing the link being saved:
- * id
- * title
- * url
- * shorturl
- * description
- * private
- * tags
- * created
- * updated
+- id
+- title
+- url
+- shorturl
+- description
+- private
+- tags
+- created
+- updated
#### delete_link
`$data` is an array containing the link being saved:
- * id
- * title
- * url
- * shorturl
- * description
- * private
- * tags
- * created
- * updated
+- id
+- title
+- url
+- shorturl
+- description
+- private
+- tags
+- created
+- updated
## Guide for template designer
Aside from classic RainTPL loops, plugins order is handle by JavaScript. You can just include `plugin_admin.js`, only if:
- * you're using a table.
- * you call orderUp() and orderUp() onclick on arrows.
- * you add data-line and data-order to your rows.
+- you're using a table.
+- you call orderUp() and orderUp() onclick on arrows.
+- you add data-line and data-order to your rows.
Otherwise, you can use your own JS as long as this field is send by the form: