Запрет на редактирование основного поля в профиле

Автор hover, 24 мая 2010, 12:17:45

« назад - далее »

0 Пользователи и 1 гость просматривают эту тему.

hover

Доброго времени суток всем форумчанам!

Кто-нибудь подскажет как запретить редактировать основное поле пользователями, например AIM (для админа оставить такую возможность). Для чего нужно? Чтобы подредактировать поле под свои нужды и сделать сортировку по этому полу в списке пользователей.

Или можно решить эту проблему другим способом. А именно добавить созданное дополнительное поле в список пользователей с сортировкой. Как это решить?

P.S. Читал этот мануал http://www.simplemachines.ru/index.php?topic=4569.0 но он написан видимо не для smf2 RC2, так как ничего не получилось.

Arcady11

Нашёл такой вот мод - http://custom.simplemachines.org/mods/index.php?mod=1520
Custom Fields On Memberlist

но на 2.0 RC3 не ставиться, попробую доработать

hover

спасибо, сейчас попробую поставить на 2.0 RC2

Arcady11

Ух, кошмар, пацаны, поставил вручную таки этот мод на 2.0 RC3

В итоге, в админке чекбокс так и не заработал, но напрямую через базу данных если задать для нового поля show_mlist в таблице smf_custom_fields значение "1", дополнительные поля появились в списке мемберов O0

Вот, что я проделал:

Лог замены:
=========================================
ManageSettings.php:

найти:
$private, $active, $default, $can_search,
заменить:
$private, $active, $default, $can_search, $show_mlist,

найти:
'private' => 'int', 'active' => 'int', 'default_value' => 'string', 'can_search' => 'int',
заменить:
'private' => 'int', 'active' => 'int', 'default_value' => 'string', 'can_search' => 'int', 'show_mlist' => 'int',

найти:
show_reg, show_display, show_profile, private, active, default_value, can_search,
заменить:
show_reg, show_display, show_profile, private, active, default_value, can_search, show_mlist,

найти:
enclose = {string:enclose}, placement = {int:placement}
заменить:
enclose = {string:enclose}, placement = {int:placement}, show_mlist = {int:show_mlist}

найти:
'placement' => $placement,
заменить:
'placement' => $placement,
'show_mlist' => $show_mlist,

найти:
'can_search' => $row['can_search'],
заменить:
'can_search' => $row['can_search'],
'show_mlist' => $row['show_mlist'],

найти:
'can_search' => false,
заменить:
'can_search' => false,
'show_mlist' => false,

найти:
$can_search = isset($_POST['can_search']) ? 1 : 0;
заменить:
$can_search = isset($_POST['can_search']) ? 1 : 0;
$show_mlist = isset($_POST['show_mlist']) ? 1 : 0;
==========================================================
Admin.template.php

<dd>
<input type="checkbox" name="display" id="display"', $context['field']['display'] ? ' checked="checked"' : '', ' class="input_check" />
</dd>

заменить на:

<dd>
<input type="checkbox" name="display" id="display"', $context['field']['display'] ? ' checked="checked"' : '', ' class="input_check" />
</dd>


<dd>
<b>', $txt['custom_edit_mod_mlist'], ':</b>  <div class="smalltext">', $txt['custom_edit_mod_mlist_desc'], '</div>
</dd>
<dd>
<input type="checkbox" name="mlist" ', $context['field']['mlist'] ? 'checked="checked"' : '', ' class="input_check" />
</dd>
=============================================
Memberlist.template.php

echo '
</tr>';
}
}
// No members?

заменить на

// Any custom fields to show?
if (!empty($context['custom_profile_fields']['columns']))
{
foreach ($context['custom_profile_fields']['columns'] as $key => $column)
echo '
<td class="windowbg" align="left">', $member['options'][substr($key, 5)], '</td>';
}

echo '
</tr>';
}

}

// No members?
===============================
Перед загрузкой модификации на сервер в файле install.php заменить код на этот:

<?php

if (file_exists(dirname(__FILE__) . '/SSI.php') && !defined('SMF'))
{
$ssi true;
require_once(dirname(__FILE__) . '/SSI.php');
}
elseif (!
defined('SMF'))
exit('<b>Error:</b> Cannot install - please verify you put this in the same place as SMF\'s index.php.');

global 
$smcFunc;

if(!
array_key_exists('db_add_column'$smcFunc))
db_extend('packages');

