Jump to content

ProcessWire Dashboard


Recommended Posts

ProcessWire Dashboard

1577998373376.thumb.jpg.0d9081029323d8788ec2e8e84662ae7c.jpg

Download

You can find the latest release on Github.

Documentation

Check out the documentation to get started. This is where you'll find information about included panel types and configuration options.

Custom Panels

The goal was to make it simple to create custom panels. The easiest way to do that is to use the panel type template and have it render a file in your templates folder. This might be enough for 80% of all use cases. For anything more complex (FormBuilder submissions? Comments? Live chat?), you can add new panel types by creating modules that extend the DashboardPanel base class. Check out the documentation on custom panels or take a look at the HelloWorld panel to get started. I'm happy to merge any user-created modules into the main repo if they might be useful to more than a few people.

Roadmap

  • Panel types
    • Google Analytics
    • Draft
    • At a glance / Page counter
    • 404s
  •  Layout options
    • Render multiple tabs per panel
  • Chart panel
    • load chart data from JS file (currently passed as PHP array)
  • Like 34
  • Thanks 11
Link to comment
Share on other sites

thanks @d'Hinnisdaël so i have this working on a site, but i have a question about the shortcuts, how do you make a shortcut to a custom URL, like say a module edit screen, or even an external URL?

Also, how did you get the icon for the Profile to not be a bookmark?

Lastly, I noticed that I had to put the hooks in ready.php, they weren't working in admin.php for some reason...

