1

我正在使用 symfony 4.4 开发一个电子商务网站。我在页面中心有一个部分,id="projects"因此您必须向下滚动才能到达它。此部分是使用我的 ProductRepository 中的 knp paginator 构建的,以使其与搜索表单一起使用,并且该部分的某些部分是指向另一个页面的链接,该页面也具有您必须滚动到的产品部分。我想附加#projects到 URL 以将用户向下滚动到该部分,但我不知道如何按照 knp paginator 构建页面的方式执行此操作。

我试图将 #projects 附加到 twitter_bootstrap_v4_pagination.html.twig (我在 knp_paginator.yaml 中定义的模板)中的路径,但是当我这样做时,分页器不再工作并且#projects不会附加到 url .

    {% if pageCount > 1 %}
        <nav>
            {% set classAlign = (align is not defined) ? '' : align=='center' ? ' justify-content-center' : (align=='right' ? ' justify-content-end' : '') %}
            {% set classSize = (size is not defined) ? '' : size=='large' ? ' pagination-lg' : (size=='small' ? ' pagination-sm' : '') %}
            <ul class="pagination{{ classAlign }}{{ classSize }}">
    
                {% if previous is defined %}
                    <li class="page-item">
                        <a  class="page-link" rel="prev" href="{{ path(route, query|merge({(pageParameterName): previous})) }}#projects">&laquo;&nbsp;{{ 'label_previous'|trans({}, 'KnpPaginatorBundle') }}</a>
                    </li>
                {% else %}
                    <li class="page-item disabled">
                        <span class="page-link">&laquo;&nbsp;{{ 'label_previous'|trans({}, 'KnpPaginatorBundle') }}</span>
                    </li>
                {% endif %}
    
                {% if startPage > 1 %}
                    <li class="page-item">
                        <a class="page-link" href="{{ path(route, query|merge({(pageParameterName): 1})) }}#projects">1</a>
                    </li>
                    {% if startPage == 3 %}
                        <li class="page-item">
                            <a class="page-link" href="{{ path(route, query|merge({(pageParameterName): 2})) }}#projects">2</a>
                        </li>
                    {% elseif startPage != 2 %}
                        <li class="page-item disabled">
                            <span class="page-link">&hellip;</span>
                        </li>
                    {% endif %}
                {% endif %}
    
                {% for page in pagesInRange %}
                    {% if page != current %}
                        <li class="page-item">
                            <a class="page-link" href="{{ path(route, query|merge({(pageParameterName): page})) }}#projects">{{ page }}</a>
                        </li>
                    {% else %}
                        <li class="page-item active">
                            <span class="page-link">{{ page }}</span>
                        </li>
                    {% endif %}
    
                {% endfor %}
    
                {% if pageCount > endPage %}
                    {% if pageCount > (endPage + 1) %}
                        {% if pageCount > (endPage + 2) %}
                            <li class="page-item disabled">
                                <span class="page-link">&hellip;</span>
                            </li>
                        {% else %}
                            <li class="page-item">
                                <a class="page-link" href="{{ path(route, query|merge({(pageParameterName): (pageCount - 1)})) }}#projects">{{ pageCount -1 }}</a>
                            </li>
                        {% endif %}
                    {% endif %}
                    <li class="page-item">
                        
                    </li>
                {% endif %}
    
                {% if next is defined %}
                    <li class="page-item">
                        <a class="page-link" rel="next" href="{{ path(route, query|merge({(pageParameterName): next})) }}#projects">{{ 'label_next'|trans({}, 'KnpPaginatorBundle') }}&nbsp;&raquo;</a>
                    </li>
                {% else %}
                    <li  class="page-item disabled">
                        <span class="page-link">{{ 'label_next'|trans({}, 'KnpPaginatorBundle') }}&nbsp;&raquo;</span>
                    </li>
                {% endif %}
            </ul>
        </nav>
    {% endif %}

例如,如果我更改#projects为 index.html.twig 中不存在的另一个 ID,#randomId则分页器工作正常,并且 URL 更改为“http://127.0.0.1:8000/home?page=2#randomId” ,但这并不能解决我的问题。

