mirror of
https://github.com/TryGhost/Ghost.git
synced 2024-11-27 10:42:45 +03:00
Merge pull request #1533 from jgillich/permalinks
Add Customisable Permalinks
This commit is contained in:
commit
7db5481f92
@ -4,7 +4,11 @@
|
||||
//id:0 is used to issue PUT requests
|
||||
Ghost.Models.Settings = Ghost.ProgressModel.extend({
|
||||
url: Ghost.settings.apiRoot + '/settings/?type=blog,theme',
|
||||
id: '0'
|
||||
id: '0',
|
||||
parse: function (resp) {
|
||||
resp.permalinks = resp.permalinks === "/:slug/" ? "" : "1";
|
||||
return resp;
|
||||
}
|
||||
});
|
||||
|
||||
}());
|
||||
}());
|
||||
|
@ -54,6 +54,13 @@
|
||||
<p>How many posts should be displayed on each page</p>
|
||||
</div>
|
||||
|
||||
<div class="form-group">
|
||||
<label for="permalinks">Dated Permalinks</label>
|
||||
<input id="permalinks" name="general[permalinks]" type="checkbox" value="1" {{#if permalinks}}checked{{/if}}>
|
||||
<label class="checkbox" for="permalinks"></label>
|
||||
<p>Include date in your post's links</p>
|
||||
</div>
|
||||
|
||||
<div class="form-group">
|
||||
<label for="activeTheme">Theme</label>
|
||||
<select id="activeTheme" name="general[activeTheme]">
|
||||
@ -66,4 +73,4 @@
|
||||
|
||||
</fieldset>
|
||||
</form>
|
||||
</section>
|
||||
</section>
|
||||
|
@ -157,7 +157,8 @@
|
||||
title = this.$('#blog-title').val(),
|
||||
description = this.$('#blog-description').val(),
|
||||
email = this.$('#email-address').val(),
|
||||
postsPerPage = this.$('#postsPerPage').val();
|
||||
postsPerPage = this.$('#postsPerPage').val(),
|
||||
permalinks = this.$('#permalinks').is(':checked') ? "/:year/:month/:day/:slug/" : "/:slug/";
|
||||
|
||||
Ghost.Validate._errors = [];
|
||||
Ghost.Validate
|
||||
@ -185,7 +186,8 @@
|
||||
description: description,
|
||||
email: email,
|
||||
postsPerPage: postsPerPage,
|
||||
activeTheme: this.$('#activeTheme').val()
|
||||
activeTheme: this.$('#activeTheme').val(),
|
||||
permalinks: permalinks
|
||||
}, {
|
||||
success: this.saveSuccess,
|
||||
error: this.saveError
|
||||
|
@ -65,7 +65,7 @@ frontendControllers = {
|
||||
});
|
||||
},
|
||||
'single': function (req, res, next) {
|
||||
api.posts.read({'slug': req.params.slug}).then(function (post) {
|
||||
api.posts.read(_.pick(req.params, ['id', 'slug'])).then(function (post) {
|
||||
if (post) {
|
||||
ghost.doFilter('prePostsRender', post).then(function (post) {
|
||||
var paths = ghost.paths().availableThemes[ghost.settings('activeTheme')];
|
||||
|
@ -44,6 +44,14 @@
|
||||
"notNull": true,
|
||||
"isIn": ["true", "false"]
|
||||
}
|
||||
},
|
||||
"permalinks": {
|
||||
"defaultValue": "/:slug/",
|
||||
"validations": {
|
||||
"is": "^(/:?[a-z]+){1,}/$",
|
||||
"regex": "(:id|:slug)",
|
||||
"notContains": "/ghost/"
|
||||
}
|
||||
}
|
||||
},
|
||||
"theme": {
|
||||
|
@ -80,14 +80,27 @@ coreHelpers.pageUrl = function (context, block) {
|
||||
// i.e. If inside a post context will return post permalink
|
||||
// absolute flag outputs absolute URL, else URL is relative
|
||||
coreHelpers.url = function (options) {
|
||||
var output = '';
|
||||
var output = '',
|
||||
self = this,
|
||||
tags = {
|
||||
year: function () { return self.created_at.getFullYear(); },
|
||||
month: function () { return self.created_at.getMonth() + 1; },
|
||||
day: function () { return self.created_at.getDate(); },
|
||||
slug: function () { return self.slug; },
|
||||
id: function () { return self.id; }
|
||||
};
|
||||
|
||||
if (options && options.hash.absolute) {
|
||||
output += coreHelpers.ghost.config().url;
|
||||
}
|
||||
|
||||
if (models.isPost(this)) {
|
||||
output += '/' + this.slug + '/';
|
||||
output += coreHelpers.ghost.settings('permalinks');
|
||||
output = output.replace(/(:[a-z]+)/g, function (match) {
|
||||
if (_.has(tags, match.substr(1))) {
|
||||
return tags[match.substr(1)]();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
return output;
|
||||
|
@ -1,4 +1,7 @@
|
||||
var frontend = require('../controllers/frontend');
|
||||
var frontend = require('../controllers/frontend'),
|
||||
Ghost = require('../../ghost'),
|
||||
|
||||
ghost = new Ghost();
|
||||
|
||||
module.exports = function (server) {
|
||||
// ### Frontend routes
|
||||
@ -6,6 +9,6 @@ module.exports = function (server) {
|
||||
server.get('/rss/', frontend.rss);
|
||||
server.get('/rss/:page/', frontend.rss);
|
||||
server.get('/page/:page/', frontend.homepage);
|
||||
server.get('/:slug/', frontend.single);
|
||||
server.get(ghost.settings('permalinks'), frontend.single);
|
||||
server.get('/', frontend.homepage);
|
||||
};
|
||||
};
|
||||
|
@ -277,7 +277,7 @@ describe('Core Helpers', function () {
|
||||
});
|
||||
|
||||
it('should return a the slug with a prefix slash if the context is a post', function () {
|
||||
var rendered = helpers.url.call({html: 'content', markdown: "ff", title: "title", slug: "slug"});
|
||||
var rendered = helpers.url.call({html: 'content', markdown: "ff", title: "title", slug: "slug", created_at: new Date(0)});
|
||||
should.exist(rendered);
|
||||
rendered.should.equal('/slug/');
|
||||
});
|
||||
@ -288,7 +288,7 @@ describe('Core Helpers', function () {
|
||||
}),
|
||||
|
||||
rendered = helpers.url.call(
|
||||
{html: 'content', markdown: "ff", title: "title", slug: "slug"},
|
||||
{html: 'content', markdown: "ff", title: "title", slug: "slug", created_at: new Date(0)},
|
||||
{hash: { absolute: 'true'}}
|
||||
);
|
||||
|
||||
|
@ -10,7 +10,7 @@ var _ = require('underscore'),
|
||||
'featured', 'image', 'status', 'language', 'author_id', 'created_at', 'created_by', 'updated_at', 'updated_by',
|
||||
'published_at', 'published_by', 'page', 'author', 'user', 'tags'],
|
||||
// TODO: remove databaseVersion
|
||||
settings: ['databaseVersion', 'title', 'description', 'email', 'logo', 'cover', 'defaultLang',
|
||||
settings: ['databaseVersion', 'title', 'description', 'email', 'logo', 'cover', 'defaultLang', "permalinks",
|
||||
'postsPerPage', 'forceI18n', 'activeTheme', 'activePlugins', 'installedPlugins', 'availableThemes'],
|
||||
tag: ['id', 'uuid', 'name', 'slug', 'description', 'parent_id',
|
||||
'meta_title', 'meta_description', 'created_at', 'created_by', 'updated_at', 'updated_by'],
|
||||
|
Loading…
Reference in New Issue
Block a user