We launched new forums in March 2019—join us there. In a hurry for help with your website? Get Help Now!
    • 7431
    • 3 Posts
    Друзья, появилась такая задача: огранизовать личный кабинет для 10-15 клиентов. Кабинет должен быть доступен по логин/пароль, который каждому клиенту будет заранее присвоен администратором сайта. А в самом личном кабинете, скорее - это просто личные странички где будет размещаться какая-то информация для каждого клиента в отдельности.. ну, например, документы для загрузки, какой-то текст и т.п.

    Вопрос, как такое организовать? Может, кто уже сталкивался?

    Спасибо!
      • 16111
      • 101 Posts
      Ну тут можно написать не сложный снипет, основываясь на API MODx. Вкратце: сначало смотрим авторизован ли юзер, если да то чекаем его ИД, и выводим нужную инфу для него. Можно конечно юзать готовые решения типо WebloginPE или стандартные снипеты, но мне они не нравятся, поэтому данные задачи я пишу сам)
        Basic Manager
        Хочешь ускорить развитие Basic Manager? Хочешь создавать невероятно красивые фотогалереи и слайдшоу за 1 клик? Пожертвуй деньги на развитие плагина, WMR: R148348561691. Помни, что даже 50 рублей являются стимуляцией к разработке.

        Я в контакте
        • 7431
        • 3 Posts
        Ну и ты и помог!)

        Я только с админкой начинаю ковыряться, а ты уже про api! Я понял что есть стандартные средства modx, хотел бы начать с них, но типовых решений своей задачи не нашел тут( или руки кривые или что-то еще..
        Нужно довольно простое решение!)
          • 7368
          • 264 Posts
          Довольно простого решения просто нету. Я делаю, примерно так же, как описал kobezza, при регистрации создается документ, у которого createdby = id пользователя, который зарегистрировался. Потом, при входе на эту страницу, вызываю самописный сниппет, основываясь на API, в котором проверяется сессия на ID пользователя, и если она совпадает с полем документа createdby, выдается ссылка на редактирование документа. Пока дальше не реализовывал, но сам принцип работает, и очень даже приятно)
            • 7431
            • 3 Posts
            Может быть я не совсем правильно описал задау. Я, администратр сайта, сам создаю 10-15 web-пользователей (без права редактирования). Задаю для каждого из них login/pass. А потом его передаю каждому, к примеру, по эл. почте, руками..

            Используя свой логин и пароль, клиент сможет попасть на свою личную страницу, где, к примеру, будет что-то конфиденциальное.

            Пока пришел к тому, что надо создать web-пользователя, создать новую группу, в которую включить этого web-пользователя, создать группу ресурсов, куда добавить эту личную страничку.. И так для каждого web-поьзователя в отдельности. Их будет немного 10-15 всего.. потому, думаю, можно и руками все сделать..

            Работаю над этим дальше. Осваиваю снипет webLogin..
              • 12816
              • 32 Posts
              На самом деле сниппета WebLogin тебе хватит с головой. Но аот мне интересен вопрос касательно редактирования id пользователя. Т.е. в базу пользователь пишется с id, который назначили вручную
                • 2458
                • 27 Posts
                Смотрим сюда:

                сниппет Registration

                <?php
                $post = $_POST;
                unset($_POST);

                if(!empty($post))
                {
                $error = array();

                foreach($post as $k=>$v)
                {
                $post[$k] = $modx->db->escape($v);
                }

                $web_users = $modx->getFullTableName(’web_users’);
                $web_user_attributes = $modx->getFullTableName(’web_user_attributes’);
                $web_user_settings = $modx->getFullTableName(’web_user_settings’);
                $site_content= $modx->getFullTableName(’site_content’);

                if(empty($post[’company’]))
                {
                $error[] = "Название компании/ИП";
                }
                if(empty($post[’fullname’]))
                {
                $error[] = "ФИО представителя";
                }
                if(empty($post[’email’]) || !preg_match("/^(([\w-\s]+)|([\w-]+(?:\.[\w-]+)*)|([\w-\s]+)([\w-]+(?:\.[\w-]+)*))(@((?:[\w-]+\.)*\w[\w-]{0,66})\.([a-z]{2,6}(?:\.[a-z]{2})?)$)|(@\[?((25[0-5]\.|2[0-4][0-9]\.|1[0-9]{2}\.|[0-9]{1,2}\.))((25[0-5]|2[0-4][0-9]|1[0-9]{2}|[0-9]{1,2})\.){2}(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[0-9]{1,2})\]?$)/i",$post[’email’]))
                {
                $error[] = "Электронная почта";
                }
                if(empty($post[’username’]))
                {
                $error[] = "Логин";
                }
                if(empty($post[’password’]))
                {
                $error[] = "Пароль";
                }

                $query = "SELECT {$web_users}.`id` FROM {$web_users} LEFT JOIN {$web_user_attributes} ON {$web_user_attributes}.`email` = ’{$post[’email’]}’ WHERE {$web_users}.`username`=’{$post[’username’]}’ ";
                $query = $modx->db->query($query);
                if(mysql_num_rows($query) > 0)
                {
                $error[] = "Имя пользователя\емейл используются";
                }

                if(count($error) == 0)
                {
                $md5pass = md5($post[’password’]);
                $query = "INSERT INTO {$web_users} (`username`, `password`) VALUES (’{$post[’username’]}’, ’{$md5pass}’)";
                $modx->db->query($query);
                $user_id = mysql_insert_id($modx->db->conn);
                $query = "INSERT INTO {$web_user_attributes} (`internalKey`, `fullname`, `email`) VALUES (’{$user_id}’, ’{$post[’fullname’]}’, ’{$post[’email’]}’)";
                $modx->db->query($query);
                $userData = $post;

                unset($userData[’password’]);
                unset($userData[’username’]);
                unset($userData[’fullname’]);
                unset($userData[’email’]);

                $userData = base64_encode(serialize($userData));

                $query = "INSERT INTO {$web_user_settings} (`webuser`, `setting_name`, `setting_value`) VALUES (’{$user_id}’, ’user_data’, ’{$userData}’)";
                $modx->db->query($query);

                $date = time();

                $menuindex = 0;

                foreach($modx->documentMap as $k=>$v)
                {
                if(array_key_exists(86, $v)) ЗДЕСЬ УКАЗЫВАЕМ id ПАПКИ В КОТОРУЮ СОХРАНЯЕМ СТРАНИЦЫ ПОЛЬЗОВАТЕЛЕЙ
                {
                $menuindex ++;
                }
                }

                $query = "INSERT INTO {$site_content} (
                `type`, `contentType`, `pagetitle`, `longtitle`, `description`, `alias`,
                `link_attributes`, `published`, `pub_date`, `unpub_date`, `parent`, `isfolder`,
                `introtext`, `content`, `richtext`, `template`, `menuindex`, `searchable`,
                `cacheable`, `createdby`, `createdon`, `editedby`, `editedon`, `deleted`,
                `deletedon`, `deletedby`, `publishedon`, `publishedby`, `menutitle`, `donthit`,
                `haskeywords`, `hasmetatags`, `privateweb`, `privatemgr`, `content_dispo`, `hidemenu`)

                VALUES (
                ’document’, ’text/html’, ’{$post[’company’]}’, ’’,’’, ’user-{$user_id}’,
                ’’,’1’,’0’,’0’,’86’,’0’,
                ’’,’’,’1’,’10’,’{$menuindex}’, ’0’,
                ’1’,’{$user_id}’,’{$date}’, ’0’,’0’,’0’,
                ’0’,’0’,’{$date}’,’1’,’’,’0’,
                ’0’,’0’,’0’,’0’,’0’,’0’
                )";

                $modx->db->query($query);

                $html = "<p><h4>Поздравляем! Вы успешно зарегистрировались на сайте, теперь вы можете выполнить вход, используя логин и пароль, указанные при регистрации</h4></p>";
                $message = "Вы успешно зарегистрировались на сайте {$modx->confing[’site_url’]}
                логин: {$post[’username’]}
                пароль; {$post[’password’]}
                ";
                $modx->runSnippet(’SendEmail’, array(’subject’ => ’Регистрация на сайте ’.$modx->config[’site_url’], ’email’=>$post[’email’], ’message’ =>$message));
                return $html;
                }

                if(count($error) > 0)
                {
                $post[’error’] = "<div class=’error’><p>Проверьте поля: ".implode(" - ", $error)."</p><p>Поля, отмеченные (*) - обязательны для заполнения.</p></div>";
                }
                $html = $modx->parseChunk("Registration-Tpl", $post, "[+", "+]");ЗДЕСЬ ШАБЛОН ФОРМЫ РЕГИСТРАЦИИ

                return $html;
                }
                $html = $modx->getChunk("Registration-Tpl"); ЗДЕСЬ ШАБЛОН ФОРМЫ РЕГИСТРАЦИИ

                return $html;
                ?>

                Это регистрация пользователя с созданием отдельного документа в папке
                Вход на сайт с помощью сниппета webLogin.

                Удачи.