I was working on this for a while and thought someone else might want to use it or improve it.
Instead of calling all the extra fields in the product details the customer wanted links to each extra field which, when clicked, opened in a popup box like the "ask a question about this product" link.
here is what I did:
1. made a new file in the root called popup_ef.php
Code:
<?php
require './auth.php';
/**
* Get productid
*/
$productid = intval($productid);
if (
empty($productid)
) {
func_close_window();
}
x_load('product');
$product = func_select_product($productid, $user_account['membershipid']);
if (
empty($product)
) {
func_close_window();
}
if ($productid) {
$extra_fields = func_query("SELECT $sql_tbl[extra_fields].*, $sql_tbl[extra_field_values].value as field_value, IF($sql_tbl[extra_field_values].fieldid > '0', 'Y', '') as is_value, IF($sql_tbl[extra_fields_lng].field != '', $sql_tbl[extra_fields_lng].field, $sql_tbl[extra_fields].field) as field FROM $sql_tbl[extra_fields] LEFT JOIN $sql_tbl[extra_field_values] ON $sql_tbl[extra_fields].fieldid = $sql_tbl[extra_field_values].fieldid AND $sql_tbl[extra_field_values].productid = '$productid' LEFT JOIN $sql_tbl[extra_fields_lng] ON $sql_tbl[extra_fields].fieldid = $sql_tbl[extra_fields_lng].fieldid AND $sql_tbl[extra_fields_lng].code = '$shop_language' WHERE 1 $provider_condition ORDER BY $sql_tbl[extra_fields].orderby");
} else {
$extra_fields = func_query("SELECT $sql_tbl[extra_fields].*, IF($sql_tbl[extra_fields_lng].field != '', $sql_tbl[extra_fields_lng].field, $sql_tbl[extra_fields].field) as field FROM $sql_tbl[extra_fields] LEFT JOIN $sql_tbl[extra_fields_lng] ON $sql_tbl[extra_fields].fieldid = $sql_tbl[extra_fields_lng].fieldid AND $sql_tbl[extra_fields_lng].code = '$shop_language' WHERE 1 $provider_condition ORDER BY $sql_tbl[extra_fields].orderby");
}
if (!empty($extra_fields)) {
if (in_array(AREA_TYPE, array('C', 'B')) && $config["Extra_Fields"]["display_default_extra_fields"] == 'Y') {
foreach ($extra_fields as $ef_k=>$ef_v) {
if (empty($ef_v['field_value']) && $ef_v['is_value'] != 'Y' && !empty($ef_v['value']))
$extra_fields[$ef_k]['field_value'] = $ef_v['value'];
}
}
if (in_array(AREA_TYPE, array('C', 'B')) && !$product_info["allow_active_content"]) {
foreach ($extra_fields as $k => $v) {
$extra_fields[$k]['field_value'] = func_xss_free($v['field_value']);
}
}
$smarty->assign('extra_fields', $extra_fields);
}
$smarty->assign('foo', $foo);
$smarty->assign('productid', $productid);
$smarty->assign('template_name', 'modules/Extra_Fields/extra_fields_popup.tpl');
func_display('customer/help/popup_info.tpl', $smarty);
?>
2. in skin/common_files/modules/Extra_Fields made a new file called
extra_fields_popup.tpl
Code:
<table class="ef">
{foreach from=$extra_fields item=v}
{if $v.active eq "Y" and $v.field_value and $v.fieldid eq $foo}
<div class="property-name">{$v.field}</div>
<div class="property-value">{$v.field_value}</div>
{/if}
{/foreach}
</table>
3. changed modules/Extra_Fields/product.tpl
from
Code:
{foreach from=$extra_fields item=v}
{if $v.active eq "Y" and $v.field_value}
<tr>
<td class="property-name">{$v.field}</td>
<td class="property-value" colspan="2">{$v.field_value}</td>
</tr>
{/if}
{/foreach}
to
Code:
{foreach from=$extra_fields item=v}
{if $v.active eq "Y" and $v.field_value}
{include file="customer/buttons/button.tpl" button_title=$v.field style="button"
href="javascript: return !popupOpen(xcart_web_dir + '/popup_ef.php?productid=`$product.productid`&foo=`$v.fieldid`')"}
{/if}
{/foreach}
Any thoughts or ideas for improvement would be greatly appreciated. I am not sure I did this the best way, but it is working.
I would also like the product title and extra field name at the top of the popup window, but haven't been able to figure it out.