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

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

skype: metsof
email: accusser@gmail.com

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

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

Авторизация

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

Сайдбар

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

17 апр. 2014

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


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


Сниппет Register



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


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



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

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


Register preHooks



<code><?php
$output = true;
$fields = $hook->getValues();
/* User's photo */
if (!empty($fields['photo'])) {
    // valid extensions
    $extArray = array('jpg', 'jpeg', 'gif', 'png');
    // create temporary path for this form submission
    $uploadPath = 'assets/uploads/temp/';
    $targetPath = $hook->modx->config['base_path'] . $uploadPath;
    // get uploaded file names:
    $submittedFiles = array_keys($_FILES);
    // loop through files
    foreach ($submittedFiles as $sf) {
        // Get Filename and make sure its good.
        $filename = basename($_FILES[$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 != '') {
            // is this the right type of file?
            if (in_array($ext, $extArray)) {
                //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)) {
                    // Change the file permissions if allowed
                    chmod($uploadFilePath, 0755);
                    // remove the file
                    unlink($uploadFilePath);
                }
                // is the file moved to the proper folder successfully?
                if (move_uploaded_file($_FILES[$sf]['tmp_name'], $uploadFilePath)) {
                    $hook->setValue($sf, $uploadPath . $filename);
                    if (!chmod($uploadFilePath, 0644)) {
                        /* some debug function */
                    }
                } else {
                    
                    // File not uploaded
                    $errorMsg = 'There was a problem uploading the file.';
                    $hook->addError($sf, $errorMsg);
                    
                    // generate submission error
                    $output = false; 
                }
            } else {
                
                // File type not allowed
                $errorMsg = 'Type of file not allowed.';
                $hook->addError($sf, $errorMsg);
                
                // generate submission error
                $output = false;
            }
        } else {
            
            // if no file, don't give error, but just return blank
            $hook->setValue($sf, '');
        }
    }
}
return $output;</code>


Register postHooks


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

<code><?php
/** @var modUser $user */
$user = & $fields['register.user'];
$userId = $user->get('id');
/** @var modUserProfile $profile  */
$profile = & $fields['register.profile'];
if (!empty($fields['photo'])) {
    $photo = array();
    $photo['temp'] = $fields['photo'];
    $photo['basename'] = basename($photo['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['newdir'] = 'assets/uploads/profiles/' . $userId . '/';
    $photo['newfilepath'] = $photo['newdir'] . $photo['basename'];
    $photo['target'] = $hook->modx->config['base_path'] . $photo['temp'];
    $photo['moved'] = $hook->modx->config['base_path'] . $photo['newfilepath'];
    // make the user's private directory
    mkdir($photo['newdir'], 0755, true);
    $photoUpdated = false;
    // move the photo from the temporary path to the new one
    if (!rename($photo['target'], $photo['moved'])) {
        // if "rename" function fails, try "copy" instead.
        if (!copy($photo['target'], $photo['moved'])) {
            // 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));
        } else {
            // if copy succeeded, delete the old temporary picture
            unlink($photo['target']);
            $photoUpdated = true;
        }
    } else {
        $photoUpdated = true;
    }
    if ($photoUpdated) {
        /**
        * Теперь мы обновляем профиля
         * Переменная $ профиль приходит сверху посвящения.
         */
        $profile->set('photo', $photo['newfilepath']);
        $profile->save();
        /**
         * Yeah! xPDO rocks! Simply like that!
         */
    }
}
return TRUE;
</code>

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







Комментарии (1)

  1. Дмитрий 28 марта 2016, 20:17 # 0
    Здравствуйте! У меня загружается фото при регистрации, а заменить я его не могу, после замены путь прописывается от корня сайта: имясайта/123.img, где, конечно, ничего нету… но ничего не появляется и в папке assets/uploads/profiles/ Куда копать, подскажите?

    Услуги по MODX Revolution

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

    Техническая оптимизация сайта

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

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

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

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

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

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

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

    Скидка 30%

    Уважаемые пользователи сайта!

    C 1 марта по 10 марта скидка 30% на все готовые сайты!
    Перейти к просмотру »