Jump to content
pwFoo

FrontendContentManager

Recommended Posts

FrontendContentManager

(unstable / testing)

FrontendContentManager is a module based on FormHelper to generate needed page edit / add form via form api. 

NO sanitizing of form values at the moment!!!

  • edit pages
  • create / add new pages
  • add, replace and remove images

Download

ProcessWire module page: http://modules.processwire.com/modules/frontend-content-manager

Bitbucket Repo: https://bitbucket.org/pwFoo/frontendcontentmanager

Version

0.2.0

Required

FormHelper (0.7.1+)

Usage

Example template file

<!DOCTYPE html>
<html lang="en">
	<head>
		<meta http-equiv="content-type" content="text/html; charset=utf-8" />
		<title><?php echo $page->title; ?></title>
<?php

// Load FormHelper module and also set wire('fh') variable
$fcm = $modules->get('FrontendContentManager');

// edit existing page
//$form = $fcm->edit($pages->get('1108'));

// add a new page based on a template and a parent object
$parent = $pages->get('name=test');
$form = $fcm->add($parent, $parent->template);

// jsConfig needed by ckeditor
echo $fcm->JsConfig(); 

// outpunt needed scripts for inputfield modules, ...
foreach ($config->styles as $file) { echo "<link type='text/css' href='$file' rel='stylesheet' />\n"; } 
foreach ($config->scripts as $file) { echo "<script type='text/javascript' src='$file'></script>\n"; }

?>
	</head>
	<body>
		<h1><?php echo $page->title; ?></h1>
<?php 

// output the forom
echo $form;

?>
	</body>
</html>

*UPDATED TO 0.1.0*

At the moment I have no usage for FCM module, but after FormHelper 0.5.2 is finished I've done a quick FCM rewrite. Only few tests done yet!

*UPDATED TO 0.2.0*

Updated to work with redesigned FormHelper 0.7

Edited by pwFoo
  • Like 5

Share this post


Link to post
Share on other sites

Hey pwFoo,

Just a couple of things - it isn't possible to install your module directly from the modules directory because the bitbucket link doesn't work properly. FormHelper did download and install automatically though, so maybe you just need to tweak something with the url to your module.

Next thing - I installed and put:

$fcm = $modules->get('FrontendContentManager');

// edit page (editable permission needed)
echo $fcm->edit($page);

in a template file, but nothing was output and I was logged in as a superuser. Am I missing something obvious?

Share this post


Link to post
Share on other sites

Hi Adrian,

is it a problem with the link or because the module isn't approved yet?

Sorry my bad! I have to update the documentation.

At current version I use url segments! But maybe I change this.

Module checks permissions, template isn't an admin template AND url segment /add or /edit.

What do you think. Should I remove the url segment check from module and move it to the template (in developers hand)?

Share this post


Link to post
Share on other sites

You're right - probably just because it isn't approved yet.

Adding edit to the url - with url segments enabled did the trick, but I am concerned that there will be issues with your module relying on segments if the dev also wants to use segments for controlling output on the frontend. It might be better to just go with: /?edit=1

Share this post


Link to post
Share on other sites

Ok, thanks for testing :)

I think it would be better to remove url segment check. So developer have the choice how to handle it (for example a simple if / else).

I try to build it as simple and flexible as possible...

Share this post


Link to post
Share on other sites

It's also possible to edit any page...

echo $fcm->edit($pages->get("/"));

Next update url segment check will be removed.

Share this post


Link to post
Share on other sites

Hi Marty,

Fredi use the backend interface in an overlay. So you should get a styled edit page (like backend admin).

FCM is based on FormHelper module (generate and process forms). You can use it inside the frontend page without an overlay and with your own styles.

At the moment it's tested with simple pages/ templates. 

  • create pages
  • edit page fields (it's also possible to skip fields and so remove from edit form)
  • upload, replace and remove images)

It's untested with multi language or repeater fields for example.

Share this post


Link to post
Share on other sites

I redesigned FCM to be more flexible.

