Поиск по сайту
Вход на сайт
Обратите внимание
Топ-новости
Архив сайта
Апрель 2016 (1)
Апрель 2014 (1)
Ноябрь 2013 (1)
Октябрь 2013 (1)
Май 2013 (2)
Апрель 2013 (8)
Партнеры

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

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

Баги с отображением 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

У вас не ставится dle модуль или dle шаблон работает не правильно? Задайте вопрос на нашем форуме по DLE(Datalife Engine CMS) и Вам обязательно помогут!



Если появились вопросы по поводу Баги с отображением xfield в div'ах или Вы хотите высказаться, то пройдите регистрацию или авторизируйтесь и оставляйте комментарии.
#1 написал: X-Hunter (24 июня 2008 23:15)

Публикаций: 0
Комментариев: 0
сколько ни верстал в дивах нифига не ползло smile
Информация

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

Вверх