Làm thế nào để ẩn thuộc tính trống trong bất kỳ mẫu magento nào?


12

Tôi muốn ẩn thuộc tính tùy chỉnh trong mẫu magento. Phiên bản magento của tôi là 1.8.1

Chúng tôi đã thêm thuộc tính tùy chỉnh cho sản phẩm của mình như nhãn hiệu, kích thước, loại sản phẩm, v.v. nhưng đôi khi chúng tôi không thêm giá trị trong các thuộc tính này. magento hiển thị Không hoặc Không có trong trang xem sản phẩm.

Vì vậy, chúng tôi muốn ẩn các thuộc tính trống hoặc không có giá trị trong mẫu.


Chúng tôi sẽ cần thêm khá nhiều thông tin để trợ giúp (thuộc tính nào? Ở đâu?)
benmark

Câu trả lời:


7

Cách khắc phục nhanh:

Trong app/[mypackage]/[mytheme]/template/catalog/product/view/attributes.phtml(hoặc sao chép tệp này trong chủ đề của bạn từ chủ đề tùy chỉnh cơ sở hoặc mặc định):

<?php foreach ($_additional as $_data):
// Add these 2 lines
$_test_data_value = trim($_data['value']);
if ((empty($_test_data_value) || in_array($_test_data_value, array(Mage::helper('catalog')->__('N/A'), Mage::helper('catalog')->__('No'))))) continue;?>

Phía dưới là không cần thiết để đạt được những gì bạn đã yêu cầu:

Những thuộc tính vẫn được tải. Để tối ưu hóa điều này (nếu bạn có số lượng lớn các thuộc tính trong bộ thuộc tính), hãy làm:

public function getAdditionalData(array $excludeAttr = array())
{
    $data = array();
    $product = $this->getProduct();
    $attributes = $product->getAttributes();
    foreach ($attributes as $attribute) {
//            if ($attribute->getIsVisibleOnFront() && $attribute->getIsUserDefined() && !in_array($attribute->getAttributeCode(), $excludeAttr)) {
        if ($attribute->getIsVisibleOnFront() && !in_array($attribute->getAttributeCode(), $excludeAttr)) {

            // Fix:
            //$value = $attribute->getFrontend()->getValue($product);

            if (!$product->hasData($attribute->getAttributeCode())) {
                $value = Mage::helper('catalog')->__('N/A');
            } 
            // Fix:
            elseif ((string) ($value = $attribute->getFrontend()->getValue($product)) == '') {
                $value = Mage::helper('catalog')->__('No');
            } elseif ($attribute->getFrontendInput() == 'price' && is_string($value)) {
                $value = Mage::app()->getStore()->convertPrice($value, true);
            }

            if (is_string($value) && strlen($value)) {
                $data[$attribute->getAttributeCode()] = array(
                    'label' => $attribute->getStoreLabel(),
                    'value' => $value,
                    'code'  => $attribute->getAttributeCode()
                );
            }
        }
    }
    return $data;
}

Lưu ý hai// Fix: ý kiến.

Chức năng sửa đổi này là từ Mage_Catalog_Block_Product_View_Attributes . Bạn cần sao chép hàm trên trong lớp khối từ mô-đun của bạn. Lớp khối của bạn viết lại lớp khối lõi. Áp dụng điều này sẽ cải thiện đáng kể tải trang xem sản phẩm trên frontend.

Nếu bạn không biết cách tạo một mô-đun tùy chỉnh trong thư mục cục bộ hơn là tìm kiếm một hướng dẫn về cách tạo mô-đun Magento và cách viết lại một lớp khối lõi. Hoặc thử http: //www.magentoc Commerce.com/magento-connect/ultimate-module-creator.html .


Giải pháp đầu tiên thay đổi tệp mẫu là tốt, nhưng có hai vấn đề. Đầu tiên, nếu có một loại thuộc tính Có / Không với giá trị được đặt thành Không, nó sẽ bị ẩn ở lối vào không ổn. Thứ hai nếu không có thuộc tính, bạn sẽ nhận được tiêu đề Thông tin bổ sung không ổn. Nếu không có thuộc tính mà tiêu đề không nên xuất hiện.
ADDISON74

6

Tìm và mở tệp thuộc tính.phtml. Tập tin này có thể được tìm thấy ở đây: /app/design/frontend/[YOUR PACKAGE]/[YOUR THEME]/template/catalog/product/view/attribute.phtml

Mở tệp và tìm kiếm các dòng sau:

<?php foreach ($_additional as $_data): ?>
    <tr>
        <th class="label"><?php echo $this->htmlEscape($this->__($_data['label'])) ?></th>
        <td class="data"><?php echo $_helper->productAttribute($_product, $_data['value'], $_data['code']) ?></td>
    </tr>
<?php endforeach; ?>

Thay thế toàn bộ vòng lặp foreach bằng các dòng mã sau:

<?php foreach ($_additional as $_data): ?>
    <?php $_attribute = $_product->getResource()->getAttribute($_data['code']);
    if (!is_null($_product->getData($_attribute->getAttributeCode())) && ((string)$_attribute->getFrontend()->getValue($_product) != '')) { ?>
    <tr>
        <th class="label"><?php echo $this->htmlEscape($this->__($_data['label'])) ?></th>
        <td class="data"><?php echo $_helper->productAttribute($_product, $_data['value'], $_data['code']) ?></td>
    </tr>
    <?php } ?>
<?php endforeach; ?>

Nguồn: http://codingbasics.net/ leather-magento-attribut-value /

Nguồn: http://www.magtheme.com/magento-blog/empty-attribut-showing-na-fix/


4

Tôi không biết chính xác, nhưng tôi đã đọc nó ở đâu đó.

Ẩn các thuộc tính trống bằng cách chỉ chỉnh sửa tệp mẫu có tên là các thuộc tính của Bỉ.

Trong mã của bạn, tìm dòng sau:

<?php foreach ($_additional as $_data): ?>
    <tr>
        <th class="label"><?php echo $this->htmlEscape($this->__($_data['label'])) ?></th>
        <td class="data"><?php echo $_helper->productAttribute($_product, $_data['value'], $_data['code']) ?></td>
    </tr>
<?php endforeach; ?>

thay thế các dòng này bằng:

<?php foreach ($_additional as $_data): ?>
    <?php if ((string)$_data['value'] != '' and $_data['value'] != 'N/A'): ?>
        <tr>
            <th class="label"><?php echo $this->htmlEscape($this->__($_data['label'])) ?></th>
            <td class="data"><?php echo $_helper->productAttribute($_product, $_data['value'], $_data['code']) ?></td>
        </tr>
    <?php endif; ?>
<?php endforeach; ?>

1
Giải pháp của bạn chỉ ẩn datetime loại thuộc tính, là loại duy nhất có giá trị N / A. Một trường văn bản, vùng văn bản, đa lựa chọn, thả xuống không có giá trị. Nếu loại attribyte là datetime và giá trị được đặt thành Không thì nó sẽ được hiển thị thay vì ẩn.
ADDISON74

1

thay đổi mã sau đây trong ứng dụng / thiết kế / frontend / base / default / template / catalog / sản phẩm / view / Properties.phtml :

từ:

<?php foreach ($_additional as $_data): ?>
<tr>
    <th class="label"><?php echo $this->escapeHtml($this->__($_data['label'])) ?></th>
    <td class="data"><?php echo $_helper->productAttribute($_product, $_data['value'], $_data['code']) ?></td>
</tr>
<?php endforeach; ?>

đến:

<?php foreach ($_additional as $_data): ?>
<?php if ($_product->getAttributeText($_data['code']) == '') continue; ?>
<tr>
    <th class="label"><?php echo $this->escapeHtml($this->__($_data['label'])) ?></th>
    <td class="data"><?php echo $_helper->productAttribute($_product, $_data['value'], $_data['code']) ?></td>
</tr>
<?php endforeach; ?>

2
Đừng thay đổi các mẫu cơ sở ...
Jelle Siderius

1

Trong chủ đề tùy chỉnh của bạn, điều hướng đến : catalog\product\view\attributes.phtml. Mã PHP của bạn sẽ kiểm tra xem giá trị thuộc tính là "Không" hay "Không có" trong tất cả các ngôn ngữ. Điều này sẽ không hiển thị các thuộc tính với các giá trị này.

Mã sẽ trông như thế này:

<?php
$_helper = $this->helper('catalog/output');
$_product = $this->getProduct();
$emptyValues = array($this->__('N/A'), $this->__('No'));
?>
<?php if($_additional = $this->getAdditionalData()): ?>
    <h2><?php echo $this->__('Additional Information') ?></h2>
    <table class="data-table" id="product-attribute-specs-table">
        <col width="25%" />
        <col />
        <tbody>
        <?php foreach ($_additional as $_data): ?>
            <?php if(!in_array($_data['value'], $emptyValues)): ?>
                <tr>
                    <th class="label"><?php echo $this->escapeHtml($this->__($_data['label'])) ?></th>
                    <td class="data"><?php echo $_helper->productAttribute($_product, $_data['value'], $_data['code']) ?></td>
                </tr>
            <?php endif; ?>
        <?php endforeach; ?>
        </tbody>
    </table>
    <script type="text/javascript">decorateTable('product-attribute-specs-table')</script>
<?php endif;?>

Biến $emptyValuesđược thêm vào và kiểm tra xem nó có trong mảng đã được thêm vào mã không.

Đảm bảo để trống bộ đệm sau khi bạn đã thực hiện các thay đổi đối với giao diện.


không hoạt động ở trên mã cho tôi
Gem

1

Điều này có thể được thực hiện với một đoạn mã nhỏ. Tìm và mở attributes.phtmltệp. Tập tin này có thể được tìm thấy ở đây:/app/design/frontend/[theme name]/[package name]/template/catalog/product/view/attribute.phtml