New testing branch working like this (inside a demo module "conversation").

    public function add ($parent, $redirect = null, $options = array('clearValues' => true)) {
        $fcm = $this->modules->get('FrontendContentManager');
        
        $form = $fcm->createForm($parent, $options);
        
        if ($fcm->formProcess()) {
            $page = $fcm->add($parent);
            
            // Manipulate page object from outside...
            $page->name = $page->id . '-' . $this->sanitizer->pageName($page->title);
            
            $fcm->save();
            
            if ($redirect === null) $redirect = $page->url;
            $this->session->redirect($redirect);
        }
        return $form->render();
    }
    
    public function edit ($topic, $options = null) {
        $fcm = $this->modules->get('FrontendContentManager');
        
        $form = $fcm->createForm($topic, $options);
        
        if ($fcm->formProcess()) {
            $page = $fcm->edit($topic);
            
            // Manipulate page object outside...
            $page->name = $page->id . '-' . $this->sanitizer->pageName($page->title);
            
            $fcm->save();
            $this->session->redirect($topic->url);
        }
        return $form->render();
    }
  • Like 2

Share this post


Link to post
Share on other sites

Updated git and module repo to promised reworked version 0.0.3

FCM 0.0.2 isn't compatible to 0.0.3. It's redesigned.

Share this post


Link to post
Share on other sites

After some changes and improvements to FormHelper I'll start to update FCM too.

Most work to realize a page add / edit is done by FormHelper (create, modify, render, process form and also care about file / image upload). FCM brings FormHelper together with a create / save page functionality. 

Page save vs. field save 

Current version of FCM update all the fields and finally save the hole page. That's fine to save the all the changes done before.

But I think about a rewrite to a field save instead of a page save, because a "fieldSave" process module could be used stand alone to handle frontend page edit and also ajax based updates (an optional submodule...)? 

Any hints or suggestions about pro and cons?

Permission check

Access control was removed in the second dev version, but should be added optional to FCM again. It won't have it's one permission handling, but will use PW 

$page->editable() and $page->addable(). 

Your ideas and suggestions are welcome to improve the module ;)

Share this post


Link to post
Share on other sites

FCM has to be rewritten and isn't ready to use!

Do NOT use FCM module yet!

Share this post


Link to post
Share on other sites

Module is deprecated!

The current module code won't be supported or updated.

Share this post


Link to post
Share on other sites

At the moment I have no usage for FCM module, but after FormHelper 0.5.2 is finished I've done a quick FCM rewrite. Only few tests done yet!

  • Like 3

Share this post


Link to post
Share on other sites

Updated to work with FormHelper 0.7.1 / FormHelperExtra after redesign.