$columns $smcFunc['db_list_columns']('smf_custom_fields');

if(!
in_array('show_mlist'$columns))
$smcFunc['db_add_column']('smf_custom_fields', array('name' => 'show_mlist''type' => 'tinyint''size' => 3));

if(!empty(
$ssi))
echo 'Database installation complete!';

?>


hover

Тоже поставил вручную вчера, предварительно добавив в install.php префикс БД для таблицы. Основная проблема на отображение в админке была здесь:

<dd>
<input type="checkbox" name="display" id="display"', $context['field']['display'] ? ' checked="checked"' : '', ' class="input_check" />
</dd>

заменить на:

<dd>
<input type="checkbox" name="display" id="display"', $context['field']['display'] ? ' checked="checked"' : '', ' class="input_check" />
</dd>


<dd>
<b>', $txt['custom_edit_mod_mlist'], ':</b>  <div class="smalltext">', $txt['custom_edit_mod_mlist_desc'], '</div>
</dd>
<dd>
<input type="checkbox" name="mlist" ', $context['field']['mlist'] ? 'checked="checked"' : '', ' class="input_check" />
</dd>


а именно в тегах <dd>, только на RC2, надо подставлять теги <dt>, вместо <td>. После этого отображается настройка в админке.
После этого дополнительное поле начало отображаться в списке, но не было их значений, за которые отвечает этот код в Memberlist.template.php (также во время установки не был добавлен)

// Any custom fields to show?
if (!empty($context['custom_profile_fields']['columns']))
{
foreach ($context['custom_profile_fields']['columns'] as $key => $column)
echo '
<td class="windowbg" align="left">', $member['options'][substr($key, 5)], '</td>';
}

echo '
</tr>';
}

}

Arcady11

Блок в Admin.template.php правильней так:

<dt>
<strong>', $txt['custom_edit_mod_mlist'], ':</strong>  <div class="smalltext">', $txt['custom_edit_mod_mlist_desc'], '</div>
</dt>
<dd>
<input type="checkbox" name="show_mlist" id="show_mlist"', $context['field']['show_mlist'] ? ' checked="checked"' : '', ' class="input_check" />
</dd>


Вот теперь всё работает.

Beer

Так ты сделал возможность для поля AIM - запрет редактирования юзерами, а для админа оставить такую возможность. Или поставил этот мод, который создает свои поля?

Mavn

ответа скорее всего не будет как никак 2010 год был :)
SimpleMachines Russian Community Team
п.1 Пройду курсы гадалок для определения исходного кода по скриншоту.

п.2 У вас нет желания читать правила раздела, у меня нет желания одобрять темы, которые не соответствуют этим правилам.

Beer

Поле AIM до сих пор в SMF присутствует - мало ли...

Mavn

и что?
в SMF 2.0 если что появились доп поля в настройках форума и там вполне можно настроить поля для администратора!
SimpleMachines Russian Community Team
п.1 Пройду курсы гадалок для определения исходного кода по скриншоту.

п.2 У вас нет желания читать правила раздела, у меня нет желания одобрять темы, которые не соответствуют этим правилам.

Beer

Так точно - собственно это и привело меня сюда.

Создал доп. поле:
Права на изменение и просмотр: Кто может просматривать и изменять данное поле. - Пользователи могут просматривать, только администратор может изменять.

По идее - юзер должен видеть, но не иметь возможности изменить. А в этом варианте юзер не видит данных поля...
В остальных все штатно, но мне как раз и надо - чтобы видел, но не мог изменить.

  <option value="0" selected="selected">Пользователи могут просматривать, владелец изменять</option>
  <option value="1">Пользователи могут просматривать, только администратор может изменять</option>
  <option value="2">Пользователи не могут видеть это поле; владелец и администраторы могут редактировать его.</option>
  <option value="3">Данное поле видно только администратору</option>

BoPoH


Beer

Она же подписана:
Активное:
Если не выбрать, данное поле никому отображаться не будет.

Что в данном случае соответствует действительности - она включает или отключает поле.

BoPoH

Птица стоит, поле видно
У меня на форуме так настроено "Пользователи могут просматривать, только администратор может изменять" , все работает. Кстати сталкивался с глюком, что поле не появлялось, если название ему написать на кириллице. Создавал поле с латинским названием, потом переименовывал.

Beer

Создал поле test - показывается.
Как только поставил Пользователи могут просматривать, только администратор может изменять - юзер его не видит, админ - видит.