"Уже сегодня делай то, о чем другие будут думать завтра!"

Загрузка фото пользователем при регистрации

Сайдбар

Способ загрузки фото пользователя в систему управления контентом MODX Revo при регистрации (не при обновлению профиля), потому что при регистрации, пользователь не имеет еще анкету, в то время как путь к картинке должен быть сохранен в базе данных профиля пользователя.

Еще одно соображение, чтобы использовать этот способ, это то что картинка должна находиться в папке пользователя. Ну, логически все пользователи имеют собственные папки.

В этом примере используется упрощенная форма, вы же можете добавлять поля которые вам необходимы при регистрации пользователей с помощью сниппета Register

Сниппет Register

[[!Register? &preHooks=`register.preHook` &postHooks=`register.postHook` &placeholderPrefix=`reg.` ]]

Загрузка файла

Поле для загрузки фото выглядит так:

<form action="&#91; &#91;~[ &#91;*id]]]]" method="post" enctype="multipart/form-data" >
   <!-- здесь другие поля формы ... -->
   <input type="file" name="photo" >
   <input type="submit" name="login-register-btn " >
</form>

Register preHooks

<?php
$output = true;
$fields = $hook->getValues();
/* User's photo */
if (!empty($fields&#91;'photo'])) &#123;
    // valid extensions
    $extArray = array('jpg', 'jpeg', 'gif', 'png');
    // create temporary path for this form submission
    $uploadPath = 'assets/uploads/temp/';
    $targetPath = $hook->modx->config&#91;'base_path'] . $uploadPath;
    // get uploaded file names:
    $submittedFiles = array_keys($_FILES);
    // loop through files
    foreach ($submittedFiles as $sf) &#123;
        // Get Filename and make sure its good.
        $filename = basename($_FILES&#91;$sf]['name']);
        // Get file's extension
        $ext = pathinfo($filename, PATHINFO_EXTENSION);
        
        // case insensitive
        $ext = mb_strtolower($ext);
        
        // is the file name empty (no file uploaded)
        if ($filename != '') &#123;
            // is this the right type of file?
            if (in_array($ext, $extArray)) &#123;
                //create file called the user name
                $filename = mb_strtolower($filename);
                // full path to new file
                $uploadFilePath = $targetPath . $filename;
                // create directory to move file into if it doesn't exist
                @mkdir($targetPath, 0755, true);
                if (file_exists($uploadFilePath)) &#123;
                    // Change the file permissions if allowed
                    chmod($uploadFilePath, 0755);
                    // remove the file
                    unlink($uploadFilePath);
                &#125;
                // is the file moved to the proper folder successfully?
                if (move_uploaded_file($_FILES&#91;$sf]['tmp_name'], $uploadFilePath)) &#123;
                    $hook->setValue($sf, $uploadPath . $filename);
                    if (!chmod($uploadFilePath, 0644)) &#123;
                        /* some debug function */
                    &#125;
                &#125; else &#123;
                    
                    // File not uploaded
                    $errorMsg = 'There was a problem uploading the file.';
                    $hook->addError($sf, $errorMsg);
                    
                    // generate submission error
                    $output = false; 
                &#125;
            &#125; else &#123;
                
                // File type not allowed
                $errorMsg = 'Type of file not allowed.';
                $hook->addError($sf, $errorMsg);
                
                // generate submission error
                $output = false;
            &#125;
        &#125; else &#123;
            
            // if no file, don't give error, but just return blank
            $hook->setValue($sf, '');
        &#125;
    &#125;
&#125;
return $output;

Register postHooks

Это самая важная часть, где картина вот-вот будет переехала в новый личной папке пользователя, и мы также собираемся обновить профиль пользователя после этого.

<?php
/** @var modUser $user */
$user = & $fields&#91;'register.user'];
$userId = $user->get('id');
/** @var modUserProfile $profile  */
$profile = & $fields&#91;'register.profile'];
if (!empty($fields&#91;'photo'])) &#123;
    $photo = array();
    $photo&#91;'temp'] = $fields&#91;'photo'];
    $photo&#91;'basename'] = basename($photo&#91;'temp']);
    /***********************************************************************
     * XXX: IMPORTANT XXX
     *
     * Create unique path here for this profile updating.
     * You can change this as you wish.
     * The $userId variable comes from above initiation.
     *
     ***********************************************************************/
    $photo&#91;'newdir'] = 'assets/uploads/profiles/' . $userId . '/';
    $photo&#91;'newfilepath'] = $photo&#91;'newdir'] . $photo&#91;'basename'];
    $photo&#91;'target'] = $hook->modx->config&#91;'base_path'] . $photo&#91;'temp'];
    $photo&#91;'moved'] = $hook->modx->config&#91;'base_path'] . $photo&#91;'newfilepath'];
    // make the user's private directory
    mkdir($photo&#91;'newdir'], 0755, true);
    $photoUpdated = false;
    // move the photo from the temporary path to the new one
    if (!rename($photo&#91;'target'], $photo&#91;'moved'])) &#123;
        // if "rename" function fails, try "copy" instead.
        if (!copy($photo&#91;'target'], $photo&#91;'moved'])) &#123;
            // just dump the log report to the MODX's error log,
            // because both "rename" and "copy" functions fail
            $hook->modx->log(modX::LOG_LEVEL_ERROR, __FILE__ . ' ');
            $hook->modx->log(modX::LOG_LEVEL_ERROR, __LINE__ . ': $userId ' . $userId);
            $hook->modx->log(modX::LOG_LEVEL_ERROR, __LINE__ . ': $photo ' . print_r($photo, 1));
        &#125; else &#123;
            // if copy succeeded, delete the old temporary picture
            unlink($photo&#91;'target']);
            $photoUpdated = true;
        &#125;
    &#125; else &#123;
        $photoUpdated = true;
    &#125;
    if ($photoUpdated) &#123;
        /**
        * Теперь мы обновляем профиля
         * Переменная $ профиль приходит сверху посвящения.
         */
        $profile->set('photo', $photo&#91;'newfilepath']);
        $profile->save();
        /**
         * Yeah! xPDO rocks! Simply like that!
         */
    &#125;
&#125;
return TRUE;

Вот и все. Теперь пользователь может загрузить фотографию, когда регистрируется на сайте.

Хостинг для MODX

Смотрите также:

Asset Manager MODX Revolution

Asset Manager MODX Revolution

Смотреть

Quickstart Buttons

Quickstart Buttons

Смотреть

Как обновить MODX Revolution

Как обновить MODX Revolution

Смотреть


Услуги по MODX Revolution

Посмотреть все услуги

Оптимизация сайта

Оптимизация сайта

Заказав услуги по технической оптимизации сайта мы избавим вас от ошибок присутствующих на сайте, а так же увеличим скорость работы вашего сайта.

Подробнее & Заказать

Создание сайта на MODX

Создание сайта на MODX

Мы создадим для вас такой сайт, который подойдет именно в вашем случае и станет отличным инструментом привлечения клиентов и увеличения продаж.

Подробнее & Заказать

Перенос сайта на MODX

Перенос сайта на MODX

Работа по переносу сайта на MODX осуществляется в максимально короткие сроки. Стоимость зависит от сложности переносимого сайта

Подробнее & Заказать

Продвижение сайта на MODX

Продвижение сайта на MODX

Если вы хотите получить быстрые и ощутимые результаты, подняться в топ в минимальные сроки, то доверьте нам продвижение своего сайта.

Подробнее & Заказать

Контактная информация

По всем интересующим вас вопросам связывайтесь при помощи контактной информации приведенной на этой странице!

telegram: @Accusser
skype: metsof
email: accusser@gmail.com

В социальных сетях...

Форма обратной связи

Sign In