Appelé une image propre à un utilisateur

elmajigo -  
 elmajigo -
Bonjour, je vais faire de mon mieux pour vous expliquer la situation, qui pour moi est très complexe. Je suis administrateur d'un site social pour un petit groupe d'amis créé via un CMS. Il est donc possible de changer sa photo de profile et l'image de fond, comme je désirais customiser un minimum j'ai mis les mains dans le code principalement au niveau du CSS que je maîtrise plus ou moins et ce pour rendre l'image de fond fix, comme vous le savez cette fameuse position: FIXED pose des problèmes au niveau des iPhone et iPad ... J'ai donc trouvé un bout de code qui outrepasse ce souci mais, il me demande l'Url de l'image dans cette ligne:

<img id="wpfullbg" src="" >


Et bien sûr, je ne peux entrer une URL normal, car l'image de fond est propre à chaque utilisateur, à partir de là je me suis mis à tourner en rond m'arracher les cheveux sans résultat, je m'en suis donc remis à vous pour un petit coup de mains :) J'espère avoir été clair dans mes indications sur mon problème, car je ne sais même pas s'il est possible de le faire.
A voir également:

4 réponses

Atropa Messages postés 1940 Date d'inscription   Statut Membre Dernière intervention   274
 
bonjour,

trouve la balise image pour laquelle tu as modifié le css et remplace l'id de la balise par celui que tu écris ici.

sans code c'est difficile de t'en dire plus
0
elmajigo
 
<?php

//let us use the class to aboid name space collision with ever growing bp plugins

class BPProfileBGChanger{
  
