Вход на сайт
Опрос


Новые сверху
Новые последние
Разберусь по дате


Календарь

«    Июнь 2008    »
ПнВтСрЧтПтСбВс
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
 

Какие-то ссылки

seo-monster.ru - сервис проверки доменов
хочешь такой же информер?

Баги с отображением xfield в div'ахХаки

По просьбам трудящихся, публикуеться как пофиксить баги с отображением xfield в div'ах.

1) Допустим мы сверстали всё в дивах, и у нас поползли доп. поля. Идём и открываем файл /engine/inc/userfields.php. Там можно увидеть такой вот код:

Код
<tr>
<td>$value[1]:</td>
<td class="xprofile" colspan="2"><textarea name="xfield[$fieldname]" id="xf_$fieldname"{$readonly}>$fieldvalue</textarea></td></tr>
HTML;
      } elseif ($value[3] == "text") {
        $output .= <<<HTML
<tr>
<td>$value[1]:</td>
<td class="xprofile" colspan="2"><input type="text" name="xfield[$fieldname]" id="xfield[$fieldname]" value="$fieldvalue"{$readonly} /></td>
</tr>



Этот код отвечает за вывод доп.полей. Как видим, сделан он под абличную вёрстку, и даже нет здесь открытого тэга
<table>
, т.е. идёт слёту код. Это не хорошо, поэтому в дивах всё и ползёт. Заменяем Весь этот кошмар на код:

Код
<label for="xf_$fieldname">$value[1]:</label><br />
<textarea name="xfield[$fieldname]" id="xf_$fieldname"{$readonly}>$fieldvalue</textarea><br /><br />
HTML;
      } elseif ($value[3] == "text") {
        $output .= <<<HTML
<label for="xf_$fieldname">$value[1]:</label><br />
<input type="text" name="xfield[$fieldname]" id="xfield[$fieldname]" value="$fieldvalue"{$readonly} /><br /><br />



Я заменял на такой, т.к. юзаю
<fieldset>
для написания форм. Ну, думаю, человек, знающий html сам под себя всё это дело поправит... Короче разобрались с полями с профиле пользователя. Идём дальше.

2) Открываем /engine/inc/xfields.php. Там ищем вот такой страшный и длинный код:

Код
<tr id="$holderid">
<td class=addnews>$value[1]:<br />[if-optional]({$lang['xf_not_notig']})[/if-optional]</td>
<td class=xfields colspan="2"><textarea name="xfield[$fieldname]" id="xf_$fieldname">$fieldvalue</textarea></td></tr>
HTML;
      } elseif ($value[3] == "text") {
        $output .= <<<HTML
<tr id="$holderid">
<td class=addnews>$value[1]:</td>
<td class=xfields colspan="2"><input type="text" name="xfield[$fieldname]" id="xfield[$fieldname]" value="$fieldvalue" />  [if-optional]<font style="font-size:7pt">({$lang['xf_not_notig']})</font>[/if-optional]
</tr>
HTML;
      } elseif ($value[3] == "select") {
        $output .= <<<HTML

<tr id="$holderid">
<td class=addnews>$value[1]:</td>
<td class=xfields colspan="2"><select name="xfield[$fieldname]">
HTML;
        foreach (explode("\r\n", $value[4]) as $index => $value) {
          $output .= "<option value=\"$index\"" . ($fieldvalue == $value ? " selected" : "") . ">$value</option>\r\n";
        }
        $output .= <<<HTML
  </td>
</tr>
HTML;


Почему именно такой страшный читаем ниже.
Итак, снова мы видим элементы таблиц, причем таблиц опять же не открытых. Это дело нам надо исправлять. Берем и заменяем всё это дело на:

Код
<label for="xf_$fieldname">$value[1] [if-optional]({$lang['xf_not_notig']})[/if-optional]:</label><br />
<textarea name="xfield[$fieldname]" id="xf_$fieldname">$fieldvalue</textarea><br /><br />
HTML;
      } elseif ($value[3] == "text") {
        $output .= <<<HTML
<label for="xf_$fieldname">$value[1] [if-optional]({$lang['xf_not_notig']})[/if-optional]:</label><br />
<input type="text" name="xfield[$fieldname]" id="xfield[$fieldname]" value="$fieldvalue" /><br /><br />
HTML;
      } elseif ($value[3] == "select") {
        $output .= <<<HTML

<label for="xf_$fieldname">$value[1]:</label><br />
<select name="xfield[$fieldname]">
HTML;
        foreach (explode("\r\n", $value[4]) as $index => $value) {
          $output .= "<option value=\"$index\"" . ($fieldvalue == $value ? " selected" : "") . ">$value</option>\r\n";
        }
        $output .= <<<HTML
HTML;


Я опять использовал
<fieldset>
, сами настроете по своему вкусу поля... Идём в добавление новости и смотрим, всё вроде как на месте, но уползает дополнительное поле
<select>
, оно перекрывает нижележащий div и label. А вот сейчас нужно поистине отблагодарить г-на Целсофта за то, что он забыл закрыть тэг
<select>
. Чуть ниже вышеприведенного кода ищем:
Код
    $output .= <<<HTML

<script type="text/javascript">
<!--
  var item = null;
  if (document.getElementById) {
    item = document.getElementById("category");
  } else if (document.all) {
    item = document.all["category"];
  } else if (document.layers) {
    item = document.layers["category"];
  }
  if (item) {
    onCategoryChange(item.value);
  }
// -->
</script>


и в самый конец вставляем закрывающий тэг:
Код
    $output .= <<<HTML

<script type="text/javascript">
<!--
  var item = null;
  if (document.getElementById) {
    item = document.getElementById("category");
  } else if (document.all) {
    item = document.all["category"];
  } else if (document.layers) {
    item = document.layers["category"];
  }
  if (item) {
    onCategoryChange(item.value);
  }
// -->
</script>
</select>


Раньше его вставить нельзя, т.к. этим скриптом формируется выпадающий список. Теперь идём ещё раз на страницу добавления новости и любуемся ровными доп. полями.

Автор: CSR





Уважаемый посетитель, Вы зашли на сайт как незарегистрированный пользователь. Мы рекомендуем Вам зарегистрироваться либо зайти на сайт под своим именем.
#1 написал: X-Hunter (24 июня 2008 23:15)

Гуру
Комментариев42
До следующего звания Вам -42 комментариев
сколько ни верстал в дивах нифига не ползло smile
Информация

Посетители, находящиеся в группе Гости, не могут оставлять комментарии в данной новости.