Also, i think there needs to be a fix for the loading of the module only in admin, may be loading stuff in $config without checking if admin and frontend that use $config->styles might be picking those up (i'm getting errors as i have modules that put css/js into $config only for front end)...

Link to comment
Share on other sites

@Macrura

1 hour ago, Macrura said:

how do you make a shortcut to a custom URL, like say a module edit screen, or even an external URL?

Also, how did you get the icon for the Profile to not be a bookmark?

Lastly, I noticed that I had to put the hooks in ready.php, they weren't working in admin.php for some reason...

Also, i think there needs to be a fix for the loading of the module only in admin, may be loading stuff in $config without checking if admin and frontend

Shortcut URLs

I have pushed a release that treats strings as URLs so that any of the following options should work:

[
  'shortcuts' => [

    // Page
    $this->pages->get(1132),

    // Page ID
    1020,

    // Overwrite page title
    'New things' => 1020,

    // Set custom URL
    'Backups' => "{$config->urls->admin}setup/db-backups/backup/",

  ],
]

Profile page icon

Check out the PageIcon module which lets you set custom icons for every page.

Hooks in admin.php

That's strange. Do you have any other hooks in admin.php that work? I have tons of hooks there and never had a problem.

$config->styles

True, I don't use the styles array myself so I haven't run into this. Will research a fix.

  • Like 3
Link to comment
Share on other sites

thanks - and i guess the version file needs to be updated (?)..

this is working well for me; I have my own dashboard module, but it uses templates, pages and fields, and is thus cumbersome for smaller/low budget sites. My dashboard module uses AdminLTE, so it has stuff like collapsible panels with state recall; For some of the more complex panels like Formbuilder entries, etc, i'll just build custom panels and hook into this module.

Thanks again for building this! This is very extensible, looks and works great, and seems like it will be a very popular module! Here's the dashboard i just threw together...

Dashboard_ibtc.thumb.jpg.92f7b9d64667983954227234848e5448.jpg

  • Like 9
Link to comment
Share on other sites

@matjazp I added a release that adds the margins back in for the default admin theme.

Concerning the user name display: I can't reproduce that on the current master version (3.0.148) with AdminThemeDefault. However, the latest release only displays 'Welcome' without a comma if the user name comes out empty. Why it would be empty, I don't know, since it's working fine here.

  • Like 1
Link to comment
Share on other sites

Title is not displayed even if I use AdminThemeUikit. Problematic is this line:

$userLabel = $this->modules->getConfig('AdminThemeUikit', 'userLabel') ?: 'title|name'; // return "{Name}"

Note that $userLabel is always {Name}, regardless of what theme is used. What happens if AdminThemeUikit is not installed? If I set $userLabel to 'title|name' then the title is displayed. Perhaps you should specify in module settings the minimum PW version (guess its 3.0.66 - when getConfig() is introduced) and minimum PHP version (at least 7.0?).

Link to comment
Share on other sites

Perhaps actions col in collections (DashboardTableColumn__actions__) don't need to be sortable? Would be nice if we could set the icon for every shortcut in Shortcuts panel, regradless if page has the icon set. On the other hand, I can create my own panel :-) Is support for IE11 planned?

Link to comment
Share on other sites

14 hours ago, matjazp said:

Perhaps actions col in collections (DashboardTableColumn__actions__) don't need to be sortable? Would be nice if we could set the icon for every shortcut in Shortcuts panel, regradless if page has the icon set. On the other hand, I can create my own panel 🙂 Is support for IE11 planned?

You're right about the actions column — I pushed a release that hides the table sort arrows. Also, I added a readme section on how to set custom icons per shortcut:

  'shortcuts' => [
    'Updates' => 1020,           // Override title
    'Updates' => [1020, 'gear'], // Override title + icon
  ],

Support for IE is definitely not planned. I'm happy to take pull requests, though, if you find a way to pull it off 🦜

  • Like 4
Link to comment
Share on other sites

Thanks for this nice Module... 

Unfortunately I have a problem, I can't open the admin area any more, only the following error occurs:

Fatal error: Class 'ProcessWire\DashboardPanel' not found in /var/www/vhosts/**MYHOSTING**/site/modules/Dashboard/DashboardPanelNumber.module on line 5

😞  ProcessWire 3.0.148

 

/edit: I could fix the error, I did not upload the module via the ZIP file, but directly via the FTP 😉 

Are there any problems here if you install the module directly via Processwire?

 

And one question:

How to configure the "collection", that a edit modal is used, and not target=_blank?

 

 

Found a little bug 🙂 

1643964198_2020-01-1409_29_31-Window.png.6fa1ffef5abf840b378e29ed9dead9e4.png

Link to comment
Share on other sites

@zoeck That error means one of the panel modules is loaded before the base class. This shouldn't be an issue anymore since I raised the main module's autoload priority. I made a note try out the web installer soon.

The empty dashboard message looks fine here, rendered as a link. Does the dashboard itself render correctly once you configure the panels? The template file doesn't escape any of the output values, so I'm a bit confused as to why this could be. Do you have any modules installed that might overwrite or change the _() function of ProcessWire in any way?

Link to comment
Share on other sites

1 hour ago, d'Hinnisdaël said:

The empty dashboard message looks fine here, rendered as a link. Does the dashboard itself render correctly once you configure the panels? The template file doesn't escape any of the output values, so I'm a bit confused as to why this could be. Do you have any modules installed that might overwrite or change the _() function of ProcessWire in any way?

Hm, thats strange...

The following modules are used:
ListerPro, ProcessWireUpgrade, Pages Sum, LoginPersist, Inputfield Decimal, Front-End Edit Lightbox

I don't think that anything here changes the _() function

 

Is it possible to configure the "collection", that a edit modal is used, and not target=_blank?

 

/edit: ok i found it... when the LanguageSupport module is activated, the problem occurs. even if only one language is active

Link to comment
Share on other sites

22 minutes ago, d'Hinnisdaël said:

The modal editing of collection links is work in progress, but it's not as straight-forward as I hoped it would be ⚙️

What's the problem? 🙂 

Just tested it with a quick and dirty edit of "DashboarPanelCollection.module". I just added the "pw-modal" class to the link, and removed the target...

And the Jquery UI is needed:

wire('modules')->get('JqueryUI')->use('modal');

It is not so easy if the modal should be closed automatically when you save 😞 

 

/BTW: i love your dashboard 👍

Link to comment
Share on other sites

50 minutes ago, zoeck said:

What's the problem? 🙂 

What you said: closing the modal on save is a requirement for me. I'll have to have a look at how the core does it in the template field editor, for example.

I was looking into having the PageList links open in a modal as well, but that can be a later release as well.

  • Like 1
Link to comment
Share on other sites

Haven't tried out the module **yet**, but I love the look of these dashboards.

One panel that could be useful is a content overview panel like in Wordpress.  It would show the amount of pages for each type of page with a link to the built in pages lister that shows all pages filter for that page type.

image.png.7c68dfab0cdd0cdd580de7566bc41b9a.png

Another feature that might be useful would be the ability to create multiple dashboard pages, or tabs within dashboards like what is shown in the Drupal Workbench module?  This could be a dashboard for the user?

image.thumb.png.db81048cb564a504d9e8389f4bd41abc.png

Maybe you could have a site dashboard(displayed when clicking on the main logo or the Processwire logo or visiting the main processwire admin page at /processwire) and a user dashboard(displayed when a user first logs into the Processwire Admin)?

Here is what a "My dashboard"(from drupal.org) for users could look like

138499719_HomeboxDrupal.org2020-01-1409-42-23.jpg.cfb534b2212dbe70060c434d8698f30d.jpg

If we had the ability to create multiple dashboard pages then while creating/editing each dashboard page, you can choose which roles are allowed to view the page. If you do not choose any roles, then only admins can view the dashboard page.  For obvious reasons, anonymous users will not be able to save pages or add custom items.

All of this might be too complex, but I thought would just get these thoughts out of my head in case anybody liked them.

Here is another dashboard I found just to give others some ideas of what could probably be created with this module.

varbase-total-control-admin-dashboard_0.jpg.ee8aae33e674f8224b4e96bbc59bc4b1.jpg

Anyways, thanks for making this module.  Look forward to trying it soon.

  • Like 2
Link to comment
Share on other sites

I just installed the latest release from github and get the same "Your dashboard is empty" error as zoeck

I have not installed multilanguage and it is a fresh install of the latest ProcessWire 1.0.148

To site/template/admin.php I added after the 

require $config->paths->adminTemplates . 'controller.php';
wire()->addHookAfter('Dashboard::getPanels', function ($event) {
    /* Get list of panels */
    $panels = $event->return;

    /* Add panels */
    $panels->add([
        'panel' => 'collection',
        'title' => 'News items',
        'data' => [
            'collection' => 'template=basic-page, limit=10',
            'sortable' => true,
        ],
    ]);
});

but the "Your dashboard is empty" message still appears.

I did not set the dashboard as the entry point. 

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
  • Recently Browsing   0 members

    • No registered users viewing this page.
  • Similar Content

    • By monollonom
      PageMjmlToHtml
      Github: https://github.com/romaincazier/PageMjmlToHtml
      Modules directory: https://processwire.com/modules/page-mjml-to-html/
      A module allowing you to write your Processwire template using MJML and get a converted HTML output using MJML API.
      This is considered to be in alpha and as such needs some testing before being used in production!

      About
      Created by Mailjet, MJML is a markup language making it a breeze to create newsletters displayed consistently across all email clients.
      Write your template using MJML combined with Processwire’s API and this module will automatically convert your code into a working newsletter thanks to their free-to-use Rest API.
      Prerequisite
      For this module to work you will need to get an API key and paste it in the module’s configuration.
      Usage
      Once your credentials are validated, select the template(s) in which you’re using the MJML syntax, save and go visualize your page(s) to see if everything’s good. You will either get error/warning messages or your email properly formatted and ready-to-go.
      From there you can copy/paste the raw generated code in an external mailing service or distribute your newsletter using ProMailer.
      Features
      The MJML output is cached to avoid repetitive API calls Not cached if there are errors/warnings Cleared if the page is saved Cleared if the template file has been modified A simple (dumb?) code viewer highlights lines with errors/warnings A button is added to quickly copy the raw code of the generated newsletter Not added if the page is rendered outside of a PageView Only visible to users with the page’s edit permission A shortcut is also added under “View” in the edit page to open the raw code in a new tab Multi-languages support
      Notes
      The code viewer is only shown to superusers. If there’s an error the page will display:
      Only its title for guests Its title and a message inviting to contact the administrator for editors If you are using the markup regions output strategy, it might be best to not append files to preserve your MJML markup before calling the MJML API. This option is available in the module’s settings.
    • By Marco Ro
      Hi guys!
      I'm a bit anxious because this is the first module I present! (beta modulo) But I will finally be able to share something with the community too! :)
      This is a BETA version of the PayPal payment system called: PayPal Commerce Platform.
      It is an advanced system (Business Pro account is needed) that brings various benefits in terms of fees and above all integrates direct payment with credit/debit cards. 
      The module integrates with Padloper 0.0.2, which is the current installation I'm using.
      This system integrates the classic PayPal buy button, the alternative or local payment method and the new payment system: credit/debit cards that doesn't go through the PayPal account. It is a Stripe-style payment, it connects directly with the bank and integrates 3D security validation.
      I say that it is a BETA because this module currently only works with Sandbox account, to put it live you need to change API url manually (manually for the moment).
      Because this module is not ready for live:
      I would like to have your opinion on how I built the module (is the first one I do). I don't want to share something that is not fish but I need a comparison with someone more experienced than me, for be sure that this is the best way to code the module.
      If you want to try this I created a git, you will find all the instructions for installation and correct operation. (Git has a MIT licensed)
      https://github.com/MarcooRo/processwire-PayPal-Commerce-Platform I hope I did something that you guys can like :)
    • By stanoliver
      Hello Community!
      I found quite a  few ways or tools to style the admin or build a dashboard:
      - the new way with the .less compilation (reno style, rock style)
      - dashboard modules or tutorials how to build your own
      - admin on stereoids
      Vocabulary: With "admin like user" I do not mean a full admin but an user with quite a lot of priviledges ...
      My problem is that I do want to change the admin template for every (admin like) user in a different way. Or if I would build a bigger dashboard certain functionlity should only be available for a few (admin like) users but not for everyone.
      I would need different versions of the admin theme or the built dashboards for different admin users
      To start with a very simple example:
      Let's say I wanna give one (admin like) user a different background color (with css). 
      Let's say I wanna have an extra button or tab for some (admin like) user which another (admin like) user should not have
      How can I take advantage of processwire roles in all these examples I mentioned in the beginning?
       
       
    • By monollonom
      (once again I was surprised to see a work of mine pop up in the newsletter, this time without even listing the module on PW modules website 😅. Thx @teppo !)
      FieldtypeQRCode
      Github: https://github.com/romaincazier/FieldtypeQRCode
      Modules directory: https://processwire.com/modules/fieldtype-qrcode/
      A simple fieldtype generating a QR Code from the public URL of the page, and more.
      Using the PHP library QR Code Generator by Kazuhiko Arase.

      Options
      In the field’s Details tab you can change between .gif or .svg formats. If you select .svg you will have the option to directly output the markup instead of a base64 image. SVG is the default.
      You can also change what is used to generate the QR code and even have several sources. The accepted sources (separated by a comma) are: httpUrl, editUrl, or the name of any text/URL/file/image field.
      If LanguageSupport is installed the compatible sources (httpUrl, text field, ...) will return as many QR codes as there are languages. Note however that when outputting on the front-end, only the languages visible to the user will be generated.
      Formatting
      Unformatted value
      When using $page->getUnformatted("qrcode_field") it returns an array with the following structure:
      [ [ "label" => string, // label used in the admin "qr" => string, // the qrcode image "source" => string, // the source, as defined in the configuration "text" => string // and the text used to generate the qrcode ], ... ] Formatted value
      The formatted value is an <img>/<svg> (or several right next to each other). There is no other markup.
      Should you need the same markup as in the admin you could use:
      $field = $fields->get("qrcode_field"); $field->type->markupValue($page, $field, $page->getUnformatted("qrcode_field")); But it’s a bit cumbersome, plus you need to import the FieldtypeQRCode's css/js. Best is to make your own markup using the unformatted value.
      Static QR code generator
      You can call FieldtypeQRCode::generateQRCode to generate any QR code you want. Its arguments are:
      string $text bool $svg Generate the QR code as svg instead of gif ? (default=true) bool $markup If svg, output its markup instead of a base64 ? (default=false) Hooks
      Please have a look at the source code for more details about the hookable functions.
      Examples
      $wire->addHookAfter("FieldtypeQRCode::getQRText", function($event) { $page = $event->arguments("page"); $event->return = $page->title; // or could be: $event->return = "Your custom text"; }) $wire->addHookAfter("FieldtypeQRCode::generateQRCodes", function($event) { $qrcodes = $event->return; // keep everything except the QR codes generated from editUrl foreach($qrcodes as $key => &$qrcode) { if($qrcode["source"] === "editUrl") { unset($qrcodes[$key]); } } unset($qrcode); $event->return = $qrcodes; })
    • By Sebi
      AppApiFile adds the /file endpoint to the AppApi routes definition. Makes it possible to query files via the api. 
      This module relies on the base module AppApi, which must be installed before AppApiFile can do its work.
      Features
      You can access all files that are uploaded at any ProcessWire page. Call api/file/route/in/pagetree?file=test.jpg to access a page via its route in the page tree. Alternatively you can call api/file/4242?file=test.jpg (e.g.,) to access a page by its id. The module will make sure that the page is accessible by the active user.
      The GET-param "file" defines the basename of the file which you want to get.
      The following GET-params (optional) can be used to manipulate an image:
      width height maxwidth maxheight cropX cropY Use GET-Param format=base64 to receive the file in base64 format.
×
×
  • Create New...