mirror of
https://github.com/ToxicCrack/PrintABrick.git
synced 2025-05-20 06:00:08 -07:00
Add search action
This commit is contained in:
parent
7e31eee729
commit
2942d1395e
@ -4,7 +4,19 @@
|
||||
|
||||
{% block body %}
|
||||
<div class="ui fixed inverted menu">
|
||||
{{ knp_menu_render('mainMenu') }}
|
||||
<div class="ui container">
|
||||
{{ knp_menu_render('mainMenu') }}
|
||||
|
||||
<div class="right menu">
|
||||
<div class="ui search item category right aligned">
|
||||
<div class="ui icon input transparent inverted">
|
||||
<input class="prompt" type="text" placeholder="Search..." >
|
||||
<i class="search icon"></i>
|
||||
</div>
|
||||
<div class="results transition"></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{% block page %}
|
||||
<div class="ui main">
|
||||
@ -46,3 +58,23 @@
|
||||
{% endblock %}
|
||||
</div>
|
||||
{% endblock %}
|
||||
|
||||
{% block javascripts %}
|
||||
{{ parent() }}
|
||||
|
||||
<script type="text/javascript">
|
||||
$('.ui.search')
|
||||
.search({
|
||||
type: 'category',
|
||||
apiSettings: {
|
||||
action: 'search',
|
||||
url: '{{ path('search_autocomplete')}}?query={query}',
|
||||
},
|
||||
minCharacters : 3,
|
||||
fields: {
|
||||
title: 'title',
|
||||
url: 'url'
|
||||
}
|
||||
});
|
||||
</script>
|
||||
{% endblock %}
|
@ -1,25 +0,0 @@
|
||||
{% extends 'base.html.twig' %}
|
||||
|
||||
{% block content %}
|
||||
|
||||
<div class="ui seven column grid">
|
||||
<div class="row">
|
||||
{% for part in parts %}
|
||||
<div class="column">
|
||||
<div class="ui fluid bordered image">
|
||||
<a href="{{ path('reb_part_detail', {number: part.number}) }}">
|
||||
<div class="image load">
|
||||
<img src="{{ part.number|partImage(-1)| imagine_filter('rebrickable_part_min') }}" data-src="{{ part.number|partImage(-1)| imagine_filter('rebrickable_part_min') }}" class="transition visible">
|
||||
</div>
|
||||
<div class="ui bottom attached label {{ part.model == null ? 'black' : 'red'}}">{{ part.number }}</div>
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
{% endfor %}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<p>{{ parts.getTotalItemCount }}</p>
|
||||
|
||||
{{ knp_pagination_render(parts) }}
|
||||
{% endblock %}
|
20
app/Resources/views/search/index.html.twig
Normal file
20
app/Resources/views/search/index.html.twig
Normal file
@ -0,0 +1,20 @@
|
||||
{% extends 'base.html.twig' %}
|
||||
|
||||
{% block title %}{% endblock %}
|
||||
|
||||
{% block header %}{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
<div class="ui seven column grid">
|
||||
<div class="row">
|
||||
{% for set in sets %}
|
||||
<div class="column">
|
||||
<a href="{{ url('set_detail', {'number': set.number}) }}">
|
||||
<img class="ui bordered image medium" src="{{ set.number|setImage|imagine_filter('rebrickable_set_min') }}">
|
||||
<p>{{ set.number }} - {{ set.name }}</p>
|
||||
</a>
|
||||
</div>
|
||||
{% endfor %}
|
||||
</div>
|
||||
</div>
|
||||
{% endblock %}
|
81
src/AppBundle/Controller/SearchController.php
Normal file
81
src/AppBundle/Controller/SearchController.php
Normal file
@ -0,0 +1,81 @@
|
||||
<?php
|
||||
|
||||
namespace AppBundle\Controller;
|
||||
|
||||
use AppBundle\Entity\LDraw\Model;
|
||||
use AppBundle\Entity\Rebrickable\Set;
|
||||
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
|
||||
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
|
||||
use Symfony\Component\HttpFoundation\JsonResponse;
|
||||
use Symfony\Component\HttpFoundation\Request;
|
||||
|
||||
/**
|
||||
* Search controller.
|
||||
*
|
||||
* @Route("search")
|
||||
*/
|
||||
class SearchController extends Controller
|
||||
{
|
||||
/**
|
||||
* @Route("/", name="search_result")
|
||||
*/
|
||||
public function searchAction(Request $request)
|
||||
{
|
||||
$query = trim(strip_tags($request->get('query')));
|
||||
|
||||
$modelsResult = $this->get('repository.ldraw.model')->findByQuery($query);
|
||||
$setsResult = $this->get('repository.rebrickable.set')->findByQuery($query);
|
||||
|
||||
return $this->render('search/index.html.twig', [
|
||||
'sets' => $setsResult,
|
||||
'models' => $modelsResult,
|
||||
]);
|
||||
}
|
||||
|
||||
/**
|
||||
* @Route("/autocomplete", name="search_autocomplete")
|
||||
*/
|
||||
public function autocompleteAction(Request $request)
|
||||
{
|
||||
$query = trim(strip_tags($request->get('query')));
|
||||
|
||||
$modelsResult = $this->get('repository.ldraw.model')->findByQuery($query,7);
|
||||
|
||||
$models = [];
|
||||
/** @var Model $model */
|
||||
foreach ($modelsResult as $model) {
|
||||
$models[] = [
|
||||
'title' => $model->getNumber().' '.$model->getName(),
|
||||
'url' => $this->generateUrl('model_detail',['number' => $model->getNumber()]),
|
||||
];
|
||||
}
|
||||
|
||||
$setsResult = $this->get('repository.rebrickable.set')->findByQuery($query,7);
|
||||
|
||||
$sets = [];
|
||||
/** @var Set $set */
|
||||
foreach ($setsResult as $set) {
|
||||
$sets[] = [
|
||||
'title' => $set->getNumber().' '.$set->getName(),
|
||||
'url' => $this->generateUrl('set_detail',['number' => $set->getNumber()]),
|
||||
];
|
||||
}
|
||||
|
||||
$response = new JsonResponse();
|
||||
$response->setData([
|
||||
'results' => [
|
||||
'category' => [
|
||||
'name' => 'Sets',
|
||||
'results' => $sets,
|
||||
],
|
||||
'category1' => [
|
||||
'name' => 'Models',
|
||||
'results' => $models,
|
||||
]
|
||||
]
|
||||
]);
|
||||
|
||||
|
||||
return $response;
|
||||
}
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user