FCM is NOT ready to use!!! No value sanitizing without additional code (set a sanitizer to each field.

Share this post


Link to post
Share on other sites

FCM release 0.5.0 (no documentation at the moment... sorry!)

  • requires FormHelper
  • add / edit pages
  • default sanitizer based on field type (textarea or text) if no sanitizer is set to the field
  • skip fields
  • optional use admin form styles
  • file / image upload during page add (check input, page pre-save, set field values and add files and again save the page...)

usage / example

// load FCM
$fcm = $modules->get('FrontendContentManager');

// ADD a page to given parent with parent template
$output = $fcm->renderAdd($parentPage);

// or EDIT given page
$output = $fcm->renderEdit($pageToEdit);

// echo jsConfig inside the html head element
echo $fcm->JsConfig(); 

// outpunt needed scripts for inputfield modules, ... inside your html head element
foreach ($config->styles as $file) { echo "<link type='text/css' href='$file' rel='stylesheet' />\n"; } 
foreach ($config->scripts as $file) { echo "<script type='text/javascript' src='$file'></script>\n"; }

// echo $output inside your template / html body element
echo $output;

PW module repo: http://modules.processwire.com/modules/frontend-content-manager

GIT repo: https://bitbucket.org/pwFoo/frontendcontentmanager/src/

  • Like 4

Share this post


Link to post
Share on other sites

Just had a look at this module and tried to make it work. The only thing I see is a submit button. If i click it a new page will be created or (if i uncommented that for edit) the given page will be edited (or u get redirected to the page 1015 for example). But there are no fields at all to change anything. What did I do wrong?

Installed formhelper and this is my template:

<?php // load FCM
$fcm = $modules->get('FrontendContentManager');

// ADD a page to given parent with parent template
//$output = $fcm->renderAdd($pages->get('1015'));

// or EDIT given page
$output = $fcm->renderEdit($pages->get('1015'));

// echo jsConfig inside the html head element
echo $fcm->JsConfig(); 

// outpunt needed scripts for inputfield modules, ... inside your html head element
foreach ($config->styles as $file) { echo "<link type='text/css' href='$file' rel='stylesheet' />\n"; } 
foreach ($config->scripts as $file) { echo "<script type='text/javascript' src='$file'></script>\n"; }

// echo $output inside your template / html body element
echo $output; ?>

As you can see, I am trying to edit the page number 1015, which has a different template only with title and textarea field. And I was expecting to see those fields on the edit page, with the template written above.

Appreciate your help!

Share this post


Link to post
Share on other sites

Could you post your complete template file, please?

With this simple line I get a form with all fields of the template.

$fcm->add($pages->get('title=my-page-title'));

// OR
//renderAdd is a shortcut for add() + process() + render()
$fcm->renderAdd($pages->get('title=gfh'));

Get page by ID should also work (it needs a page object). The other params are optional.

Short edit / add tests with my dev setup show all the form fields.

Form should be processed and rendered before you output the results.

Share this post


Link to post
Share on other sites

I made a template for add new page. Page is added under home page.

<?php include('./_header.php'); ?>
<?php

// Load FormHelper module and also set wire('fh') variable
$fcm = $modules->get('FrontendContentManager');

// add a new page based on a template and a parent object
$parent = $pages->get('name=home');
$form = $fcm->add($parent, $parent->template);

// jsConfig needed by ckeditor
echo $fcm->JsConfig();

// outpunt needed scripts for inputfield modules, ...
foreach ($config->styles as $file) { echo "<link type='text/css' href='$file' rel='stylesheet' />\n"; }
foreach ($config->scripts as $file) { echo "<script type='text/javascript' src='$file'></script>\n"; }

?>
    <div class="uk-container uk-container-center">
        <h1><?php echo $page->title; ?></h1>
        <?php

        // output the forom
        echo $form;

        ?>
    </div>

<?php include('./_footer.php'); ?>

and only result I get is this. Any help?

https://www.dropbox.com/s/2mwtksa20qxs5bk/Screen%20Shot%202016-03-10%20at%2011.52.48.png?dl=0

  • Like 1

Share this post


Link to post
Share on other sites

From my side with the new version on PW 3.0.12 I see only the Submit button!!!

***EDIT***

I resolve this issue by adding the FormHelperExtra (testing!) Module

Share this post


Link to post
Share on other sites

Thanks for posting this. I don't use it. Dependency seems missing, but FormHelperExtra is needed here...

  • create a form object with fields based on Template, Page, Form objects or field data array
  • form file upload handling (temp page uploads, creation of a hidden storage page)

Share this post


Link to post
Share on other sites

The only other problem for now are the textarea sanitizer.

Its like the sanitize do not recognize the good type and put a text sanitize on a textarea and pass only 255 characters and not the 16384 for the textarea.

*****EDIT******

I finally found the problem... the class type in the module are "FieldTypeTextarea" but with multi-language the class type are "FieldTypeTextareaLanguage".

I will add the other Field type in the condition and all work fine.

Share this post


Link to post
Share on other sites

I found solution for one problem and now a other problem... :)

For the Textarea the CKEditor doesn't appear...

Share this post


