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

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

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.


  • Recently Browsing   0 members

    No registered users viewing this page.

  • Similar Content

    • 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-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 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 (alpha version only available via GitHub) 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 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 Robin S
      This module is inspired by and similar to the Template Stubs module. The author of that module has not been active in the PW community for several years now and parts of the code for that module didn't make sense to me, so I decided to create my own module. Auto Template Stubs has only been tested with PhpStorm because that is the IDE that I use.
      Auto Template Stubs
      Automatically creates stub files for templates when fields or fieldgroups are saved.
      Stub files are useful if you are using an IDE (e.g. PhpStorm) that provides code assistance - the stub files let the IDE know what fields exist in each template and what data type each field returns. Depending on your IDE's features you get benefits such as code completion for field names as you type, type inference, inspection, documentation, etc.
      Installation
      Install the Auto Template Stubs module.
      Configuration
      You can change the class name prefix setting in the module config if you like. It's good to use a class name prefix because it reduces the chance that the class name will clash with an existing class name.
      The directory path used to store the stub files is configurable.
      There is a checkbox to manually trigger the regeneration of all stub files if needed.
      Usage
      Add a line near the top of each of your template files to tell your IDE what stub class name to associate with the $page variable within the template file. For example, with the default class name prefix you would add the following line at the top of the home.php template file:
      /** @var tpl_home $page */ Now enjoy code completion, etc, in your IDE.

      Adding data types for non-core Fieldtype modules
      The module includes the data types returned by all the core Fieldtype modules. If you want to add data types returned by one or more non-core Fieldtype modules then you can hook the AutoTemplateStubs::getReturnTypes() method. For example, in /site/ready.php:
      // Add data types for some non-core Fieldtype modules $wire->addHookAfter('AutoTemplateStubs::getReturnTypes', function(HookEvent $event) { $extra_types = [ 'FieldtypeDecimal' => 'string', 'FieldtypeLeafletMapMarker' => 'LeafletMapMarker', 'FieldtypeRepeaterMatrix' => 'RepeaterMatrixPageArray', 'FieldtypeTable' => 'TableRows', ]; $event->return = $event->return + $extra_types; }); Credits
      Inspired by and much credit to the Template Stubs module by mindplay.dk.
       
      https://github.com/Toutouwai/AutoTemplateStubs
      https://modules.processwire.com/modules/auto-template-stubs/
    • By Mike Rockett
      Jumplinks for ProcessWire
      Release: 1.5.60
      Composer: rockett/jumplinks
      ⚠️ NOTICE: 1.5.60 is an important security patch-release for an XSS vulnerability discovered by @phlp. It's HIGHLY RECOMMENDED that all Jumplinks users update to the latest version as soon as possible.
      Jumplinks is an enhanced version of the original ProcessRedirects by Antti Peisa.
      The Process module manages your permanent and temporary redirects (we'll call these "jumplinks" from now on, unless in reference to redirects from another module), useful for when you're migrating over to ProcessWire from another system/platform. Each jumplink supports wildcards, shortening the time needed to create them.
      Unlike similar modules for other platforms, wildcards in Jumplinks are much easier to work with, as Regular Expressions are not fully exposed. Instead, parameters wrapped in curly braces are used - these are described in the documentation.
      Under Development: 2.0, to be powered by FastRoute
      As of version 1.5.0, Jumplinks requires at least ProcessWire 2.6.1 to run.
      View on GitLab
      Download via the Modules Directory
      Read the docs
      Features
      The most prominent features include:
      Basic jumplinks (from one fixed route to another) Parameter-based wildcards with "Smart" equivalents Mapping Collections (for converting ID-based routes to their named-equivalents without the need to create multiple jumplinks) Destination Selectors (for finding and redirecting to pages containing legacy location information) Timed Activation (activate and/or deactivate jumplinks at specific times) 404-Monitor (for creating jumplinks based on 404 hits) Additionally, the following features may come in handy:
      Stale jumplink management Legacy domain support for slow migrations An importer (from CSV or ProcessRedirects) Feedback & Feature Requests
      I’d love to know what you think of this module. Please provide some feedback on the module as a whole, or even regarding smaller things that make it whole. Also, please feel free to submit feature requests and their use-cases.
      Note: Features requested so far have been added to the to-do list, and will be added to 2.0, and not the current dev/master branches.
      Open Source

      Jumplinks is an open-source project, and is free to use. In fact, Jumplinks will always be open-source, and will always remain free to use. Forever. If you would like to support the development of Jumplinks, please consider making a small donation via PayPal.
      Enjoy! 🙂
    • By Robin S
      Add Image URLs
      Allows images/files to be added to Image/File fields by pasting URLs.

      Usage
      Install the Add Image URLs module.
      A "Paste URLs" button will be added to all image and file fields. Use the button to show a textarea where URLs may be pasted, one per line. Images/files are added when the page is saved.
       
      https://github.com/Toutouwai/AddImageUrls
      https://modules.processwire.com/modules/add-image-urls/
×
×
  • Create New...