Mở tệp và tìm kiếm các dòng sau:

<?php foreach ($_additional as $_data): ?>
    <tr>
        <th class="label"><?php echo $this->htmlEscape($this->__($_data['label'])) ?></th>
        <td class="data"><?php echo $_helper->productAttribute($_product, $_data['value'], $_data['code']) ?></td>
    </tr>
<?php endforeach; ?>

Thay thế toàn bộ vòng lặp foreach bằng các dòng mã sau:

<?php foreach ($_additional as $_data): ?>
    <?php $_attribute = $_product->getResource()->getAttribute($_data['code']);
    if (!is_null($_product->getData($_attribute->getAttributeCode())) && ((string)$_attribute->getFrontend()->getValue($_product) != '')) { ?>
    <tr>
        <th class="label"><?php echo $this->htmlEscape($this->__($_data['label'])) ?></th>
        <td class="data"><?php echo $_helper->productAttribute($_product, $_data['value'], $_data['code']) ?></td>
    </tr>
    <?php } ?>
<?php endforeach; ?>

0

Vấn đề đã được giải quyết :) Giải pháp có tại đây: http : //www.magentoc Commerce.com/boards%20/viewthread/294064/#t407742

Mô-đun này hoạt động tốt với magento 1.8.1 Không cần phải mua mô-đun hoặc chỉnh sửa bất kỳ mã nào.

Cảm ơn Niro (Nhà phát triển mô-đun này)


1
Liên kết bị hỏng Tôi có thể biết cập nhật liên kết trực tiếp không?
Mặt trăng

4
hoặc thậm chí tốt hơn: gửi câu trả lời chính xác ở đây. Một liên kết mới sẽ bị phá vỡ một lần nữa ...
simonthesorcerer 13/07/2015

0

Cách dễ dàng, nhưng không cần thiết tốt hơn so với những người khác.

Cập nhật tập tin dịch của bạn Mage_Catalog.csv. Đặt giá trị trống như bên dưới.

N/A,""
No,""

Thuộc tính Frontend sẽ bị bỏ qua khi Không hoặc Không có.


0

Đôi khi chúng ta bắt gặp một cửa hàng muốn có nhiều thuộc tính sản phẩm khác nhau, nhưng họ chỉ muốn bộ thuộc tính mặc định. Điều này có nghĩa là mọi sản phẩm sẽ cho phép hơn 10 tùy chọn đôi khi không áp dụng cho một số sản phẩm nhất định. Ví dụ, một mảnh quần áo có thể cần một thuộc tính kích thước, nhưng một mảnh đồ nội thất thì không. Bởi vì cửa hàng sử dụng các bộ thuộc tính giống nhau cho mỗi sản phẩm, thuộc tính kích thước trống sẽ hiển thị như sau:

Điều này gây khó hiểu cho khách hàng, vì vậy lựa chọn tốt hơn là ẩn các giá trị thuộc tính trống. Điều này có thể được thực hiện với một đoạn mã nhỏ. Tìm và mở attributes.phtmltệp. Tập tin này có thể được tìm thấy ở đây:app/design/frontend/default/[theme name]/template/catalog/product/view/attribute.phtml

Mở tệp và tìm kiếm các dòng sau:

<?php foreach ($_additional as $_data): ?>
    <?php $_attribute = $_product->getResource()->getAttribute($_data['code']);
    if (!is_null($_product->getData($_attribute->getAttributeCode())) && ((string)$_attribute->getFrontend()->getValue($_product) != '')) { ?>
    <tr>
        <th class="label"><?php echo $this->htmlEscape($this->__($_data['label'])) ?></th>
        <td class="data"><?php echo $_helper->productAttribute($_product, $_data['value'], $_data['code']) ?></td>
    </tr>
    <?php } ?>
<?php endforeach; ?>

Thay thế toàn bộ vòng lặp foreach bằng các dòng mã sau:

<?php foreach ($_additional as $_data): ?>
    <?php $_attribute = $_product->getResource()->getAttribute($_data['code']);
    if (!is_null($_product->getData($_attribute->getAttributeCode())) && ((string)$_attribute->getFrontend()->getValue($_product) != '')) { ?>
    <tr>
        <th class="label"><?php echo $this->htmlEscape($this->__($_data['label'])) ?></th>
        <td class="data"><?php echo $_helper->productAttribute($_product, $_data['value'], $_data['code']) ?></td>
    </tr>
    <?php } ?>
<?php endforeach; ?>

Đó là nó! Các thuộc tính trống bây giờ sẽ được ẩn khỏi các trang sản phẩm của bạn. Đừng quên làm mới bộ nhớ cache của bạn để xem các thay đổi.

SOurce : https://tejabhagavan.blogspot.in/2016/03/ leather-magento-attribut-with-no-value-2.html


không hoạt động ở trên mã
Gem
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.