При этом PHP же не предоставляет никаких возможностей по переопределению функций. Даже все эти новые потуги сделать нечто вроде нэймспейсов не спасают (((
В итоге постоянно приходится городить огород.
Предлагаю заменить функцию _ShowElementPropertyField в /bitrix/modules/iblock/admin_tools.php
на:
Дифф тут примитивный. Строка
меняется на
В итоге имена уже привязанных элементов становятся ссылками на редактирование.
В итоге постоянно приходится городить огород.
Предлагаю заменить функцию _ShowElementPropertyField в /bitrix/modules/iblock/admin_tools.php
на:
| Код |
|---|
function _ShowElementPropertyField($name, $property_fields, $values, $bVarsFromForm = false)
{
global $bCopy;
$index = 0;
if(!is_array($values))
$values = array();
echo '<table cellpadding="0" cellspacing="0" border="0" class="nopadding" width="100%" id="tb'.md5($name).'">';
foreach($values as $key=>$val)
{
if($bCopy)
{
$key = "n".$index;
$index++;
}
if(is_array($val) && is_set($val, "VALUE"))
$val = $val["VALUE"];
$db_res = CIBlockElement::GetByID($val);
$ar_res = $db_res->GetNext();
echo '<tr><td>'.
'<input name="'.$name.'['.$key.']" id="'.$name.'['.$key.']" value="'.htmlspecialcharsex($val).'" size="5" type="text">'.
'<input type="button" value="..." onClick="jsUtils.OpenWindow(\'/bitrix/admin/iblock_element_search.php?lang='.LANG.'&IBLOCK_ID='.$property_fields["LINK_IBLOCK_ID"].'&n='.$name.'&k='.$key.'\', 600, 500);">'.
' <span id="sp_'.md5($name).'_'.$key.'" >'.
'<a href="/bitrix/admin/iblock_element_edit.php?WF=Y&ID='.$ar_res['ID'].'&type='.$ar_res['IBLOCK_TYPE_ID'].'&lang=ru&IBLOCK_ID='.$ar_res['IBLOCK_ID'].'&find_section_section='.$ar_res['IBLOCK_SECTION_ID'].'" target="_blank">'.
$ar_res['NAME'].
'</a>'
.'</span>'.
'</td></tr>';
if($property_fields["MULTIPLE"]!="Y")
{
$bVarsFromForm = true;
break;
}
}
if(!$bVarsFromForm)
{
$MULTIPLE_CNT = IntVal($property_fields["MULTIPLE_CNT"]);
$cnt = ($property_fields["MULTIPLE"]=="Y"? ($MULTIPLE_CNT>0 && $MULTIPLE_CNT<=30 ? $MULTIPLE_CNT : 5) : 1);
for($i = 0; $i < $cnt; $i++)
{
$val = "";
$key = "n".$index;
$index++;
echo '<tr><td>'.
'<input name="'.$name.'['.$key.']" id="'.$name.'['.$key.']" value="'.htmlspecialcharsex($val).'" size="5" type="text">'.
'<input type="button" value="..." onClick="jsUtils.OpenWindow(\'/bitrix/admin/iblock_element_search.php?lang='.LANG.'&IBLOCK_ID='.$property_fields["LINK_IBLOCK_ID"].'&n='.$name.'&k='.$key.'\', 600, 500);">'.
' <span id="sp_'.md5($name).'_'.$key.'"></span>'.
'</td></tr>';
}
}
if($property_fields["MULTIPLE"]=="Y")
{
echo '<tr><td>'.
'<input type="button" value="'.GetMessage("IBLOCK_AT_PROP_ADD").'..." onClick="jsUtils.OpenWindow(\'/bitrix/admin/iblock_element_search.php?lang='.LANG.'&IBLOCK_ID='.$property_fields["LINK_IBLOCK_ID"].'&n='.$name.'&m=y&k='.$key.'\', 600, 500);">'.
'<span id="sp_'.md5($name).'_'.$key.'" ></span>'.
'</td></tr>';
}
echo '</table>';
echo "<script type=\"text/javascript\">\r\n";
echo "var MV_".md5($name)." = ".$index.";\r\n";
echo "function InS".md5($name)."(id, name){ \r\n";
echo " oTbl=document.getElementById('tb".md5($name)."');\r\n";
echo " oRow=oTbl.insertRow(oTbl.rows.length-1); \r\n";
echo " oCell=oRow.insertCell(-1); \r\n";
echo " oCell.innerHTML=".
"'<input name=\"".$name."[n'+MV_".md5($name)."+']\" value=\"'+id+'\" size=\"5\" type=\"text\">'+\r\n".
"'<input type=\"button\" value=\"...\" '+\r\n".
"'onClick=\"jsUtils.OpenWindow(\'/bitrix/admin/iblock_element_search.php?lang=".LANG."&IBLOCK_ID=".$property_fields["LINK_IBLOCK_ID"]."&n=".$name."&k='+MV_".md5($name)."+'\', '+\r\n".
"' 600, 500);\">'+".
"' <span id=\"sp_".md5($name)."_'+MV_".md5($name)."+'\" >'+name+'</span>".
"';";
echo 'MV_'.md5($name).'++;';
echo '}';
echo "\r\n</script>";
}
|
Дифф тут примитивный. Строка
| Код |
|---|
echo '<tr><td>'. '<input name="'.$name.'['.$key.']" id="'.$name.'['.$key.']" value="'.htmlspecialcharsex($val).'" size="5" type="text">'. '<input type="button" value="..." onClick="jsUtils.OpenWindow(\'/bitrix/admin/iblock_element_search.php?lang='.LANG.'&IBLOCK_ID='.$property_fields["LINK_IBLOCK_ID"].'&n='.$name.'&k='.$key.'\', 600, 500);">'. ' <span id="sp_'.md5($name).'_'.$key.'" >'.$ar_res['NAME'].'</span>'. '</td></tr>'; |
меняется на
| Код |
|---|
echo '<tr><td>'. '<input name="'.$name.'['.$key.']" id="'.$name.'['.$key.']" value="'.htmlspecialcharsex($val).'" size="5" type="text">'. '<input type="button" value="..." onClick="jsUtils.OpenWindow(\'/bitrix/admin/iblock_element_search.php?lang='.LANG.'&IBLOCK_ID='.$property_fields["LINK_IBLOCK_ID"].'&n='.$name.'&k='.$key.'\', 600, 500);">'. ' <span id="sp_'.md5($name).'_'.$key.'" >'. '<a href="/bitrix/admin/iblock_element_edit.php?WF=Y&ID='.$ar_res['ID'].'&type='.$ar_res['IBLOCK_TYPE_ID'].'&lang=ru&IBLOCK_ID='.$ar_res['IBLOCK_ID'].'&find_section_section='.$ar_res['IBLOCK_SECTION_ID'].'" target="_blank">'. $ar_res['NAME']. '</a>' .'</span>'. '</td></tr>'; |
В итоге имена уже привязанных элементов становятся ссылками на редактирование.