Example file: example6.php
It is important that we are able to save a page as a draft and when we finish working with the page, we can publish it online. Next time when you re-edit the page, visitors will see the online version, not your currently working (draft) version.
For this purpose, we will make our existing pages table as a draft storage. And we create another table named pages_published as published pages storage.
The table pages_published will have the following fields:
Every time we publish a page, a new record is inserted into the pages_published table. The previous published page will be set to archive (archived=1). So there can only be one published record (archived=0) for each page. Visitors will see the data from this record.
Now we can perform a checking. If a user is logged-in (authorized for editing), we select data from the pages table. If a user is not logged-in, we select data from the pages_published table.
if($authorized){
$sql = 'SELECT * FROM pages where filename=:filename';
$s = $pdo->prepare($sql);
$s->bindValue(':filename', $filename);
$s->execute();
if($row = $s->fetch()) {
$id = $row['id'];
$title = $row['title'];
$description = $row['description'];
$content = $row['content'];
$css = $row['css'];
$js = $row['js'];
}
} else {
$sql = 'SELECT * FROM pages_published WHERE filename=:filename AND archived=false';
$s = $pdo->prepare($sql);
$s->bindValue(':filename', $filename);
$s->execute();
if($row = $s->fetch()) {
$id = $row['pageid'];
$title = $row['title'];
$description = $row['description'];
$content = $row['content'];
$css = $row['css'];
$js = $row['js'];
}
}
To publish a page, we modify our GridlessBuilder.js initialization.
var obj = new GridlessBuilder({
wrapper: '.is-wrapper',
onSave: function() {
savePage();
},
onSaveAndFinish: function() {
savePage(true); // publish=true
}
});
Here we use the onSaveAndFinish event to do the publishing process. In the onSaveAndFinish function, we call our savePage() method, but this time we pass a true value to the function to indicate that it is for publishing.
We modify our savePage() method as follows:
function savePage(publish) {
ui.showInfo('Saving..');
var data = {};
data.post_id = <?php echo $id; ?>;
data.post_content = obj.html();
data.post_styles = obj.styles();
data.post_js = obj.js();
if(publish) data.post_publish = 1; // publish
else data.post_publish = 0; // save draft
...
}
The savePage method now has a publish parameter. If publish is true, data.post_publish value is set 1. This will tell our server side code to not just save the content, but also insert a new record into our pages_published table.
Here is our PHP code for publishing the page:
// Archive current online version
$sql = 'UPDATE pages_published SET archived=true WHERE pageid=:pageid';
$s = $pdo->prepare($sql);
$s->bindValue(':pageid', $id);
$s->execute();
// Insert new online version
$sql = 'INSERT INTO pages_published (pageid,filename,title,description,content,css,js,archived,dateupdated)
VALUES (:pageid,:filename,:title,:description,:content,:css,:js,false,:dateupdated)';
$s = $pdo->prepare($sql);
$s->bindValue(':pageid', $id);
$s->bindValue(':filename', $filename);
$s->bindValue(':title', $title);
$s->bindValue(':description', $description);
$s->bindValue(':content', $content);
$s->bindValue(':css', $css);
$s->bindValue(':js', $js);
$s->bindValue(':dateupdated', $dateupdated->format('Y-m-d H:i:s'));
$s->execute();
First, it sets the the current page records to archive. Then, it inserts a new record where the archived field is set to false (online version).
For the complete code and to try the example, please open example6.php.
http://localhost/mysite/example6.php?edit=y
Now we see a ‘Save & Finish’ button displayed. Clicking this button will trigger the onSaveAndFinish event that saves and publishes the page..
About | Privacy | Delivery & Return
Copyright © 2021 Insite Mitra Inovindo. All Rights Reserved.