Jump to content

Recommended Posts

Posted

Hi there, I have an issue with my code where when it goes to save the page - it saves it using an ugly unix time stamp.

Example: /lost-property/2016-05-25-13-40-16/

What I am wanting to do is instead of saving as timestamp, I'd like to use the id of the page.  

/lost-property/42854


My code is

<? if ($input->post->lp_date) {

// Save in the ProcessWire page tree; map submission to the template fields
$np = new Page(); // create new page object
$np->template = $templates->get("lost-property");
$np->parent = $pages->get("/lost-property/");

// Send all form submissions through ProcessWire sanitization
$lp_date = $sanitizer->text($input->post->lp_date);
$lp_type = $sanitizer->text ($input->post->lp_type);
$lp_city = $sanitizer->text($input->post->lp_city);
$lp_row = $sanitizer->text($input->post->lp_row);
$lp_item = $sanitizer->text($input->post->lp_item);
$lp_description = $sanitizer->text($input->post->lp_description);
$lp_contactname = $sanitizer->text($input->post->lp_contactname);
$lp_contact = $sanitizer->text($input->post->lp_contact);
$lp_ro = $sanitizer->text($input->post->lp_ro);
$lp_status = $sanitizer->text($input->post->lp_status);

// Match up the sanitized inputs we just got with the template fields
$np->of(false);
$np->title = $title;
$np->lp_type = $lp_type;
$np->lp_date = $lp_date;
$np->lp_city = $lp_city;
$np->lp_row = $lp_row;
$np->lp_item = $lp_item;
$np->lp_description = $lp_description;
$np->lp_contactname = $lp_contactname;
$np->lp_contact = $lp_contact;
$np->lp_ro = $lp_ro;
$np->lp_status = 'open'; // Set the status to 1 (confrimed )

// Save/create the page
$np->save(); ?>
Posted
$np->title = $title;

Where does the $title variable come from in your code? You don't show where it is set.

To set the URL you want to set the name of your page.

$np->name = 'something';

If you don't set a name (as in your code) the name is generated automatically from the title.

If you are setting a name from a variable you can pass it through $sanitizer->name($my_variable) to make sure it is a valid name.

In your case you want to set the name to the same as the page ID. But when you are first creating your page the ID doesn't exist until you save it.

So you can do something like this:

$np = new Page(); // create new page object
$np->template = $templates->get("lost-property");
$np->parent = $pages->get("/lost-property/");
$np->title = 'my title';
$np->save(); // save the page so you can get its ID
$np->name = $np->id;
// set your other page fields
$np->save();
  • Like 6
Posted

For reference, you can also make sure this happens when a page is saved in the admin as well.

<?php

class AdminHelperHooks extends WireData implements Module {

    public static function getModuleInfo() {
        return array(
            'title' => 'Admin Helper Hooks',
            'version' => 1,
            'singular' => true,
            'autoload' => true
        );
    }

    public function init() {
        $this->addHookAfter('Pages::saveReady', $this, 'hookChangeNameToID');
    }

    public function hookChangeNameToID(HookEvent $event){
        $page = $event->arguments(0); // get the page being saved
        if ($page->template == 'lost-property'){ // check the template
            $page->name = $page->id;
        }
    }
}
  • Like 5
  • 2 weeks later...

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.
×
×
  • Create New...