Link to post
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 d'Hinnisdaël
      Happy new year, everybody 🥬
      I've been sitting on this Dashboard module I made for a client and finally came around to cleaning it up and releasing it to the wider public. This is how it looks.
      ProcessWire Dashboard

      If anyone is interested in trying this out, please go ahead! I'd love to get some feedback on it. If this proves useful and survives some real-world testing, I'll add this to the module directory.
      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
      My goal was to make it really 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.
       Disclaimer
      This is a pre-release version. Please treat it as such — don't install it on production sites. Just making sure 🍇
      Roadmap
      These are the things I'm looking to implement myself at some point. The wishlist is a lot longer, but those are the 80/20 items that I probably won't regret spending time on.
      Improve documentation & add examples ⚙️ Panel types Google Analytics ⚙️ Add new page  🔥 Drafts 🔥 At a glance / Page counter 404s  Layout options Render multiple tabs per panel panel groups with heading and spacing between ✅ panel wrappers as grid item (e.g. stacked notices) ✅ Admin themes support AdminThemeReno and AdminThemeDefault ✅ Shortcuts panel add a table layout with icon, title & summary ✅ Chart panel add default styles for common chart types ✅ load chart data from JS file (currently passed as PHP array) Collection panel support image columns ✅ add buttons: view all & add new ✅
    • By Pip
      Hi everyone!
      I'm trying out the Login/Register module for my site. Noted that the module assigns the newly registered user to login-register role. 
      Once you modify the login-register role's permissions, particularly adding page-edit, the new member role will be set to guest. 
      Thing is I'd like to grant my new users the power to create their own pages. Any advice? 
      Thanks. 
    • By Gadgetto
      SnipWire - Snipcart integration for ProcessWire
      Snipcart is a powerful 3rd party, developer-first HTML/JavaScript shopping cart platform. SnipWire is the missing link between Snipcart and the content management framework ProcessWire.
      With SnipWire, you can quickly turn any ProcessWire site into a Snipcart online shop. The SnipWire plugin helps you to get your store up and running in no time. Detailed knowledge of the Snipcart system is not required.
      SnipWire is free and open source licensed under Mozilla Public License 2.0! A lot of work and effort has gone into development. It would be nice if you could donate an amount to support further development:

      Status update links (inside this thread) for SnipWire development
      2020-07-03 -- SnipWire 0.8.7 (beta) released! Fixes some small bugs and adds an indicator for TEST mode 2020-04-06 -- SnipWire 0.8.6 (beta) released! Adds support for Snipcart subscriptions and also fixes some problems 2020-03-21 -- SnipWire 0.8.5 (beta) released! Improves SnipWires webhooks interface and provides some other fixes and additions 2020-03-03 -- SnipWire 0.8.4 (beta) released! Improves compatibility for Windows based Systems. 2020-03-01 -- SnipWire 0.8.3 (beta) released! The installation and uninstallation process has been heavily revised. 2020-02-08 -- SnipWire 0.8.2 (beta) released! Added a feature to change the cart and catalogue currency by GET, POST or SESSION param 2020-02-03 -- SnipWire 0.8.1 (beta) released! All custom classes moved into their own namespaces. 2020-02-01 -- SnipWire is now available via ProcessWire's module directory! 2020-01-30 -- SnipWire 0.8.0 (beta) first public release! (module just submitted to the PW modules directory) 2020-01-28 -- added Custom Order Fields feature (first SnipWire release version is near!) 2020-01-21 -- Snipcart v3 - when will the new cart system be implemented? 2020-01-19 -- integrated taxes provider finished (+ very flexible shipping taxes handling) 2020-01-14 -- new date range picker, discount editor, order notifiactions, order statuses, and more ... 2019-11-15 -- orders filter, order details, download + resend invoices, refunds 2019-10-18 -- list filters, REST API improvements, new docs platform, and more ... 2019-08-08 -- dashboard interface, currency selector, managing Orders, Customers and Products, Added a WireTabs, refinded caching behavior 2019-06-15 -- taxes provider, shop templates update, multiCURL implementation, and more ... 2019-06-02 -- FieldtypeSnipWireTaxSelector 2019-05-25 -- SnipWire will be free and open source Plugin Key Features
      Fast and simple store setup Full integration of the Snipcart dashboard into the ProcessWire backend (no need to leave the ProcessWire admin area) Browse and manage orders, customers, discounts, abandoned carts, and more Multi currency support Custom order and cart fields Process refunds and send customer notifications from within the ProcessWire backend Process Abandoned Carts + sending messages to customers from within the ProcessWire backend Complete Snipcart webhooks integration (all events are hookable via ProcessWire hooks) Integrated taxes provider (which is more flexible then Snipcart own provider) Useful Links
      SnipWire in PW modules directory SnipWire Docs (please note that the documentation is a work in progress) SnipWire @GitHub (feature requests and suggestions for improvement are welcome - I also accept pull requests) Snipcart Website  

       
      ---- INITIAL POST FROM 2019-05-25 ----
       
    • By Sten
      Hello
      Till now I hacked something with the twig template but it works no more with new PW versions so I look forward to create a module. I am working on a site in multiple languages : French, English, Italian, German, Spanish, Portuguese, Hebrew, Russian. The new posts are entered in any language with a field for language. Till now, I got twig files to get the translations with constants defined for each part of the pages.
      So I'd like to create a module to include theses files added according to the url /fr/en/...
      Have you some observations to do before I begin about the direction to take ?
      Thank you
    • By ukyo
      Mystique Module for ProcessWire CMS/CMF
      Github repo : https://github.com/trk/Mystique
      Mystique module allow you to create dynamic fields and store dynamic fields data on database by using a config file.
      Requirements
      ProcessWire 3.0 or newer PHP 7.0 or newer FieldtypeMystique InputfieldMystique Installation
      Install the module from the modules directory:
      Via Composer:
      composer require trk/mystique Via git clone:
      cd your-processwire-project-folder/ cd site/modules/ git clone https://github.com/trk/Mystique.git Module in live reaction with your Mystique config file
      This mean if you remove a field from your config file, field will be removed from edit screen. As you see on youtube video.
      Using Mystique with your module or use different configs path, autoload need to be true for modules
      Default configs path is site/templates/configs/, and your config file name need to start with Mystique. and need to end with .php extension.
      Adding custom path not supporting anymore !
      // Add your custom path inside your module class`init` function, didn't tested outside public function init() { $path = __DIR__ . DIRECTORY_SEPARATOR . 'configs' . DIRECTORY_SEPARATOR; Mystique::add($path); } Mystique module will search site/modules/**/configs/Mystique.*.php and site/templates/Mystique.*.php paths for Mystique config files.
      All config files need to return a PHP ARRAY like examples.
      Usage almost same with ProcessWire Inputfield Api, only difference is set and showIf usage like on example.
      <?php namespace ProcessWire; /** * Resource : testing-mystique */ return [ 'title' => __('Testing Mystique'), 'fields' => [ 'text_field' => [ 'label' => __('You can use short named types'), 'description' => __('In file showIf working like example'), 'notes' => __('Also you can use $input->set() method'), 'type' => 'text', 'showIf' => [ 'another_text' => "=''" ], 'set' => [ 'showCount' => InputfieldText::showCountChars, 'maxlength' => 255 ], 'attr' => [ 'attr-foo' => 'bar', 'attr-bar' => 'foo' ] ], 'another_text' => [ 'label' => __('Another text field (default type is text)') ] ] ]; Example:
      site/templates/configs/Mystique.seo-fields.php <?php namespace ProcessWire; /** * Resource : seo-fields */ return [ 'title' => __('Seo fields'), 'fields' => [ 'window_title' => [ 'label' => __('Window title'), 'type' => Mystique::TEXT, // or InputfieldText 'useLanguages' => true, 'attr' => [ 'placeholder' => __('Enter a window title') ] ], 'navigation_title' => [ 'label' => __('Navigation title'), 'type' => Mystique::TEXT, // or InputfieldText 'useLanguages' => true, 'showIf' => [ 'window_title' => "!=''" ], 'attr' => [ 'placeholder' => __('Enter a navigation title') ] ], 'description' => [ 'label' => __('Description for search engines'), 'type' => Mystique::TEXTAREA, 'useLanguages' => true ], 'page_tpye' => [ 'label' => __('Type'), 'type' => Mystique::SELECT, 'options' => [ 'basic' => __('Basic page'), 'gallery' => __('Gallery'), 'blog' => __('Blog') ] ], 'show_on_nav' => [ 'label' => __('Display this page on navigation'), 'type' => Mystique::CHECKBOX ] ] ]; Searching data on Mystique field is limited. Because, Mystique saving data to database in json format. When you make search for Mystique field, operator not important. Operator will be changed with %= operator.
      Search example
      $navigationPages = pages()->find('my_mystique_field.show_on_nav=1'); $navigationPages = pages()->find('my_mystique_field.page_tpye=gallery');
×
×
  • Create New...