magicsuggest
Version:
MagicSuggest is a multiple selection auto-suggest input box for Bootstrap 3.
188 lines (169 loc) • 9.49 kB
HTML
<html lang="en">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="description" content="MagicSuggest is a multiple selection combo box built for bootstrap themes">
<meta name="author" content="Nicolas Bize">
<link rel="shortcut icon" href="http://nicolasbize.com/magicsuggest/assets/ico/favicon.ico">
<title>MagicSuggest - Tutorial</title>
<link href="lib/bootstrap/css/bootstrap.min.css" rel="stylesheet">
<link href="assets/css/custom.css" rel="stylesheet">
<link href="assets/lib/highlightjs/styles/default.css" rel="stylesheet">
<script type="text/javascript" src="assets/lib/highlightjs/highlight.pack.js"></script>
<script>hljs.initHighlightingOnLoad();</script>
<!-- HTML5 shim and Respond.js IE8 support of HTML5 elements and media queries -->
<!--[if lt IE 9]>
<script src="https://oss.maxcdn.com/libs/html5shiv/3.7.0/html5shiv.js"></script>
<script src="https://oss.maxcdn.com/libs/respond.js/1.4.2/respond.min.js"></script>
<![endif]-->
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>
<script src="lib/bootstrap/js/bootstrap.min.js"></script>
</head>
<body>
<a id="forkme_banner" href="https://github.com/nicolasbize/magicsuggest">View on GitHub</a>
<div class="site-wrapper">
<div class="site-wrapper-inner">
<div class="cover-container">
<div class="masthead clearfix">
<div class="inner">
<h3 class="masthead-brand">MagicSuggest</h3>
<ul class="nav masthead-nav">
<li><a href="index.html">Home</a></li>
<li><a href="examples.html">Examples</a></li>
<li><a href="doc.html">Documentation</a></li>
<li class="active"><a href="tutorial.html">Tutorial</a></li>
</ul>
</div>
</div>
</div>
<div class="tutorial">
<div class="container">
<h1>Tutorial Part Five</h1>
<p>Setting initial values and remote functions.</p>
<div class="row">
<div class="col-md-12">
<h3>Initialize with values</h3>
<p>A common scenario is to have some default or initial value set for the combo box. This is done by using the
<code>value</code> property. This property can either be set directly in the original <code>input</code> tag,
or it can be set within our <code>js/script.js</code> file during initialization. As the combo is currently set
to recognize country codes as IDs, we set those in our index.php file:</p>
<h3><code>index.php</code></h3>
<pre><code><!DOCTYPE html>
<html lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>MagicSuggest Tutorial</title>
<link href="lib/bootstrap/css/bootstrap.min.css" rel="stylesheet">
<link href="lib/magicsuggest/magicsuggest.css" rel="stylesheet">
<link rel="stylesheet" type="text/css" href="css/style.css">
</head>
<body>
<div class="container">
<h1>Hello, world!</h1>
<form action="subscribe.php" method="post">
<div class="form-group">
<label>First name</label>
<input class="form-control" name="firstname"/>
</div>
<div class="form-group">
<label>Last name</label>
<input class="form-control" name="lastname"/>
</div>
<div class="form-group">
<label>Countries</label>
<input id="ms" class="form-control" name="countries[]" value="[3,5,6,7,39]"/>
</div>
<input type="submit" class="btn btn-success pull-right" value="Submit"/>
</form>
</div>
<!-- jQuery (necessary for Bootstrap's JavaScript plugins) -->
<script src="lib/jquery/jquery-1.11.1.min.js"></script>
<!-- Include all compiled plugins (below), or include individual files as needed -->
<script src="lib/bootstrap/js/bootstrap.min.js"></script>
<script src="lib/magicsuggest/magicsuggest.js"></script>
<script src="js/script.js"></script>
</body>
</html></code></pre>
<p>Something interesting to note here is that when we are using an AJAX source to fetch the combo's results,
the component is required to make a request to retrieve the records we ask it for initialization. This is only
done when an inital value is set.</p>
<h3><code>js/script.js</code></h3>
<p>We make a small change to make it look nicer and display selections as a comma separated value string. Also, we
are now performing our sorting server-side in which we only want to look through country names.</p>
<pre><code>$(function() {
var ms = $('#ms').magicSuggest({
data: 'get_countries.php',
valueField: 'idCountry',
displayField: 'countryName',
groupBy: 'continentName',
mode: 'remote',
renderer: function(data){
return '<div class="country">' +
'<img src="img/flags/' + data.countryCode.toLowerCase() + '.png" />' +
'<div class="name">' + data.countryName + '</div>' +
'<div style="clear:both;"></div>' +
'<div class="prop">' +
'<div class="lbl">Population : </div>' +
'<div class="val">' + data.population + '</div>' +
'</div>' +
'<div class="prop">' +
'<div class="lbl">Capital : </div>' +
'<div class="val">' + data.capital + '</div>' +
'</div>' +
'<div style="clear:both;"></div>' +
'</div>';
},
resultAsString: true,
selectionRenderer: function(data){
return '<img src="img/flags/' + data.countryCode.toLowerCase() + '.png" />' +
'<div class="name">' + data.countryName + '</div>';
}
});
});</code></pre>
<h3><code>get_countries.php</code></h3>
<p>Every time the user types, a query parameter is sent to the server. The frequency of those sent messages is set
with the <code>typeDelay</code> parameter. Also <code>method</code> is default to <code>POST</code> but that
can be changed as well. See how we use the parameter to build our custom query and get exactly what we want. Now
if you type <code>par</code> it should only return <code>Paraguy</code> and not France who had Paris as Capital.</p>
<pre><code><?php
$mysql = new mysqli('localhost','root','root','magicsuggest', 8889);
$q = isset($_POST['query']) ? $mysql->real_escape_string($_POST['query']) : '';
$result = $mysql->query("select * from countries where countryName like '%" . $q ."%'");
$rows = array();
while($row = $result->fetch_array(MYSQL_ASSOC)) {
$rows[] = array_map("utf8_encode", $row);
}
echo json_encode($rows);
$result->close();
$mysql->close();
?>
</code></pre>
<div class="well">
<h4>Wrapping up...</h4>
<a href="tutorial/5.html">View the results</a><br/>
<a href="tutorial/5/5.zip">Download the files for the tutorial</a><br/>
<br/>
<p>That's all folks!</p>
</div>
</div>
</div>
</div>
</div>
<div style="height:200px"></div>
</div>
<script type="text/javascript">
var _gaq = _gaq || [];
_gaq.push(['_setAccount', 'UA-5470193-5']);
_gaq.push(['_trackPageview']);
(function() {
var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
})();
</script>
</body>
</html>