We launched new forums in March 2019—join us there. In a hurry for help with your website? Get Help Now!
    • 46760
    • 4 Posts
    Приветствую!
    Не так давно изучаю modx в связи с этим возник вопрос:
    Как разрешить загружать более одной аватарки из настроек профиля пользователя!?
    Регистрация и аутентификация организована на базе доп. Login, одну аватарку можно загрузить при помощи снипета Avatar (автора не знаю, нашел на одном из форумов посвящённым cms), его содержимое:
    <?php
    if (empty($modx)) return '';
    
    // initialize output;
    $output = true;
    $counter = 1;
     
    // valid extensions
    $ext_array = array('jpg', 'JPG', 'JPEG', 'png');
     
    // create unique path for this form submission
    $uploadpath = 'assets/avatars/';
     
    // get full path to unique folder
    $target_path = $modx->config['base_path'] . $uploadpath;
    
    $sf = 'avatar';
    
    $file = $_FILES[$sf];
    
    // Get Filename and make sure its good.
    $filename = basename( $file['name'] );
    
    // Get file's extension
    $ext = pathinfo($filename, PATHINFO_EXTENSION);
    $ext = mb_strtolower($ext); // case insensitive
    
    // is the file name empty (no file uploaded)
    if($filename != '' && isset($_POST['updpword-btnnn'])) {
        // is this the right type of file?
        if(in_array($ext, $ext_array)) {
            // clean up file name and make unique
            $filename = 'user'.$modx->user->get('id') . '.' . $ext;
            
            // full path to new file
            $myTarget = $target_path . $filename;
            $myTargetTemp = $target_path . '_' . $filename;
            if(move_uploaded_file($file['tmp_name'], $myTargetTemp)) {
                require_once MODX_CORE_PATH.'model/phpthumb/phpthumb.class.php';
        		$phpThumb = new phpThumb();
        		$phpThumb->setSourceFilename($myTargetTemp);
        		$phpThumb->setParameter('w', 150);
        		$phpThumb->setParameter('h', 150);
        		$phpThumb->setParameter('zc', '1');
        		$phpThumb->setParameter('q', '150');
        		if ($phpThumb->GenerateThumbnail()) {
        			if ($phpThumb->RenderToFile($myTarget)) {
        				$avas=glob($target_path . '/user'.$modx->user->get('id') . ".*");
                        if(is_array($avas)) foreach ($avas as $fpath) {
                            if(basename($fpath) != basename($myTarget)) @unlink($fpath);
                        }
                        
                        // set a new placeholder with the new full path (if you need it in subsequent hooks)
                        $myFile = $uploadpath . $filename;
                        $hook->setValue($sf,$myFile);
                        // set the permissions on the file
                        if (!chmod($myTarget, 0644)) { /*some debug function*/ }
        			} else {
                        // File not uploaded
                        $errorMsg = 'There was a problem uploading the file.';
                        $hook->addError($sf, $errorMsg);
                        $output = false; // generate submission error
                    }
        		}
            } else {
                // File not uploaded
                $errorMsg = 'There was a problem uploading the file.';
                $hook->addError($sf, $errorMsg);
                $output = false; // generate submission error
            }
            @unlink($myTargetTemp);
    
            /*
            // is the file moved to the proper folder successfully?
            if(move_uploaded_file($file['tmp_name'], $myTarget)) {
                // set a new placeholder with the new full path (if you need it in subsequent hooks)
                $myFile = $uploadpath . $filename;
                $hook->setValue($sf,$myFile);
                // set the permissions on the file
                if (!chmod($myTarget, 0644)) {
                    //some debug function
                }
            } else {
                // File not uploaded
                $errorMsg = 'There was a problem uploading the file.';
                $hook->addError($sf, $errorMsg);
                $output = false; // generate submission error
            }
            */
         
        } else {
            // File type not allowed
            $errorMsg = 'Type of file not allowed.';
            $hook->addError($sf, $errorMsg);
            $output = false; // generate submission error
        }
    } else {
        $hook->setValue($sf, '');
    }
    
    return $output; 

    Помогите дописать код, что бы была возможность загружать 2,3 или даже 5 изображений.
    С уважением!
      • 40921
      • 27 Posts
      Аватар на то и аватар, чтобы быть одним. Все что более 1 изображения - это уже галерея. Если вы хотите что-то типа ВК, то это уже не входит в концепцию модэкс. Здесь пользователи занимаются немного другими вещами.
      Вообщем, лично я сомневаюсь, что кому-то приходило в голову писать подобный велосипед, хотя возможно все. Если бы мне понадобилось подобное, я бы, наверное, отталкивался от создания доп. таблицы с ид. пользователя, именами файлов и т. д.
        • 46760
        • 4 Posts
        dapperkop, ВК тут не при чем smiley
        Я просто хочу дать возможность загружать из настроек профиля не 1-но изображение (аватар) как сейчас, а 3 или 4-е, при том что 1-е так и должно оставаться аватаром, а еще 2-3 картинки просто выводились в профиль если их загрузили конечно...

        Вот при добавлении документа, можно же в ТВ записывать адреса изображений и потом легко выводить, а как заставить загружать и записывать адреса например в поля пользователей (user extended field) этот вариант мне бы подошел!?
          • 40921
          • 27 Posts
          Вы на рево пытаетесь сделать? Дело в том, что в эво никаких user extended field я не припомню. На рево, я думаю также дела обстоят. Загляните в базу - будет виднее.
            • 46760
            • 4 Posts
            dapperkop, да! Я свое знакомство с modx начал с revo всего месяц но уже есть первые результаты, до этого работал с wp и dle которые курят в сторонке!

            В базу незачем заглядывать, поля я уже создавал, пользователи при редактировании профиля могут их заполнять ну и вывожу их значения в профиль если они заполнены. А вот как загружать файл и при этом записывать туда относительный путь к этому файлу я ума не приложу...
            з.ы. Приношу свои изменения Extended Custom я имел введу!