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 %}
|
{% block body %}
|
||||||
<div class="ui fixed inverted menu">
|
<div class="ui fixed inverted menu">
|
||||||
|
<div class="ui container">
|
||||||
{{ knp_menu_render('mainMenu') }}
|
{{ 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>
|
</div>
|
||||||
{% block page %}
|
{% block page %}
|
||||||
<div class="ui main">
|
<div class="ui main">
|
||||||
@ -46,3 +58,23 @@
|
|||||||
{% endblock %}
|
{% endblock %}
|
||||||
</div>
|
</div>
|
||||||
{% endblock %}
|
{% 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