    //php4 constructor
function BPProfileBGChanger(){
        $this->__construct();
    }
 //php5 constructor   
function __construct() {
      
      //load textdomain
      add_action ( 'bp_loaded', array(&$this,'load_textdomain'), 2 );
        //setup nav
      add_action( 'bp_xprofile_setup_nav',array(&$this,'setup_nav' ));
        
      //inject custom css class to body
      add_filter('body_class',array(&$this,'get_body_class'),30);
      //add css for background change
  
      add_action('wp_head',array(&$this,'inject_css'));
      add_action('wp_print_scripts',array(&$this,'inject_js'));
      add_action('wp_ajax_bppg_delete_bg',array(&$this,'ajax_delete_current_bg'));
        
}

//translation
function load_textdomain(){
        
    $locale = apply_filters( 'bp_custom_bg_for_profile_load_textdomain_get_locale', get_locale() );
     
	// if load .mo file
    if ( !empty( $locale ) ) {
		$mofile_default = sprintf( '%slanguages/%s.mo', plugin_dir_path(__FILE__), $locale );
              
		$mofile = apply_filters( 'bp_custom_bg_for_profile_load_textdomain_mofile', $mofile_default );
		
                if ( file_exists( $mofile ) ) {
                    // make sure file exists, and load it
			load_textdomain( 'bppg', $mofile );
		}
	} 
 
}
//adda sub nav to My profile for chaging Background
function setup_nav(){
    global $bp;
    $profile_link = $bp->loggedin_user->domain . $bp->profile->slug . '/';
    bp_core_new_subnav_item( array( 'name' => __( 'Change Background', 'bppg' ), 'slug' => 'change-bg', 'parent_url' => $profile_link, 'parent_slug' => $bp->profile->slug, 'screen_function' =>array(&$this,'screen_change_bg'), 'position' => 40 ) );
   
}

//screen function


function screen_change_bg(){
    global $bp;
    //if the form was submitted, update here
     if(!empty($_POST['bpprofbg_save_submit'])){
                if(!wp_verify_nonce($_POST['_wpnonce'],"bp_upload_profile_bg"))
                         die(__('Security check failed','bppbg'));
                //handle the upload
               if( $this->handle_upload())
                  bp_core_add_message(__('Background uploaded successfully!','bppg'));
               
              
}

    //hook the content
    add_action( 'bp_template_title', array(&$this,'page_title' ));
    add_action( 'bp_template_content',array(&$this, 'page_content') );
    bp_core_load_template( apply_filters( 'bp_core_template_plugin', 'members/single/plugins' ) );
}
    //Change Background Page title
function page_title(){
		echo '<h3>'.__('Profile Photo','bppbg').'</h3>';
}
    //Upload page content
function page_content(){
	  	   
	    ?>
    <form name="bpprofbpg_change" method="post" class="standard-form" enctype="multipart/form-data">
        
        <?php  $image_url=  bppg_get_image();
        if(!empty($image_url)):?>
        <div id="bg-delete-wrapper">
            
            <div class="current-bg">
                    <img src="<?php echo $image_URL;?>" alt="current background" />
            </div>
            <a href='#' id='bppg-del-image'><?php _e('Delete','bppg');?></a>
       </div>
       <?php endif;?> 
        <p><?php _e('If you want to change your profile background, please upload a new image.','bppg');?></p>
        <label for="bprpgbp_upload">
		<input type="file" name="file" id="bprpgbp_upload"  class="settings-input" />
	</label>
		
	<?php wp_nonce_field("bp_upload_profile_bg");?>
        <input type="hidden" name="action" id="action" value="bp_upload_profile_bg" />
	 <p class="submit"><input type="submit" id="bpprofbg_save_submit" name="bpprofbg_save_submit" class="button" value="<?php _e('Save','bppg') ?>" /></p>
	</form>
    <?php
}

//handles upload, a modified version of bp_core_avatar_handle_upload(from bp-core/bp-core-avatars.php)
function handle_upload( ) {
	global $bp;

	//include core files
	require_once( ABSPATH . '/wp-admin/includes/file.php' );
        $max_upload_size=$this->get_max_upload_size();
        $max_upload_size=$max_upload_size*1024;//convert kb to bytes
	$file=$_FILES;
        
        //I am not changing the domain of erro messages as these are same as bp, so you should have a translation for this
        $uploadErrors = array(
		0 => __('There is no error, the file uploaded with success', 'buddypress'),
		1 => __('Your image was bigger than the maximum allowed file size of: ', 'buddypress') . size_format($max_upload_size),
		2 => __('Your image was bigger than the maximum allowed file size of: ', 'buddypress') . size_format($max_upload_size),
		3 => __('The uploaded file was only partially uploaded', 'buddypress'),
		4 => __('No file was uploaded', 'buddypress'),
		6 => __('Missing a temporary folder', 'buddypress')
	);

	if ( $file['error'] ) {
		bp_core_add_message( sprintf( __( 'Your upload failed, please try again. Error was: %s', 'buddypress' ), $uploadErrors[$file['file']['error']] ), 'error' );
		return false;
	}

	if ( ! ($file['file']['size']<$max_upload_size) ) {
		bp_core_add_message( sprintf( __( 'The file you uploaded is too big. Please upload a file under %s', 'buddypress'), size_format($max_upload_size) ), 'error' );
		return false;
	}
        
	if ( ( !empty( $file['file']['type'] ) && !preg_match('/(jpe?g|gif|png)$/i', $file['file']['type'] ) ) || !preg_match( '/(jpe?g|gif|png)$/i', $file['file']['name'] ) )
	 {
		bp_core_add_message( __( 'Please upload only JPG, GIF or PNG photos.', 'buddypress' ), 'error' );
		return false;
	}


	$uploaded_file = wp_handle_upload( $file['file'], array( 'action'=> 'bp_upload_profile_bg' ) );

	//if file was not uploaded correctly
        if ( !empty($uploaded_file['error'] ) ) {
		bp_core_add_message( sprintf( __( 'Upload Failed! Error was: %s', 'buddypress' ), $uploaded_file['error'] ), 'error' );
		return false;
	}

        //assume that the file uploaded succesfully
        //delete any previous uploaded image
        self::delete_bg_for_user();
        //save in usermeta
        update_user_meta(bp_loggedin_user_id(),'profile_bg',$uploaded_file['url']);
        update_user_meta(bp_loggedin_user_id(),'profile_bg_file_path',$uploaded_file['file']);
        do_action('bppg_background_uploaded',$uploaded_file['url']);//allow to do some other actions when a new background is uploaded
	return true;
}

//get the allowed upload size
//there is no setting on single wp, on multisite, there is a setting, we will adhere to both
function get_max_upload_size(){
    $max_file_sizein_kb=get_site_option('fileupload_maxk');//it wil be empty for standard wordpress
    
    
    if(empty($max_file_sizein_kb)){//check for the server limit since we are on single wp
    
        $max_upload_size = (int)(ini_get('upload_max_filesize'));
        $max_post_size = (int)(ini_get('post_max_size'));
        $memory_limit = (int)(ini_get('memory_limit'));
        $max_file_sizein_mb= min($max_upload_size, $max_post_size, $memory_limit);
        $max_file_sizein_kb=$max_file_sizein_mb*1024;//convert mb to kb
}
return apply_filters('bppg_max_upload_size',$max_file_sizein_kb);



}
//inject css
function inject_css(){
    $image_url=  bppg_get_image();
    if(empty($image_url)||  apply_filters('bppg_iwilldo_it_myself',false))
        return;
    ?><style type="text/css">

body.is-user-profile{
background:url(<?php echo $image_url;?>)no-repeat top center fixed !important ;  
z-index: -2!important;
background-size: 100% ;
 
  
 
<?php


} 

//inject custom class for profile pages

function get_body_class($classes){
if(!bp_is_user ())
return $classes;
else
    $classes[]='is-user-profile';

return $classes;


}
//inject js if I am viewing my own profile
function inject_js(){
    if(bp_is_my_profile()&&  bp_is_profile_component()&&  bp_is_current_action('change-bg'))
        wp_enqueue_script ('bpbg-js',plugin_dir_url(__FILE__)."bppbg.js",array('jquery'));
}

//ajax delete the existing image

function ajax_delete_current_bg(){
    
    //validate nonce
    if(!wp_verify_nonce($_POST['_wpnonce'],"bp_upload_profile_bg"))
            die('what!');
    self::delete_bg_for_user();
     $message='<p>'.__('Background image deleted successfully!','bppg').'</p>';//feedback but we don't do anything with it yet, should we do something
     echo $message;
     exit(0);
              
}
//reuse it
function delete_bg_for_user(){
  //delete the associated image and send a message
    $old_file_path=get_user_meta(bp_loggedin_user_id(), 'profile_bg_file_path',true);
    if($old_file_path)
          @unlink ($old_file_path);//remove old files with each new upload
     delete_user_meta(bp_loggedin_user_id(),'profile_bg_file_path');
     delete_user_meta(bp_loggedin_user_id(),'profile_bg');  
}
}

/*public function for your use*/
/**
 *
 * @global type $bp
 * @param type $user_id
 * @return string  url of the image associated with current user or false
 */

function bppg_get_image($user_id=false){
    global $bp;
    if(!$user_id&&$bp->displayed_user->id)
            $user_id=$bp->displayed_user->id;
    
     if(empty($user_id))
         return false;
     $image_url=get_user_meta($user_id, 'profile_bg', true);
     return apply_filters('bppg_get_image',$image_url,$user_id);
}

$_profbg=new BPProfileBGChanger();

?>


Voilà le code qui permet à l'utilisateur de choisir sont image de fond merci de votre aide.
0
Atropa Messages postés 1940 Date d'inscription   Statut Membre Dernière intervention   274
 
ca ne doit pas être le bon code. là ca ressemble a ce qui traite le formulaire, il faut le code d'affichage
0
elmajigo
 
Dans code la seul chose que je peut comprendre est ceci:

//inject css 
function inject_css(){ 
    $image_url=  bppg_get_image(); 
    if(empty($image_url)||  apply_filters('bppg_iwilldo_it_myself',false)) 
        return; 
    ?><style type="text/css"> 

body.is-user-profile{ 
background:url(<?php echo $image_url;?>)no-repeat top center fixed !important ;   
z-index: -2!important; 
background-size: 100% ;


Je tente de trouver le code dont vous me parlez.
Merci encore de votre soutien
0
elmajigo
 
<?php 

function wp_full_bg() { 
?> 
   <!-- Change the src attribute of the img tag just below here to point to the image you want to use. --> 
   <img id="" src="" > 
    
   <script>window.jQuery || document.write('<script src="//ajax.googleapis.com/ajax/libs/jquery/1.5.1/jquery.min.js"><\x3C/script>')</script> 
   <script type="text/javascript" language="javascript"> 
     jQuery(function() { 
      fullbg(); 
 jQuery(window).resize(fullbg); 
 setTimeout(fullbg, 500); 
     }); 
     function fullbg() { 
       var imgw = jQuery('#wpfullbg').width(); 
       var imgh = jQuery('#wpfullbg').height(); 
       var vpw = jQuery(window).width(); 
       var vph = jQuery(window).height();  
        
       var imgratio = imgw / imgh; 
       var viewportratio = vpw / vph; 

       var w = vpw; 
       var h = vph; 
  
       if( viewportratio > imgratio ) 
       { 
         // screen is wider than picture -> increase the heigth of the picture; 
         h = w / imgratio;   
       }  
       else  
       { 
         w = h * imgratio; 
       } 

       jQuery('#wpfullbg').css( 
          {  
             'left': '0px', 
             'width': w, 
             'height': h, 
             'z-index': '-2', 
             'top' : '0px', 
             'position' : 'fixed', 
             'opacity' : '0.999999999' 
          } 
       );   
     }     
   </script> 
<?php 
} 
add_action( 'wp_footer', 'wp_full_bg' ); 
?> 

Voilà le code d'affichage je pence ...
Desolé je suis vraiment perdu
0
Atropa Messages postés 1940 Date d'inscription   Statut Membre Dernière intervention   274
 
ce n'est pas ça non plus, il faut une variable php dans une balise img
0
elmajigo
 
je suis vraiment confu je vais trouver ... Je rééditerai les message pour ne pas polluer le forum.
0