Implemented suggestions for product field contents
based on existing contents of the same field on other products. Also changed datalist IDs to be more descriptive
This commit is contained in:
parent
bb8666a2d7
commit
45eb32c70b
@ -117,7 +117,7 @@
|
||||
<h2>Mallar</h2>
|
||||
<form class="dark templates"
|
||||
onSubmit="JavaScript:loadTemplate(event)">
|
||||
<datalist id="templatelist"></datalist>
|
||||
<datalist id="template_suggest"></datalist>
|
||||
<input type="hidden"
|
||||
name="page"
|
||||
value="products" />
|
||||
@ -125,7 +125,7 @@
|
||||
name="action"
|
||||
value="new" />
|
||||
<input onFocus="JavaScript:suggest(this, 'template')"
|
||||
list="templatelist"
|
||||
list="template_suggest"
|
||||
autocomplete="off"
|
||||
type="text"
|
||||
name="template"
|
||||
@ -150,8 +150,8 @@
|
||||
<input type="hidden"
|
||||
name="id"
|
||||
value="¤id¤" />
|
||||
<datalist id="fieldlist"></datalist>
|
||||
<datalist id="taglist"></datalist>
|
||||
<datalist id="field_suggest"></datalist>
|
||||
<datalist id="tag_suggest"></datalist>
|
||||
<table>
|
||||
<tfoot>
|
||||
<tr>
|
||||
@ -177,7 +177,11 @@
|
||||
<td>
|
||||
<input type="text"
|
||||
name="name"
|
||||
value="¤name¤" />
|
||||
value="¤name¤"
|
||||
onFocus="JavaScript:suggestContent(this)"
|
||||
list="name_suggest"
|
||||
autocomplete="off" />
|
||||
<datalist id="name_suggest"></datalist>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
@ -187,7 +191,11 @@
|
||||
<td>
|
||||
<input type="text"
|
||||
name="brand"
|
||||
value="¤brand¤" />
|
||||
value="¤brand¤"
|
||||
onFocus="JavaScript:suggestContent(this)"
|
||||
list="brand_suggest"
|
||||
autocomplete="off" />
|
||||
<datalist id="brand_suggest"></datalist>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
@ -215,7 +223,7 @@
|
||||
<td>
|
||||
<input onKeyPress="JavaScript:addField(event)"
|
||||
onFocus="JavaScript:suggest(this, 'field')"
|
||||
list="fieldlist"
|
||||
list="field_suggest"
|
||||
autocomplete="off"
|
||||
class="newfield"
|
||||
type="text"
|
||||
@ -237,7 +245,7 @@
|
||||
¤tags¤
|
||||
<input onKeyPress="JavaScript:addTag(event)"
|
||||
onFocus="JavaScript:suggest(this, 'tag')"
|
||||
list="taglist"
|
||||
list="tag_suggest"
|
||||
autocomplete="off"
|
||||
class="newtag"
|
||||
type="text"
|
||||
@ -301,7 +309,11 @@
|
||||
<input type="text"
|
||||
class="info_item"
|
||||
name="¤key¤"
|
||||
value="¤value¤" />
|
||||
value="¤value¤"
|
||||
onFocus="JavaScript:suggestContent(this)"
|
||||
list="¤key¤_suggest"
|
||||
autocomplete="off" />
|
||||
<datalist id="¤key¤_suggest"></datalist>
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
@ -447,7 +459,7 @@
|
||||
<form class="dark"
|
||||
action="./"
|
||||
method="GET">
|
||||
<datalist id="userlist"></datalist>
|
||||
<datalist id="user_suggest"></datalist>
|
||||
<input type="hidden"
|
||||
name="page"
|
||||
value="checkout" />
|
||||
@ -458,7 +470,7 @@
|
||||
<input onFocus="JavaScript:suggest(this, 'user')"
|
||||
type="text"
|
||||
name="user"
|
||||
list="userlist"
|
||||
list="user_suggest"
|
||||
autocomplete="off"
|
||||
placeholder="Användarnamn"
|
||||
value="¤user¤"
|
||||
|
@ -51,6 +51,9 @@ class Ajax extends Responder {
|
||||
case 'suggest':
|
||||
$out = $this->suggest();
|
||||
break;
|
||||
case 'suggestcontent':
|
||||
$out = $this->suggest_content();
|
||||
break;
|
||||
case 'discardproduct':
|
||||
$out = $this->discard_product();
|
||||
break;
|
||||
@ -339,6 +342,10 @@ class Ajax extends Responder {
|
||||
return new Success(suggest($_POST['type']));
|
||||
}
|
||||
|
||||
private function suggest_content() {
|
||||
return new Success(suggest_content($_POST['fieldname']));
|
||||
}
|
||||
|
||||
private function discard_product() {
|
||||
$product = new Product($_POST['id']);
|
||||
if(!$product->get_discardtime()) {
|
||||
|
@ -218,6 +218,37 @@ function suggest($type) {
|
||||
return $out;
|
||||
}
|
||||
|
||||
function suggest_content($fieldname) {
|
||||
$search = '';
|
||||
$resultfield = $fieldname;
|
||||
switch($fieldname) {
|
||||
case 'name':
|
||||
$search = prepare('select distinct `name`
|
||||
from `product` order by `name`');
|
||||
break;
|
||||
case 'brand':
|
||||
$search = prepare('select distinct `brand`
|
||||
from `product` order by `brand`');
|
||||
break;
|
||||
default:
|
||||
$search = prepare("select distinct `data` from `product_info`
|
||||
where `field` = ? order by `data`");
|
||||
bind($search, 's', $fieldname);
|
||||
$resultfield = 'data';
|
||||
}
|
||||
$out = array();
|
||||
execute($search);
|
||||
try {
|
||||
$results = result_list($search);
|
||||
} catch(Exception $e) {
|
||||
return array();
|
||||
}
|
||||
foreach($results as $row) {
|
||||
$out[] = $row[$resultfield];
|
||||
}
|
||||
return $out;
|
||||
}
|
||||
|
||||
function match($testvalues, $matchvalues) {
|
||||
# match only presence of field (if no value given)
|
||||
if(!$testvalues && $matchvalues) {
|
||||
|
18
script.js
18
script.js
@ -201,7 +201,7 @@ function suggest(input, type) {
|
||||
break
|
||||
}
|
||||
var render = function(result) {
|
||||
var suggestlist = document.querySelector('#' + type + 'list')
|
||||
var suggestlist = input.list
|
||||
while(suggestlist.firstChild) {
|
||||
suggestlist.removeChild(suggestlist.firstChild)
|
||||
}
|
||||
@ -223,6 +223,22 @@ function suggest(input, type) {
|
||||
ajaxRequest('suggest', [['type', type]], render)
|
||||
}
|
||||
|
||||
function suggestContent(input) {
|
||||
var render = function(result) {
|
||||
var suggestlist = input.list
|
||||
while(suggestlist.firstChild) {
|
||||
suggestlist.removeChild(suggestlist.firstChild)
|
||||
}
|
||||
var suggestions = result.message
|
||||
for(var i = 0; i < suggestions.length; i++) {
|
||||
var next = document.createElement('option')
|
||||
next.value = suggestions[i]
|
||||
suggestlist.appendChild(next)
|
||||
}
|
||||
}
|
||||
ajaxRequest('suggestcontent', [['fieldname', input.name]], render)
|
||||
}
|
||||
|
||||
function addField(event) {
|
||||
if(event.key && event.key != "Enter") {
|
||||
return
|
||||
|
Loading…
x
Reference in New Issue
Block a user