Magento에서 URL 재작성
게시 됨: 2014-09-11모든 웹사이트가 SEO 목적을 위해 친숙한 URL을 갖는 것이 매우 중요합니다. 그러나 특히 모듈을 설치할 때 Magento에서 생성하는 것이 항상 쉬운 것은 아닙니다. 비기술적 사용자로서 이 문제를 어떻게 해결할 수 있습니까? Magento에서 URL 재작성을 위한 2가지 실행 가능한 솔루션을 제공하고 원하는 대로 적절한 URL을 생성합니다. 더 이상 큰 문제가 되지 않을 것입니다.
더운!! Claue 버전 2.0이 출시되었습니다.
데모 보기
Claue – 깨끗하고 최소한의 Magento 2&1 테마 는 40개 이상의 홈페이지 레이아웃과 상점, 블로그, 포트폴리오, 상점 찾기 레이아웃 및 기타 유용한 페이지에 대한 수많은 옵션이 있는 현대적이고 깨끗한 전자 상거래 상점을 위한 훌륭한 템플릿입니다. Claue 버전 2.0에는 다음과 같은 독점 기능이 포함되어 있습니다.
- Luma 테마를 기반으로 합니다.
- Magento 테마의 모든 기준 충족
- 상당한 성능 향상
- 대부분의 타사 확장과 호환됩니다.
- Magento 2.4.x와 완벽하게 호환
이 두 번째 고급 버전은 이전 버전과 완전히 다릅니다. 따라서 Claue 버전 1을 사용 중이고 Claue 버전 2로 업데이트하려는 경우 이전 버전에서 업데이트하는 대신 새 웹사이트를 다시 빌드하는 것만 가능합니다. 이제 본론으로 돌아가자
2가지 솔루션에 접근하기 전에 기본 URL이 생성되는 방법과 일부 복구를 해치는 전제 조건을 설명하는 예를 보여줍니다. 예. Blog라는 이름의 Blog 모듈을 만들었으며 그 네임스페이스는 다음과 같은 간단한 필드가 있는 MGS입니다.
ID | 제목 | 설명 |
백엔드에서 게시물을 만들 때 두 개의 필드를 삽입해야 합니다. 제목 및 설명. 게시물의 ID는 자동으로 생성됩니다. 블로그의 게시물 세부 정보를 표시하기 위해 라우터(config.xml 파일에 선언, 블로그 선언), 컨트롤러(index라는 이름을 지정하여 폴더 컨트롤러의 IndexControler.php 파일이 됨), 작업(뷰라고 함)에 의존합니다. , 파일 IndexControler.php의 viewAction 함수) 및 게시물의 ID입니다.
따라서 프런트 엔드에 있는 게시물의 기본 URL은 다음과 같습니다.
http://domain.com/blog/index/view/id/1 (1은 게시물의 ID)
우리가 볼 수 있는 한 이 URL은 SEO에 전혀 좋지 않습니다. URL 친화적으로 바뀌도록 다시 작성해야 합니다. 주요 목적으로 돌아가서, 우리는 URL 친화적인 생성을 위해 2가지 방법을 제안했습니다. 그리고 어느 쪽이든 원하는 URL을 정의해야 하거나 URL을 생성하는 일반적인 규칙을 따라야 합니다(일반적으로 우리는 게시물 제목을 사용하고 모든 문자를 일반 스타일로 변환하고 빈 공간을 -로 대체합니다. 예: 제목 " How to rewrite url in Magento "는 " how-to-rewrite-url-in-magento.xml"이 됩니다.
이 기사에서는 URL 정의 접근 방식을 사용할 것이므로 위의 데이터베이스에 하나의 필드를 추가하여 URL을 저장합니다.
ID | 제목 | 설명 | URL |
따라서 게시물의 URL이 채워집니다.
URL 재작성 첫 번째 기술
Magento의 URL 재작성 기능을 이용하시면 카탈로그 -> URL 재작성 관리에서 보다 자세한 내용을 보실 수 있습니다.
여기에서 Magento가 카테고리 및 제품에 대한 URL 재작성을 저장하는 모듈을 생성한다는 것을 알 수 있습니다. Magento에서는 "Add Url Rewrite"를 클릭하여 다음을 사용하여 사용자 지정 URL 재작성을 추가함으로써 URL 재작성을 추가할 수도 있습니다.
대상 경로: 게시물의 URL입니다(예: 블로그/색인/보기/id/1
요청 경로 : 예를 들어 삽입할 URL 재작성입니다. 방법 재작성 url-in-magento.html
분명히 우리는 URL 재작성을 저장하기 위해 이 정보를 수동으로 추가하지 않을 것입니다. 대신 코어 모듈의 url_rewrite 모델(Mage::getModel('core/url_rewrite'))을 활용하여 블로그 데이터를 저장한 후 core_url_rewrite 테이블에 블로그 URL을 저장합니다.
블로그에 게시물을 저장한 후 다음 코드를 사용하여 URL 재작성을 저장합니다.
Mage::getModel('core/url_rewrite') ->setIsSystem(true) ->setIdPath('blog/index/view/id/'.$blogId) ->setTargetPath('blog/index/view/id/'.$blogId) ->setRequestPath($url) ->save();
참고: $blogId는 저장 후 블로그의 id이고 $url은 사용자가 정의한 URL입니다.
참고로 위의 명령어는 새 글에 적용되며, 기존 글을 수정하려면 이 기록을 업데이트 해야 합니다.
URL을 다시 작성하는 두 번째 기술
여전히 블로그 모듈과 위에서 언급한 동일한 데이터 필드를 사용하여 제목, 설명, URL의 적절한 데이터를 포함하여 백엔드에 게시물을 작성합니다.
config.xml(app/code/local/MGS/Blog/etc)로 이동합니다.
전역 태그 내:
<global> … </global>
다음 코드 추가
<events> <controller_front_init_routers> <observers> <blog_custom_router> <class>MGS_Blog_Controller_Router</class> <method>initControllerRouters</method> </blog_custom_router> </observers> </controller_front_init_routers> </events>
app/code/local/MGS/Blog 모듈의 기본 폴더에 Controller라는 다른 폴더를 만든 다음 아래 내용으로 Router.php 라는 파일을 만듭니다.
<?php class MGS_Blog_Controller_Router extends Mage_Core_Controller_Varien_Router_Abstract { /** * Initialize Controller Router * * @param Varien_Event_Observer $observer */ public function initControllerRouters($observer) { /* @var $front Mage_Core_Controller_Varien_Front */ $front = $observer->getEvent()->getFront(); $front->addRouter('blog', $this); } /** * Validate and Match Cms Page and modify request * * @param Zend_Controller_Request_Http $request * @return bool */ public function match(Zend_Controller_Request_Http $request) { if (!Mage::isInstalled()) { Mage::app()->getFrontController()->getResponse() ->setRedirect(Mage::getUrl('install')) ->sendResponse(); exit; } $identifier = trim($request->getPathInfo(), '/'); $condition = new Varien_Object(array( 'identifier' => $identifier, 'continue' => true )); if ($condition->getRedirectUrl()) { Mage::app()->getFrontController()->getResponse() ->setRedirect($condition->getRedirectUrl()) ->sendResponse(); $request->setDispatched(true); return true; } if (!$condition->getContinue()) { return false; } $collection = Mage::getModel('blog/blog') ->getCollection(); if(count($collection)>0){ foreach($collection as $post){ if($identifier == $post->getUrl()){ $request->setModuleName('blog'); $request->setControllerName('index'); $request->setActionName('view'); $request->setParam('id', $post->getId()); return true; } } } } }
위의 코드는 다음을 의미합니다.
예를 들어 브라우저에 경로를 입력하는 경우:
http://domain.com/how-to-rewrite-url-in-magento.
이 함수는 경로: how-to-rewrite-url-in-magento.html 을 블로그 데이터 테이블의 url과 비교합니다.
경로가 db에 있는 레코드의 URL 필드와 유사한 경우 4개의 명령줄:
$request->setModuleName('blog'); $request->setControllerName('index'); $request->setActionName('view'); $request->setParam('id', $post->getId());
URL이 router: blog, controller: index, action: view에 해당하고 id는 URL이 브라우저의 경로와 동일한 레코드의 id임을 시스템이 이해하는 데 도움이 됩니다.
예. URL how-to-rewrite-url-in-magento.html과 id 1이 있는 레코드를 만든 다음:
http://domain.com/how-to-rewrite-url-in-magento.html
에 해당한다
http://domain.com/blog/index/view/id/1
이것이 Magento 에서 URL 친화적인 문제를 해결하기 위해 권장하는 두 가지 솔루션입니다. 도움이 되셨기를 바랍니다. 귀하의 의견과 기사에 대한 추가 기여에 감사드립니다.
시간 내주셔서 감사합니다!
메이지솔루션 지원팀!