Добро пожаловать на сайт <БагБД>, где вы можете задавать вопросы о программировании и разработке на Битрикс и Битрикс24, и получать быстрые и квалифицированные ответы от профессионалов!

Для Пользователя onix@imbg.org.ua - привязка к пользователю.

00 голосов
4
Цитата
Автор: Dmitry I onix@imbg.org.ua
(Авторизован)
Дата : 10.07.2012 20:58:45
Сообщение:

Добрый день. Судя по форуму на битриксе Вы решали похожую задачу, поэтому может сможете помочь. Только мы не программисты, а биологи. При ответе прошу это учесть )

Стандартными средствами инфоблоков (на стартовой редакции) пытаемся решить следующую задачу: Зарегистрированный пользователь студент должен иметь собственную область, куда бы он мог складывать отчеты, писать какие-то результаты. В эту же область должен иметь доступ и преподаватель для ответов и заданий студенту.

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

Сделали: в профиле пользователя добавили пользовательское поле UF_USER_ID, которое привязали к разделам инфоблока с разделами. Вроде бы остается добавить на страницу в публичной части компонент Новости, и настроить его на этот инфоблок. Но он у нас показывает записи из всех разделов. А мы хотели, чтобы при залогинивании пользователя onix показывались элементы только папки onix. И так для каждого студента - свои элементы. Причем в отличие от Вашей тогдашней задачи, нам не страшно, чтобы один студент мог забраться в директорию другого, хотя, конечно и нежелательно.

Вопрос1: что мы сделали не правильно?

Вопрос2:
Для преподавателя думали сделать так, как организован показ демо-новостей - через дополнительное меню, привязанное к разделам ИБ. Правда что будем делать, когда студентов станет хотя бы 100 - пока не знаем. Ведь тогда боковое меню непомерно разрастется. Но наверное можно будет использовать многоуровневую иерархию?

Вопрос3: быть может мы принципиально ошибаемся, и такую задачу лучше решать в более сложной версии? Тогда как это оптимальнее делать в версии Эксперт?
Вот такой вопрос ко мне пришёл. Чтож начнём.
спросил 25 Дек, 13 от kaganpwnz (180 баллов)

4 Ответы

00 голосов
Цитата
Предполагается решение: создать ИБ в котором каждому студенту назначить свой раздел. В этом разделе в виде элементов и будут все задания, отчеты и т.д.
Тут нареканий нет. Возможно вы немного неправильно сформулировали решение. Коректнее:
Каждому студенту, назначен раздел информационного блока, Элементы которого, будут являться его заданием.К данному заданию у студента должна присутствовать возможность прикреления отчётов и других (кстати каких и в каком виде материалов.)
Я прав?
Если моя формулировка точнее вашей, то тут возникает ещё 1 минимум ИБ, который будет хранить результаты отчётов и другие материалы, кроме задания. Связь будет осуществляться с помощью поля "привязка к Элементу".
По технической стороне.
Разделение прав Пользователей на просмотр разделов , на самом деле, организовать довольно просто. Алгоритм примерно такой:
1) Создаём пользовательское поле (допустим UF_ID_ACCESS ) и привязываем его к пользователю.
2) Перед вызовом компонента " bitrix.news.list' " на странице добавляем скрипт извлечения значения собственно этого поля.
3) В настройках компонента ''bitrix.news.list' ищем строчку "ИД раздела" и в значение данной настройки записываем перменную содержащую число из п2.
В данной реализации, студент сможет увидеть ТОЛЬКО свой раздел. Для преподавателя необходимо либо делать проверку прав на доступ и менять данную переменную под конкретного студента, либо создать отдельную страницу с фильтром по студентам.
Код компонентов нужен? Я постарался максимально подробно и без терминов описать алгоритм.
Цитата
Вопрос2:
Для преподавателя думали сделать так, как организован показ демо-новостей - через дополнительное меню, привязанное к разделам ИБ. Правда что будем делать, когда студентов станет хотя бы 100 - пока не знаем. Ведь тогда боковое меню непомерно разрастется. Но наверное можно будет использовать многоуровневую иерархию?
Всё просто, создаём фильтр, ищем либо по фамилиям, либо списком. Но тут без программирования вам не обойтись.
Цитата
Вопрос3: быть может мы принципиально ошибаемся, и такую задачу лучше решать в более сложной версии? Тогда как это оптимальнее делать в версии Эксперт?
Для реализации данной схемы вам функционала редакции "Старт" хватит с головой, если позволяют финансы приобрести старшую редакцию, лучше наймите программиста, выйдет быстрее и намного качественнее. Если решите разработать полнофункциональную систему с почтовыми уведомлениями, статусами, отчётами, напоминаниями студентам и преподавателям, то вам всё равно хватит редакции "Старт", но точно потребуется программист.
Уф. Вопросы?
ответил 17 Март, 14 от kaganpwnz (180 баллов)
00 голосов
Большое  спасибо за такой обстоятельный ответ да еще и на понятном языке.
Все таки хочется уточнить детали: 
Цитата
Код компонентов нужен?
С еще большей благодарностью принимаю Ваше предложение прислать примеры кодов. 
Цитата
1) Создаём пользовательское поле (допустим UF_ID_ACCESS ) и привязываем его к пользователю.
наверно имелось ввиду "привязываем его к разделу пользователя"? Ведь пользовательское поле создается в профиле пользователя? Если я не прав - уточните пожалуйста.
Цитата
2) Перед вызовом компонента " bitrix.news.list' " на странице добавляем скрипт извлечения значения собственно этого поля.
можно пример такого скрипта? и пример передачи переменной в номер раздела.

