@php use Botble\Ecommerce\Models\ProductSpecificationAttributeTranslation; use Botble\Ecommerce\Models\SpecificationTable; use Illuminate\Support\Facades\DB; $currentLangCode = ProductSpecificationAttributeTranslation::getCurrentLanguageCode($language ?? null); $isDefaultLanguage = ProductSpecificationAttributeTranslation::isEditingDefaultLanguage(); $groupedAttributes = $specificationTable->getSortedAttributesForProduct($product); // Load translations for specification attributes $attributeTranslations = []; $productAttributeTranslations = []; if (!$isDefaultLanguage) { $attributeIds = collect($groupedAttributes)->pluck('attributes')->flatten()->pluck('id')->unique(); // Load attribute translations (for options) $translations = DB::table('ec_specification_attributes_translations') ->whereIn('ec_specification_attributes_id', $attributeIds) ->where('lang_code', $currentLangCode) ->get() ->keyBy('ec_specification_attributes_id'); foreach ($translations as $translation) { $attributeTranslations[$translation->ec_specification_attributes_id] = [ 'name' => $translation->name, 'options' => json_decode($translation->options ?: '', true) ?: [], 'default_value' => $translation->default_value, ]; } // Load product-specific attribute translations (for values) if ($product->id) { $productTranslations = DB::table('ec_product_specification_attribute_translations') ->where('product_id', $product->id) ->whereIn('attribute_id', $attributeIds) ->where('lang_code', $currentLangCode) ->get() ->keyBy('attribute_id'); foreach ($productTranslations as $translation) { $productAttributeTranslations[$translation->attribute_id] = $translation->value; } } } @endphp
{{ trans('plugins/ecommerce::product-specification.product.specification_table.group') }} {{ trans('plugins/ecommerce::product-specification.product.specification_table.attribute') }} {{ trans('plugins/ecommerce::product-specification.product.specification_table.value') }} {{ trans('plugins/ecommerce::product-specification.product.specification_table.hide') }} {{ trans('plugins/ecommerce::product-specification.product.specification_table.sorting') }} @foreach ($groupedAttributes as $groupData) @foreach ($groupData['attributes'] as $attribute) @php $data = SpecificationTable::getAttributeDisplayData($product, $attribute, $currentLangCode); $attributeValue = $data['displayValue']; // For translations, get the correct value and options $attributeOptions = $attribute->options ?: []; if (!$isDefaultLanguage) { // Use product-specific translated value if available if (isset($productAttributeTranslations[$attribute->id])) { $attributeValue = $productAttributeTranslations[$attribute->id]; } // Otherwise, use attribute's translated default value if available elseif (isset($attributeTranslations[$attribute->id]) && $attributeTranslations[$attribute->id]['default_value'] !== null) { $attributeValue = $attributeTranslations[$attribute->id]['default_value']; } // Get translated options for select/radio if (isset($attributeTranslations[$attribute->id])) { $translatedOptions = $attributeTranslations[$attribute->id]['options']; if (!empty($translatedOptions)) { $attributeOptions = $translatedOptions; } } } @endphp {{ $groupData['group']->name }} {{ $attribute->name }} @if ($isDefaultLanguage) @if ($attribute->type == 'text') @elseif ($attribute->type == 'textarea') @elseif ($attribute->type == 'checkbox') @elseif ($attribute->type == 'select') @elseif ($attribute->type == 'radio') @foreach ($attributeOptions as $value) @endforeach @endif @else @if ($attribute->type == 'text') @elseif ($attribute->type == 'textarea') @elseif ($attribute->type == 'checkbox') @elseif ($attribute->type == 'select') @elseif ($attribute->type == 'radio') @if(is_array($attributeOptions)) @foreach ($attributeOptions as $value) @endforeach @endif @endif @endif @if ($isDefaultLanguage) @else @if($data['isHidden']) @else @endif @endif @if ($isDefaultLanguage) @else {{ $data['order'] }} @endif @endforeach @endforeach