Jump to content

Saving the URL as page->id


Matt Cohen
 Share

Recommended Posts

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(); ?>
Link to comment
Share on other sites

$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
Link to comment
Share on other sites

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
Link to comment
Share on other sites

  • 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
 Share

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...