Цитата
Если моя формулировка точнее вашей, то тут возникает ещё 1 минимум ИБ, который будет хранить результаты отчётов и другие материалы, кроме задания. Связь будет осуществляться с помощью поля "привязка к Элементу".
А почему бы студенту не писать в тот же ИБ? Кажется сообразил - чтобы не иметь возможности редактировать задания преподавателя. Так?
ответил 08 Июль, 14 от Matter (100 баллов)
00 голосов
давай те я приведу пример страницы, где реализован данный механизм.

Код
 
<?CModule::IncludeModule("iblock") || die('Could not load "iblock" module.');?>

<?
$rsUser = CUser::GetByID($USER->GetID());               // получили инфо о пользователе.
$arUser = $rsUser->Fetch();
/* echo "<pre>"; print_r($arUser); echo "</pre>"; */                           // Здесь можем посмотреть какая информация нам доступна
?>

<?$rsData = CIBlockSection::GetList (Array(), Array("IBLOCK_ID"=>5, "ID"=>"$arUser[UF_BIKE]"), false,Array("UF_*"));    // тут получил все перемнные которые у меня содержаться 
в пользовательских полях самого раздела.
   while($arRes = $rsData->Fetch()) 
   { 
   $res_prise[]=$arRes;
   //print_r($arRes);
   } 
?>
   <table class="blue_table">
      <tr>
         <th>Type</th>
         <th>Price &#710;</th>
      </tr>
      <tr>
         <td>X2 Wheel bike:</td>
         <td><?echo $res_prise[0][UF_PRISEX2];?></td>
      </tr>
      <tr>
         <td> X3 Wheel bike:</td> 
         <td><?echo $res_prise[0][UF_PRISEX3];?></td>
      </tr>
   </table>
<br>
<?echo $res_prise[0][UF_DISCOUNT_PERSENT];?> discount is valid for rental of more than <?echo $res_prise[0][UF_DAY_DISCOUNT];?> days

<table > 
  <tbody> 
    <tr width="800"><td width="800"> 
        <div style="width:300px;">
   <?$APPLICATION->IncludeComponent("bitrix:news.list", "manager_list", array(            //Подключаю компонент - "bitrix:news.list"
   "IBLOCK_TYPE" => "bicycle",
   "IBLOCK_ID" => "5",
   "NEWS_COUNT" => "80",
   "SORT_BY1" => "ACTIVE_FROM",
   "SORT_ORDER1" => "DESC",
   "SORT_BY2" => "SORT",
   "SORT_ORDER2" => "ASC",
   "FILTER_NAME" => "",
   "FIELD_CODE" => array(
      0 => "ID",
      1 => "",
   ),
   "PROPERTY_CODE" => array(
      0 => "INVITE_DATE",
      1 => "",
      2 => "STATUS",
      3 => "",
   ),
   "CHECK_DATES" => "N",
   "DETAIL_URL" => "/rents/private_office/bike.php?ID=#ID#",                  //Страница детального просмотра - передаём индефикатор новости.
   "AJAX_MODE" => "N",
   "AJAX_OPTION_JUMP" => "N",
   "AJAX_OPTION_STYLE" => "Y",
   "AJAX_OPTION_HISTORY" => "N",
   "CACHE_TYPE" => "N",
   "CACHE_TIME" => "36000000",
   "CACHE_FILTER" => "N",
   "CACHE_GROUPS" => "Y",
   "PREVIEW_TRUNCATE_LEN" => "",
   "ACTIVE_DATE_FORMAT" => "d.m.Y",
   "SET_TITLE" => "Y",
   "SET_STATUS_404" => "N",
   "INCLUDE_IBLOCK_INTO_CHAIN" => "Y",
   "ADD_SECTIONS_CHAIN" => "Y",
   "HIDE_LINK_WHEN_NO_DETAIL" => "N",
   "PARENT_SECTION" => "$arUser[UF_BIKE]",                           // Собственно устанавливаем для пользователя родительский раздел, который мы вытащили в начале документа
   "PARENT_SECTION_CODE" => "",
   "DISPLAY_TOP_PAGER" => "N",
   "DISPLAY_BOTTOM_PAGER" => "N",
   "PAGER_TITLE" => "&#205;&#238;&#226;&#238;&#241;&#242;&#232;",
   "PAGER_SHOW_ALWAYS" => "Y",
   "PAGER_TEMPLATE" => "",
   "PAGER_DESC_NUMBERING" => "N",
   "PAGER_DESC_NUMBERING_CACHE_TIME" => "36000",
   "PAGER_SHOW_ALL" => "Y",
   "DISPLAY_DATE" => "Y",
   "DISPLAY_NAME" => "Y",
   "DISPLAY_PICTURE" => "Y",
   "DISPLAY_PREVIEW_TEXT" => "Y",
   "AJAX_OPTION_ADDITIONAL" => ""
   ),
   false
);?></div>
       </td> <td valign="top" > 
       </td> </tr>
   </tbody>
 </table>
 




 
