-
Notifications
You must be signed in to change notification settings - Fork 2
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Sonja Broda
committed
Mar 2, 2019
0 parents
commit 46f8fbb
Showing
8 changed files
with
412 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,20 @@ | ||
# This file is for unifying the coding style for different editors and IDEs | ||
# editorconfig.org | ||
|
||
[*] | ||
charset = utf-8 | ||
indent_style = space | ||
indent_size = 2 | ||
end_of_line = lf | ||
insert_final_newline = true | ||
trim_trailing_whitespace = true | ||
|
||
[*.php] | ||
indent_size = 4 | ||
|
||
[*.md,*.txt] | ||
trim_trailing_whitespace = false | ||
insert_final_newline = false | ||
|
||
[composer.json] | ||
indent_size = 4 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,8 @@ | ||
# OS files | ||
.DS_Store | ||
|
||
# npm modules | ||
/node_modules | ||
|
||
# Composer files | ||
/vendor |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,152 @@ | ||
![GitHub release](https://img.shields.io/github/release/texnixe/kirby3-similar.svg?maxAge=1800) ![License](https://img.shields.io/github/license/mashape/apistatus.svg) ![Kirby 3 Pluginkit](https://img.shields.io/badge/Pluginkit-YES-cca000.svg) | ||
|
||
# Kirby Similar | ||
|
||
Kirby 3 Similar is a [Kirby CMS](https://getkirby.com) plugin that lets you find items related to the current item based on similarity between fields. For each given field, the plugin calculates the Jaccard Index and then weighs all indices based on the factor for each field. | ||
|
||
Example use case: | ||
The current page has a tags field with three values (red, green, blue). You want to find all sibling pages with a minimum Jaccard Index of 0.3. | ||
|
||
## Commercial Usage | ||
|
||
This plugin is free but if you use it in a commercial project please consider | ||
|
||
- [making a donation](https://www.paypal.me/texnixe/10) or | ||
- [buying a Kirby license using this affiliate link](https://a.paddle.com/v2/click/1129/38380?link=1170) | ||
|
||
## How is it different from the Kirby 3 Related plugin | ||
|
||
- It allows you to pass multiple fields as an array with a factor for each field, depending on the importance of this field for determining the similarity. | ||
- The similarity is calculated according to the Jaccard Index, rather than by the number of matches as in the Kirby 3 Related plugin. | ||
|
||
A quick example that describes the difference: | ||
|
||
**Example 1:** | ||
|
||
Page A: blue, green | ||
Page B: blue, green | ||
|
||
Matches: 2 | ||
Jaccard Index: 2/2 = 1 | ||
|
||
**Example 2:** | ||
|
||
Page A: blue, green, yellow | ||
Page B: blue, green | ||
|
||
Matches: 2 | ||
Jaccard Index: 2/3 = 0.66666 | ||
|
||
While both pages have the same number of matches, the Jaccard Index is lower in the second example, because the number of unique tags is taken into account as well. | ||
|
||
|
||
## Installation | ||
|
||
### Download | ||
|
||
[Download the files](https://github.com/texnixe/kirby3-related/archive/master.zip) and place them inside `site/plugins/kirby-similar`. | ||
|
||
### Git Submodule | ||
You can add the plugin as a Git submodule. | ||
|
||
$ cd your/project/root | ||
$ git submodule add https://github.com/texnixe/kirby3-similar.git site/plugins/kirby-similar | ||
$ git submodule update --init --recursive | ||
$ git commit -am "Add Kirby Similar plugin" | ||
|
||
Run these commands to update the plugin: | ||
|
||
$ cd your/project/root | ||
$ git submodule foreach git checkout master | ||
$ git submodule foreach git pull | ||
$ git commit -am "Update submodules" | ||
$ git submodule update --init --recursive | ||
|
||
|
||
## Usage | ||
|
||
### Similar pages | ||
``` | ||
<?php | ||
$similarPages = $page->similar($options); | ||
foreach($similarPages as $p) { | ||
echo $p->title(); | ||
} | ||
``` | ||
|
||
### Similar files | ||
|
||
``` | ||
<?php | ||
$similarImages = $image->similar($options); | ||
foreach($similarImages as $image) { | ||
echo $image->filename(); | ||
} | ||
``` | ||
|
||
### Options | ||
|
||
You can pass an array of options: | ||
|
||
``` | ||
<?php | ||
$similarPages = $page->similar([ | ||
'index' => $page->siblings(false)->visible(), | ||
'fields' => 'tags', | ||
'threshold' => 0.2, | ||
'delimiter' => ',', | ||
'languageFilter' => false | ||
]); | ||
?> | ||
``` | ||
#### index | ||
|
||
The collection to search in. | ||
Default: `$item->siblings()` | ||
|
||
#### fields | ||
|
||
The name of the field to search in. | ||
Default: tags | ||
|
||
You can pass either a single field as string, or an array of fields with a factor that serves as multiplier: | ||
|
||
``` | ||
fields => ['tags' => 1, 'size' => 1.5, 'category' => 3] | ||
``` | ||
|
||
You can change the factor to get better results when filtering collections. For example, if the above is your standard field setting, you might want to change it when a filter paramter is set to size: | ||
|
||
``` | ||
fields => ['tags' => 0.5, 'size' => 2, 'category' => 3] | ||
``` | ||
|
||
**Note that the factor is required when using multiple fields, even if you want to set the factor to the same value for each field. You can't set a simple array of fields.** | ||
|
||
#### delimiter | ||
|
||
The delimiter that you use to separate values in a field | ||
Default: , | ||
|
||
#### threshold | ||
|
||
The minimum Jaccard Index, i.e. a value between 0 (no similarity) and 1 (full similarity) | ||
Default: 0.1 | ||
|
||
#### languageFilter | ||
|
||
Filter similar items by language in a multi-language installation. | ||
Default: false | ||
|
||
|
||
## License | ||
|
||
Kirby 3 Similar is open-sourced software licensed under the MIT license. | ||
|
||
Copyright © 2019 Sonja Broda [email protected] https://sonjabroda.com |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,21 @@ | ||
{ | ||
"name": "texnixe/similar", | ||
"description": "Find similar pages or files based on similarities between fields", | ||
"version": "0.9.0", | ||
"type": "kirby-plugin", | ||
"license": "MIT", | ||
"authors": [ | ||
{ | ||
"name": "Sonja Broda", | ||
"email": "[email protected]" | ||
} | ||
], | ||
"keywords": [ | ||
"kirby3", | ||
"kirby3-cms", | ||
"kirby3-plugin" | ||
], | ||
"require": { | ||
"getkirby/composer-installer": "^1.1" | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,18 @@ | ||
<?php | ||
|
||
namespace texnixe\Similar; | ||
|
||
return [ | ||
'page.update:after' => function() { | ||
Similar::flush(); | ||
}, | ||
'page.create:after' => function() { | ||
Similar::flush(); | ||
}, | ||
'file.create:after' => function() { | ||
Similar::flush(); | ||
}, | ||
'page.update:after' => function() { | ||
Similar::flush(); | ||
} | ||
]; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,43 @@ | ||
<?php | ||
|
||
namespace texnixe\Similar; | ||
/** | ||
* Kirby 3 Similar Plugin | ||
* | ||
* @version 0.9.0 | ||
* @author Sonja Broda <[email protected]> | ||
* @copyright Sonja Broda <[email protected]> | ||
* @link https://github.com/texnixe/kirby3-similar | ||
* @license MIT | ||
*/ | ||
|
||
load([ | ||
'texnixe\\similar\\similar' => 'src/Similar.php' | ||
], __DIR__); | ||
|
||
\Kirby::plugin('texnixe/similar', [ | ||
'options' => [ | ||
'cache' => true, | ||
'expires' => (60*24*7), // minutes | ||
'defaults' => [ | ||
'fields' => 'tags', | ||
'threshold' => 0.1, | ||
'delimiter' => ',', | ||
'languageFilter' => false, | ||
] | ||
], | ||
'pageMethods' => [ | ||
'similar' => function (array $options = []) { | ||
return Similar::getSimilar($this, $options); | ||
} | ||
], | ||
'fileMethods' => [ | ||
'similar' => function (array $options = []) { | ||
return Similar::getSimilar($this, $options); | ||
} | ||
], | ||
'hooks' => require 'config/hooks.php' | ||
]); | ||
|
||
|
||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,12 @@ | ||
{ | ||
"name": "kirby-similar", | ||
"description": "Kirby 3 Similar plugin", | ||
"author": "Sonja Broda <[email protected]>", | ||
"license": "MIT", | ||
"version": "0.9.0", | ||
"repository": { | ||
"type": "git", | ||
"url": "https://github.com/texnixe/kirby3-similar" | ||
}, | ||
"type": "kirby-plugin" | ||
} |
Oops, something went wrong.