注意:我也尝试手动将 url 更改为http://127.0.0.1:8000/home?page=2#projects并且它有效。我不知道为什么它不接受 index.html.twig 中的现有 id。

如果需要这里是控制器:

<?php

namespace App\Controller;
use App\Data\SearchData;
use App\Entity\Contact;
use App\Entity\ContactDevis;
use App\Entity\Evv;
use App\Form\ContactType;
use App\Form\ContactDevisType;
use App\Form\SearchForm;
use App\Repository\ProduitRepository;
use App\Repository\EvvRepository;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;


/**
  * @Route("/")
  */
class EnoveController extends AbstractController
{
    /**
      * @Route("/home", name="enove_index", methods={"GET","POST"})
      */
    public function index(ProduitRepository $produitRepository, EvvRepository $evvRepository, Request $request , Request $request_contact, Request $request_devis, \Swift_Mailer $mailer)
    {
        $contact = new Contact();
        $contactdevis = new ContactDevis();
        $data = new SearchData();
        $evv = new Evv();
        $data->page = $request->get('page',1);
        $form_filter = $this->createForm(SearchForm::class, $data);
        $form_filter->handleRequest($request);
        
        
        //dd($data);
        $evv = $evvRepository->findAll();
        $produit = $produitRepository->findSearch($data);
        $form_contact = $this->createForm(ContactType::class, $contact);
        $form_contact->handleRequest($request_contact);
        
        if($form_contact->isSubmitted() && $form_contact->isValid())
        {
            $contact = $form_contact->getData();
            $this->addFlash('success', 'votre email à été acheminer à Enove');
            $message = (new \Swift_Message('Nouveau contact'))
                // On attribue l'expéditeur
                ->setFrom($contact->getEmail())
                // On attribue le destinataire
                ->setTo('zwayten111@gmail.com')
                // On crée le texte avec la vue
                ->setBody(
                    $this->renderView(
                        'emails/contact.html.twig', compact('contact')
                    ),
                    'text/html'
                )
            ;
            $mailer->send($message);
            return $this->redirectToRoute('enove_index' ,
            [
                'produits' => $produit,
                'form_filter' => $form_filter->createView(),
                'evvs' =>$evv,
            ] );
        }
        $form_devis = $this->createForm(ContactDevisType::class, $contactdevis);
        $form_devis->handleRequest($request_devis);

        if($form_devis->isSubmitted() && $form_devis->isValid())
        {
            $contactdevis = $form_devis->getData();
            $this->addFlash('success', 'votre email à été acheminer à Enove');
            $message2 = (new \Swift_Message('Devis'))
                // On attribue l'expéditeur
                ->setFrom($contactdevis->getEmail())
                // On attribue le destinataire
                ->setTo('zwayten111@gmail.com')
                // On crée le texte avec la vue
                ->setBody(
                    $this->renderView(
                        'emails/contact_devis.html.twig', compact('contactdevis')
                    ),
                    'text/html'
                )
            ;
            $mailer->send($message2);
            //dd($contactdevis);
            return $this->redirectToRoute('enove_index' ,
            [
                'produits' => $produit,
                'form_filter' => $form_filter->createView(),
                'evvs' =>$evv,
            ] );
        }
        //dump($request->request);

        return $this->render(
                            'FrontEndEnove/index.html.twig',
                            [
                                'produits' => $produit,
                                'form_filter' => $form_filter->createView(),
                                'form_contact' => $form_contact->createView(),
                                'form_devis' => $form_devis->createView(),
                                'evvs' => $evv,
                            ]
                            );

    }
}
4

1 回答 1

0

那么在我的情况下,我改变了ProductRpository添加这个

$query = $query->getQuery();
    
    $pagination = $this->paginator->paginate($query,$search->page,6);
    $pagination->setParam('_fragment', 'projects');
   return $pagination;

问题仍然存在,猜猜我在模板中有什么问题,jQuery 迫使它回到顶部,我只需要删除它。

于 2020-07-31T19:57:36.607 回答