ответил 08 Ноя, 14 от kaganpwnz (180 баллов)
00 голосов
Цитата
Цитата1) Создаём пользовательское поле (допустим UF_ID_ACCESS ) и привязываем его к пользователю.наверно имелось ввиду "привязываем его к разделу пользователя"? Ведь пользовательское поле создается в профиле пользователя? Если я не прав - уточните пожалуйста.
хм. само поле, мы привязываем к пользователю, т.есть создаём для объекта user, а значение конечно ИД раздела. В результате мы получим выпадающий список в профиле пользователя, где можно указать к какому разделу его прикрутить.

Цитата
2) Перед вызовом компонента " bitrix.news.list' " на странице добавляем скрипт извлечения значения собственно этого поля.

можно пример такого скрипта? и пример передачи переменной в номер раздела.
На странице выше указал, вот он отдельно:

Код
<?
$rsUser = CUser::GetByID($USER->GetID());               // получили инфо о пользователе.
$arUser = $rsUser->Fetch();
/* echo "<pre>"; print_r($arUser); echo "</pre>"; */                           // Здесь можем посмотреть какая информация нам доступна
?>
 
Важно данный скрипт выполнять перед вызовом на страницу компонента новостей.
Цитата
Цитата Если моя формулировка точнее вашей, то тут возникает ещё 1 минимум ИБ, который будет хранить результаты отчётов и другие материалы, кроме задания. Связь будет осуществляться с помощью поля "привязка к Элементу". А почему бы студенту не писать в тот же ИБ? Кажется сообразил - чтобы не иметь возможности редактировать задания преподавателя. Так?
Ну можно с правами начудить так что и в 1 ИБ писать можно, Но! Структура заданий и отчётов, наверняка разные. Что-бы иметь возможность:
а) к одному заданию создавать несколько отчётов- материалов
б) Упростить систему учёта "когда, кто и что загрузил-изменил". Данная функция будет отслеживаться Битриксом в таком случае автоматически.
в) Ну и просто так сделать правильнее.
Представим на минуту чо у вас 100 студентов. Автоматически 100 разделов информационного блока, в каждом разделе по 3-4 задания, у каждого задания 2-3 отчёта + сопутствующие материалы.
В результате нехитрых исчислений, элементов ИБ получается 600-1200 элементов. Найти что-то прицельно в таком варианте будет невозможно.
Далее. Одно задание (Допустим с вариантами от 1 до N) нужно добавить группе (25 студентов). каждый раз загружать и копировать ? нехватит ни места на сервере, ни времени профессора. Если задания и ответы вынесены в отдельный ИБ, то мы просто указываем что данное задание привязать к студентам и ИД от 1 до N. сэкономит кучу времени.
Минус такого подхода - довольно сложно будет раздать права пользователям на моменте проектирования. Но у опытного человека это займёт примерно 3-4 часа вместе с тестом.
Я понимаю что всегда хочется сэкономить денег, но что-бы данная система реально удобно работала, вам необходим специалист. Сам сталкивался с правами доступа, работой кода модуля Информационные блоки, есть весьма не очевидные вещи, не зная которых, догадаться самому невозможно. Для Специалиста разработка данного функционала займёт максимум неделю, вы же хорошо если за два месяца справитесь, и боюсь работать будет не стабильно.
Не могу сказать за весь рынок, но , я предполагаю, при обращении в компанию партнёра Битрикс вам данный функционал встанет в 50-60 Т.р. С подготовкой ТЗ, и прочими бумагами. При обращении к отдельному специалисту - 20 т.р +- по желанию со всякими дополнениями.
ответил 07 Март, 15 от kaganpwnz (180 баллов)

Похожие вопросы

0 голосов
7 ответов
0 голосов
3 ответов
спросил 19 Фев, 14 от Rogarond (820 баллов)
+1 голос
1 ответ
+1 голос
1 ответ