您需要按 id 显示类别;现在类别按字母顺序显示。如何实现按id输出?
编码:
类别输出
{% for child in categories %}
<div class="b-block-grid__item">
<a class="b-category-link" href="{{ child.getAbsoluteUrl() }}">
{% if child.image %}
<img src="{{ child.image|imagine_filter('rise_category_thumb') }}"
class="b-category-link__image"/>
{% else %}
<span class="b-category-link__image b-category-link__image_noimage"></span>
{% endif %}
<span class="b-category-link__name">{{ child }}</span>
</a>
</div>
{% endfor %}
控制器
class ProductController extends Controller
{
public function searchAction(Request $request)
{
$searchForm = $this->createForm(SearchForm::class, [], [
'method' => 'GET'
]);
if ($searchForm->handleRequest($request) && $searchForm->isValid()) {
$q = $searchForm->get('q')->getData();
$qs = Product::objects()
->published()
->filter(new QOr([
['name__icontains' => $q],
['sku__icontains' => $q],
['content__icontains' => $q],
]));
$pager = $this->createPagination($qs, [
'pageSize' => 12,
]);
return $this->render('rise/product/search.html', [
'products' => $pager->paginate(),
'pager' => $pager->createView(),
'search_form' => $searchForm->createView(),
]);
} else {
return $this->render('rise/product/search.html', [
'search_form' => $searchForm->createView(),
]);
}
}
public function autocompleteAction(Request $request)
{
$searchForm = $this->createForm(SearchForm::class, [], [
'method' => 'GET'
]);
$products = [];
if ($searchForm->handleRequest($request) && $searchForm->isValid()) {
$q = $searchForm->get('q')->getData();
$products = Product::objects()->published()->master()
->filter(new QOr([
['name__icontains' => $q],
['sku__icontains' => $q],
['content__icontains' => $q]
]))->limit(20)->all();
}
return $this->render('rise/product/_autocomplete.html', [
'products' => $products
]);
}
protected function getCollections(Category $category = null)
{
$qs = Collection::objects();
if ($category) {
$qs->filter(['categories__id__in' => $category->id]);
}
return $qs->all();
}
public function indexAction(Request $request)
{
$categories = Category::objects()->order(['name'])->all();
$filter = $request->query->get('filter', []);
$filterForm = $this->createForm(FilterFormType::class, $filter, [
'action' => $this->generateUrl('admin_rise_product_list')
]);
return $this->render('rise/product/index.html', [
'categories' => $categories,
'filterForm' => $filterForm->createView(),
]);
}
public function listAction(Request $request, $slug = null)
{
$category = null;
if ($slug !== null) {
$category = Category::objects()->get(['slug' => $slug]);
if (null === $category) {
throw new NotFoundHttpException();
}
}
$qs = Product::objects()->published();
if ($category) {
$qs->filter(['category__id' => $category->id]);
}
if ($request->query->has('order')) {
$sourceOrder = $request->query->get('order');
if (false === empty($sourceOrder) && in_array($sourceOrder, ['', 'price', '-price'])) {
$qs->order([$sourceOrder]);
}
}
$filter = $request->query->get('filter', []);
$filterForm = $this->createForm(FilterFormType::class, $filter, [
'category' => $category,
]);
$filterForm->handleRequest($request);
if ($filterForm->isSubmitted()) {
$this->get('rise.bundle.product.filter.product')->filterQuerySet($filterForm->getData(), $qs);
}
$pager = $this->createPagination($qs, [
'pageSize' => 12,
]);
$collections = $this->getCollections();
if ($request->isXmlHttpRequest()) {
return $this->render('rise/product/_list.html', [
'products' => $pager->paginate(),
'pager' => $pager->createView(),
'category' => $category,
'collections' => $collections,
'filterForm' => $filterForm->createView(),
]);
} else {
return $this->render('rise/product/list.html', [
'products' => $pager->paginate(),
'pager' => $pager->createView(),
'category' => $category,
'collections' => $collections,
'filterForm' => $filterForm->createView(),
]);
}
}
public function viewAction(Request $request, $slug)
{
$product = Product::objects()->published()->get(['slug' => $slug]);
if ($product === null) {
throw new NotFoundHttpException();
}
$history = $this->get('rise.bundle.product.component.product_history');
$history->add($product);
$related = $product->related->all();
$review = new Review(['product' => $product]);
$reviewForm = $this->createForm(ReviewForm::class, $review, [
'method' => 'POST',
'action' => $this->generateUrl('rise_product_view', ['slug' => $slug])
]);
if ($reviewForm->handleRequest($request) && $reviewForm->isValid()) {
$review = $reviewForm->getData();
if (false === $review->save()) {
throw new \RuntimeException('Failed to save review');
}
$this->get('event_dispatcher')->dispatch(
ReviewEvent::EVENT_NAME,
new ReviewEvent($review)
);
$this->addFlash('success', 'Спасибо за ваш отзыв! Мы опубликуем его после проверки.');
return $this->redirect($request->getRequestUri());
}
$reviewPager = $this->createPagination($product->reviews->filter(['is_published' => true]));
return $this->render('rise/product/view.html', [
'product' => $product,
'images' => $product->getImages(),
'related' => $related,
'reviews' => $reviewPager->paginate(),
'review_pager' => $reviewPager->createView(),
'review_form' => $reviewForm->createView(),
'collections' => $product->collection->all(),
]);
}
}
在这里,在这种方法中:
这是按名称排序的。只需通过 ID 进行操作,然后,我会在需要的地方以同样的方式提供。
我说的是一条线
$categories = Category::objects()->order(['name'])->all();