2012-07-30 2 views
2

저는 실제로 마젠코코드 내에서 소셜 네트워크 공유를 통합해야 할 필요성에 대해 고객과 논의 중입니다.Magento - 제품을 미리보기하지만 구매하려면 로그인해야합니다.

고객은 사용자가 Facebook에서 제품을 공유하고 로그인하지 않은 사용자에게 제품의 "미리보기"를 허용하기를 원하지만 (페이스 북 자체를 통해 링크를 따라갈 수 있음) 로그인을 요구합니다 항목을 구입할 수 있습니다.

전체 사이트에 대한 로그인을 사용하지 않도록 설정하고 (Google에서 색인을 생성하는 가장 좋은 방법이기도 한) 결제에만 필요하다고 말했지만, 기록되지 않은 항목에 대한 미리보기를 만들어달라고 요청했습니다. 사용자는 '장바구니에 추가'버튼을 보려면 로그인해야합니다.

쉽게 할 수 있습니까? 그만한 가치가 있니? 나는 여전히 최선의 해결책은 체크 아웃을 위해서만 로그인을 요구할 것이라고 생각하고있다.

미리보기를 표시 할 수있는 링크/데모가 있습니까? 그렇다면 로그인이 필요합니까? 실제로 이베이가 로그인하지 않은 사용자에게 물건을 보여주는 방식에 대해 생각하고 있습니다.

답변

11

이전에 제안한대로 Mage::getSingleton('customer/session')->isLoggedIn()으로 템플릿을 버리지 않도록 노력하십시오.

만 제품보기 카트 기능을, 당신이 필요로 여러분 모두 약간의 레이아웃 XML은을 추가 처리해야하는 경우

...

<customer_logged_out> 
    <remove name="product.info.addtocart" /> 
</customer_logged_out> 

, 좋은 깨끗하고 편리합니다.

그러나 제품 크기, 제품보기, 제품 목록 등을 처리해야한다면 catalog_product_is_salable_after에 가입하는 옵서버를 만드는 것이 좋습니다. 이 이벤트는 Mage_Catalog_Model_Product isSalable에 대한 각 호출 후에 놀랍지 않게 해고됩니다. 따라서 고객이 로그인하지 않으면 제품을 판매 할 수 없도록 강제 할 수 있습니다.

분명히 모듈을 만들어야하지만, IMO는 최선의 선택이며 가치있는 약간의 노력을 기울일 가치가 있습니다.

class Yourcompany_Yourmodule_Model_Observer 
{ 
    public function catalog_product_is_salable_after(Varien_Event_Observer $observer) 
    { 
     if (! Mage::helper('customer')->isLoggedIn()) { 
      $observer->getEvent()->getData('salable') 
       ->setData('is_salable', false); 
     } 
    } 
} 
+1

:

<events> <catalog_product_is_salable_after> <observers> <yourmodule> <class>Yourcompany_Yourmodule_Model_Observer</class> <method>catalog_product_is_salable_after</method> </yourmodule> </observers> </catalog_product_is_salable_after> </events> 

귀하의 관찰자가 다음이 필요합니다 :

그래서, 관찰자를 만들기 위해, 당신은 당신의 config.xml 파일의 프론트 엔드 노드에 다음을 추가해야합니다 레이아웃 변경은 유용한 팁입니다. 심지어 그것이 존재한다는 것을 결코 알지 못했다. 감사! – Ovidiu

+0

이 위대한 팁에 감사드립니다! –

0

테마의 view.phtml에서 조건을 쉽게 추가 할 수 있습니다. 응용 프로그램 \ 디자인 \ 프론트 엔드 \ 기본 [테마] \ 템플릿 \ 카탈로그 \ 제품 \ view.phtml

상태 :

$ this-> 도우미 ('고객') -> isLoggedIn()

<?php if($_product->isSaleable() && $this->helper('customer')->isLoggedIn()): ?> 
         <?php echo $this->getChildHtml('addtocart') ?> 
         <?php /* // OVIDIU remove 'or if($this->helper('wishlist')->isAllow() || $_compareUrl=$this->helper('catalog/product_compare')->getAddUrl($_product)): ?> 
          <span class="or"><?php echo $this->__('OR') ?></span> 
         <?php endif; */ ?> 
        <?php endif; ?> 

같은 논리에 따라 list.phtml도 수정하십시오. ENDIF를 사용하여 라인 52 만

<?php if($_product->isSaleable()): ?> 

위 라인 (66) 주위 : 위치 /template/catalog/product/view/type/simple.phtml :

파일 - :

-1

이 시도

<?php endif; ?> 

그래서 전체 거래는 라인 (52) 주변이 시작처럼 보이는 직후 (내 태그를 편집주의) :

<!--edit--> 
<?php if(Mage::getSingleton('customer/session')->isLoggedIn()): ?> 
<!--/edit--> 
<?php if($_product->isSaleable()): ?> 
    <fieldset class="add-to-cart-box"> 
     <legend><?php echo $this->__('Add Items to Cart') ?></legend> 
     <span class="qty-box"><label for="qty"><?php echo $this->__('Qty') ?>:</label> 
     <input name="qty" type="text" class="input-text qty" id="qty" maxlength="12" value="<?php echo $this->getMinimalQty($_product) ?>"/></span> 
     <button class="form-button" onclick="productAddToCartForm.submit()"><span><?php echo $this->__('Add to Cart') ?></span></button> 
     <?php if($this->helper('wishlist')->isAllow() || $_compareUrl=$this->helper('catalog/product_compare')->getAddUrl($_product)): ?> 
      <strong><?php echo $this->__('OR') ?></strong> 
     <?php endif; ?> 
    </fieldset> 
<?php endif; ?> 
<!--edit--> 
<?php endif; /* if ($this->isCustomerLoggedIn()): */ ?> 
<!--/edit--> 
관련 문제