IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

jQuery Discussion :

Changement valeur variable php (sujet connu) [AJAX]


Sujet :

jQuery

  1. #1
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2015
    Messages
    238
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2015
    Messages : 238
    Points : 95
    Points
    95
    Par défaut Changement valeur variable php (sujet connu)
    Bonjour
    je ne connais pas ajax mais je sais que je suis obligé de passer par là
    je créé un site sous wordpress
    j'ai tenté de modifier une variable php grace au variable global ou session mais en fait tout le contenu est déjà chargé et je n'y arrive pas
    mais je savais depuis le début que je devrais passer par ajax mais ne connaissant pas du tout j'ai tenté....
    bref

    j'ai un carousel et j'aimerais en cliquant sur des boutons à coté changer les arguments de la requete wpquery
    ex:
    dans un fichier functions_query.php qui est bien instancié dans un functions.php
    il y'a une fonction
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    function child_query($query = NULL) {
        if ($query == 'post') {
            wp_reset_query();
            $args = array('post_type' => 'post', 'posts_per_page' => -1, );
            return $args;
        }
        if ($query == 'attachment') {
            wp_reset_query();
            $args = array('post_type' => 'attachment', 'posts_per_page' => -1, );
            return $args;
        }
        if ($query == 'page') {
            wp_reset_query();
            $args = array('post_type' => 'page', 'posts_per_page' => -1, );
            return $args;
        }
    }
    dans sidebar.php
    ya les codes du carousel.php et controls.php

    je met exprès ce qui me paraissait le plus evident au début

    mais j'ai tenté un peu tout avec des onclick incluant des fonctions href rechargeant la page etc... mais c'est devenu un casse tete voyant que cela ne fonctionnait pas


    dans le morceau du fichier controls.php
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    <button id="sb-trigger-test" >POST<?php $argscarousel=child_query('post');?></button>

    dans le morceau du fichier carousel.php
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $querycarousel=new WP_Query($argscarousel);
    alors cela affiche bien dans le carousel mais la fonction est appelée à chaque fois.

    je pense que seul en ajax je peux forcer l'appel de cette fonction coté client
    mais je ne connais rien en ajax j'ai bien regardé appris un peu mais ça reste tres nébuleux sans tout reprendre

    j'ai fait quelques tests de débutant :
    un fichier ajax_donnees.php à la racine de controls.php
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    <?php 
    function testajax(){
     
    	echo "coucou ajax";
     
    }
     
    testajax();
    ?>


    dans le fichier controls.php par exemple avec une div vide id=div_donnees
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    $('#sb-trigger-test').click(function() {
        // L'URL du fichier dans lequel tu appelles ta fonctio
        var url = 'ajax_donnees.php';
        $.post(url, function(data) {
            // Tu affiches le contenu dans ta div
            $('#div_donnees').html(data);
        });
    });
    j'ai vérifié que j'avais bien le framwork jquery d'autant que wordpress (derniere version) le charge automatiquement mais si je l'ai rajouté quand même

    mais même ça que je pensais réussir à faire fonctionner : rien
    ne me hurlez pas je ne connais rien à ajax

    mais pourriez vous m'aider sans devoir tout reprendre de l'apprentissage jquery ou ajax
    mais je suis pret à comprendre à apprendre sur ce problème
    en espérant m'etre fait comprendre (pas evident sur un "langage" inconnu d'expliquer)
    merci

  2. #2
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2015
    Messages
    238
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2015
    Messages : 238
    Points : 95
    Points
    95
    Par défaut
    je comprend rien
    j'ai suivi un peu quelques tuto sur le web
    j'ai mis le code comme sur le tuto
    et ça fonctionne pas ça renvoie toujours la partie 'error'

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    <script type="text/javascript">
    		$(document).ready(function(){
    			$("#sb-trigger-test").click(function(){	     
    			    $.ajax({
    			       url : 'demo_test_ajax.txt',
    			       type : 'GET',
                                   dataType:'text,//avec ou sans 
    			        success: function(data) {
     
                 			 alert(data); },
     
                		error: function() {
     
                  			alert('La requête n\'a pas abouti'); }
    			    });	   
    		    });	   
    		});
     
    </script>
    ça me parait simple pourtant
    quelqu'un pourrait il m'aider ça me désespère !

  3. #3
    Modérateur

    Avatar de NoSmoking
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    16 959
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 16 959
    Points : 44 122
    Points
    44 122
    Par défaut
    Bonjour,
    ça me parait simple pourtant
    peut être que cette ligne est syntaxiquement incorrecte
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    dataType:'text,//avec ou sans
    manque une apostrophe fermante.

  4. #4
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2015
    Messages
    238
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2015
    Messages : 238
    Points : 95
    Points
    95
    Par défaut
    oui surement mais j'ai tout recommencé a zero
    depuis j'ai voulu faire encore plus simple

    j'ai vu un petit tuto ici :
    http://www.tuto-jquery.fr/ajax_jquery.php

    par contre je suis dans mon site wordpress
    a priori le jquery.js est chargé mais j'ai quand meme mis celui du tuto dans mon dossier js du site et l'appel dans functions du theme enfant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    wp_enqueue_script('jquery',get_stylesheet_directory_uri() . "/js/jquery.js"); // c'est un theme enfant donc get_stylesheet_directory_uri()
    j'ai enlevé les anciens jquery pour etre sur et
    les autres fichiers js du site fonctionnent donc le fichier est correcte je pense

    j'ai bien copié le fichier demo_ajax.html je l'ai mis tour à tour soit dans le dossier js ou dans le dossier où il y a le header

    j'ai mis ce code dans le header juste avant body
    j'ai aussi tenté dans les fichiers js qui fonctionnent sur le site
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    <script type="text/javascript">
    $(document).ready( function() {					
    	//Ajax
    	$('#ajax').click( function() {
    	$('#header').load('demo_ajax.html');	
    	});	
    }
    );
    </script>
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    <body <?php body_class(); ?>>
    	<div id="header"  style="width: 100px;height:100px;background:yellow;" >
    		<p>Je suis le header</p>
    	</div>		
    	<input type="button" id="ajax" value="Ajax"/>
    mais ça ne fonctionne pas !!!

  5. #5
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2015
    Messages
    238
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2015
    Messages : 238
    Points : 95
    Points
    95
    Par défaut
    le code fonctonne en dehors de wordpress
    mais découvrant jquery et ajax
    peut etre ce que j'ai vu et essayé avant fonctionnait
    mais enervé je suis reparti de zero et j'ai tout supprimé (pas mon theme wordpress ni le site evidement)

    mais c'est wordpress qui bloque le code (conflit ou autrres...)
    ce qui n'est pas evident quant on découvre de nouveaux langages ou fonctionnalités
    et je ne sais pas trop comment je vais adapter mon apprentissage à mon site sous wordpress

    si vous pouviez m'aider je vous remercie par avance

    en ce moment je suis un autre tuto qui "nettoie" wordpress
    http://mwanoz.fr/nettoyer-le-contenu...r-wordpress/2/
    en espérant que cela permettra d executer le code

    Edit : je viens de voir à 5h du mat que sur wordpress il faut mettre le chemin absolu
    j'avais déjà essayé mais en mettant à partir de c:/... et pas le chemin absolu du site (je suis sous wamp
    donc : www/sitebidulessouswp/...
    et là ok

    mais bon je me suis éloigner de mon problème d'origine et espérons en apprenant jquery + ajax que j'aurais pas à me faire planter pendant une journée par ce genre de casse tete
    mais ça m'étonnerait (faut rester optimiste pourtant)

    à propos je suis sous eclipse PDT ya bien une librairie js mais ya pas de "debugger" en ligne (je ne sais pas trop comment on appele ça d'ailleurs)
    en java ou php , eclipse m'indique si ya des erreurs syntaxe et autres mais pas en js

    y'a t il un plugin que vous connaissez à rajouter pour ça ?merci à vous
    (je comprend pourquoi on répondait pas trop c'etait assez vague le bug ne sachant pas) => je continue mon apprentissage jquery et ajax pour aboutir à la manipulation de variable php sans recharger (et sans formulaire $_post,... )

  6. #6
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2015
    Messages
    238
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2015
    Messages : 238
    Points : 95
    Points
    95
    Par défaut
    bon je continue mais j'ai besoin d'aide
    j'avais peu de base en js un peu en java ce qui fait que je decrypte un peu à mon niveau le jquery et les quelques tutos jquery ajax

    mais meme si en parallèle j'ai commencé à suivre des tutos jquery et ajax voir reprendre des tutos js pour approfondir (ici ou ailleurs)
    découvrir la syntaxe XHR,etc

    mais j'ai à l'heure actuelle à regler aussi mon probleme sur mon site
    alors je veux le faire avec jquery ajax car çà m'est apparu evident à la fin mais je peux me tromper

    pour l'instant pour tester mes experiences de gros débutant en jquery ajax

    coté fichier js :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    $('#ajax').on('click', function(e){
    				e.preventDefault();
    		        $.post('/ajax_donnees.php', function(data) {
    		            $('#header').html(data);
    		        });
     
    		    });
    coté fichier php appelé:
    ajax_donnees.php
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    $argscarousel = array(
    		'post_type'=>'post',
    		'posts_per_page' => -1,
    );
    print_r($argscarousel);
    coté fichier php du site :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    <div id="header"  style="width: 100px;height:100px;background:yellow;" >
    		<p>Je suis le header</p>
    	</div>		
    	<input type="button" id="ajax" value="Ajax"/>
    après j'ai lu des tutos sur ajax mais je ne vois pas bien comment modifier ma variable $argscarousel coté site
    je pourrais apprendre de A à Z (dans l'avenir pas de problème)

    alors j'aibien tenté sans conviction mais pour essayer de comprendre en regardant les erreurs
    mais je sais que beaucoup choses sont encore confus et absurde pour ceux qui vont me lire

    coté fichier php
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
     
    <?php 
    function fx(){
            //global $wp_query;
            //global $argscarousel;
            //global $querycarousel;
            
            //wp_reset_query();
            $argscarousel = array(
                            'post_type'=>'post',
                            'posts_per_page' => -1,
            );
            //$querycarousel=new WP_Query($argscarousel);
            print_r($argscarousel);
            //return $argscarousel;
    }
     
    ?>
    coté js:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    	$('#ajax').click(function() {
    		        // L'URL du fichier dans lequel appeller la fonction
    		        var url = '/ajax_donnees.php';
    		        $.post(url, function(data){
    		            // affichage le contenu dans la div
    		            $('#header').html(data);
    		        });
    		    });

  7. #7
    Modérateur

    Avatar de NoSmoking
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    16 959
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 16 959
    Points : 44 122
    Points
    44 122
    Par défaut
    Si tu veux transmettre des données en Ajax il te faut les mettre dans ton code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    $.post("la_page_serveur.php",
    {
        'param_1': 'valeur du param #1',
        'param_2': 'Valeur du param #2'
    }, function(data)
    {
        // ici le code exécuté au retour de la réponse
    });

  8. #8
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2015
    Messages
    238
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2015
    Messages : 238
    Points : 95
    Points
    95
    Par défaut
    ok je commence un peu à comprendre

    je suis tombé sur ce tuto interessant bien expliqué à mon niveau
    http://www.wp-spread.com/tuto-ajax-w...ethode-simple/
    car wordpress a un comportement particulier avec ajax apparement ce qui peut etre frustrant meme quand ça fonctionne

    mais je bloque pr comprendre la premiere fonction :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    function add_js_scripts() {
    	wp_enqueue_script( 'script', get_template_directory_uri().'/js/script.js', array('jquery'), '1.0', true );
     
    	// pass Ajax Url to script.js
    	wp_localize_script('script', 'ajaxurl', admin_url( 'admin-ajax.php' ) );
    }
    add_action('wp_enqueue_scripts', 'add_js_scripts');
    je connais evidement le principe apart que je decouvre wp_localize_script et admin_url( 'admin-ajax.php' )

    j'ai pas bien pigé son explication je dois changer admin_url( 'admin-ajax.php' par mon fichier php
    pour faire fonctionner mon script.js jquery ou ajax pur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    	// pass Ajax Url to script.js
    	wp_localize_script('script', 'ajaxurl', 'monfichier-ajax.php');
    si non dans ce cas à quoi sert admin-ajax.php ou alors j'ai rien compris

    sinon après je devrais pouvoir m'en sortir pour l'instant
    avant de mieux maitriser le langage jquery et les fonctions ajax et bien d'autres choses encore !!!

    merci

  9. #9
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2015
    Messages
    238
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2015
    Messages : 238
    Points : 95
    Points
    95
    Par défaut
    Citation Envoyé par NoSmoking Voir le message
    Si tu veux transmettre des données en Ajax il te faut les mettre dans ton code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    $.post("la_page_serveur.php",
    {
        'param_1': 'valeur du param #1',
        'param_2': 'Valeur du param #2'
    }, function(data)
    {
        // ici le code exécuté au retour de la réponse
    });
    en fait c'est plus le code au retour qui me bloque à l'heure actuelle
    j'ai suivi le tuto que j'ai mis plus haut
    http://www.wp-spread.com/tuto-ajax-w...#comment-15309

    et j'essaie d'adapter son exemple pr changer le post_type
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
     
    var posttype = 'page'; 
    	$('body').on('click', '.load-more', function() {
     
    		jQuery.post(
    		    ajaxurl,
    		    {
    		        'action': 'load_more',
    		        'post_type ': posttype 
    		    },
    		    function(response){
    		    	alert(posttype);
    		        'post_type ': posttype;//là je sais je finis par mettre n'importe quoi :/
    		    	$('.alasuite').append(response);
    		    }
    		);
    	});
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
     
    add_action( 'wp_ajax_load_more', 'load_more' );
    add_action( 'wp_ajax_nopriv_load_more', 'load_more' );
     
    function load_more() {
    	//$offset = $_POST['offset'];
    	$posttype='post';
    	$posttype== $_POST['post_type'];
     
    	$args = array(
    			'posts_per_page' => 10,
    			'showposts' => 10,
    			'post_type' =>$posttype
    			//'offset' => $offset
    	);
     
    	$ajax_query = new WP_Query($args);
     
    	if ( $ajax_query->have_posts() ) : while ( $ajax_query->have_posts() ) : $ajax_query->the_post();
    	echo '<pre>'.$posttype.'</pre>';
    	get_template_part( 'article' );
    	endwhile;
    	endif;
    	//get_sidebar();
    	//get_footer();
    	//die();
    }
    je m'emmele les pinceaux résultat je ne vois pas trop comment gerer un array associatif ( champs et valeurs ) dans la fonction retour
    si je comprenais mieux c'est vrai la gestion passage parametre et fonction retour ce serait presque parfait pour l'instant

  10. #10
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2015
    Messages
    238
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2015
    Messages : 238
    Points : 95
    Points
    95
    Par défaut
    bon j'y arrive un peu
    ça change bien ma requete
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
     
    /**
     * 
     */
     
    $(document).ready(function(){
    	/*
    	var posttype = 'page';
     
    	$('body').on('click', '.loadmore', function() {
     
    	jQuery.post(
    	ajaxurl,
    	{
    	'action': 'load_more',
    	'post_type': posttype
    	},
    		function(response){
    			posttype;
    			$('#content').html(response);
    		}
    	);
     
    	});
    	*/
     
     
    });
    c'est peut-être pas très propre et absurde mais j'essaie en ce moment
    de transformer l'event
    $('.load').on('click', {name:"page"} , changePosttype);

    dans un onclick du button de category.php
    <button class="load" onclick="changePosttype('page')" >load </button>

    c'est possible ou pas car sinon le code qui suit fonctionne:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
     
    $('.load').on('click', {name:"page"} , changePosttype);
     
    	function changePosttype(name){
    		alert( "Hello " + name.data.name);
    		var posttype=name.data.name;
     
     
    		$('body').on('click', '.load', function() {
     
    			jQuery.post(
    			ajaxurl,
    			{
    			'action': 'load_more',
    			'post_type': posttype
    			},
    				function(response){
    					posttype;
    					$('#content').html(response);
    				}
    			);
     
    			});
     
     
    	}
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
     
    add_action( 'wp_ajax_load_more', 'load_more' );
    add_action( 'wp_ajax_nopriv_load_more', 'load_more' );
     
    function load_more() {
    	$posttype = $_POST['post_type'];
     
    	$args = array(
    			'showposts' => 5,
    			'post_type' =>$posttype
     
    	);
    	//wp_reset_query();
    	//wp_reset_postdata();
     
    	$ajax_query = new WP_Query($args);
     
    	if ( $ajax_query->have_posts() ) : 
    		while ( $ajax_query->have_posts() ) : $ajax_query->the_post();
    			get_template_part( 'article' );
    		endwhile;
    	endif;
     
    	die();
    }
    ?>

  11. #11
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2015
    Messages
    238
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2015
    Messages : 238
    Points : 95
    Points
    95
    Par défaut
    je comprend qu'on ne me réponde pas beaucoup
    je regrette même certains de mes commentaires
    mais j'avance en apprenant jquery ajax et en essayant de regler mon probleme tout en regardant ici ou là sur des tutos ou forums du code qui se rapproche de ce que je veux faire
    résultat c'est pas très clair quand je veux exprimer un problème

    mon ennui actuel c'est d'envoyer à ma fonction jquery ajax plusieurs parametres
    j'ai essayé dans un onclick directement sur le button mais si c'est possible mes connaissances semblent insuffisantes
    donc

    pour l'instant la seule solution que j'ai trouvé dans mon fichier jquery ajax
    je récupère une seule valeur grace à l'attribut value du bouton
    sauf que j'aimerais en récupérer plusieurs (un tableau peut-etre ? )
    comme envoyer une valeur =posttype et une valeur=taxonomy,...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
     
    $(document).ready(function(){
     
    						$('body').on('click', '.sb-trigger',function() {		
    							var posttype	=	$(this).attr("value");
    							//var cat			= 	$(this).attr("value");
    							//var taxonomy 	=   $(this).attr("value");
    							//var term		=	$(this).attr("value");
     
     
    							jQuery.post(
    							ajaxurl,
    							{
    							'action': 'load_more',
    							'post_type': posttype,
    							//'taxonomy'=>array(cat,taxonomy)
    							},
    								function(response){
    									posttype;
    									$('#content').html(response);
    								}
    							);
     
    						});
     
     
    			});
    en vous remerciant de m'aider si vous comprenez mon charabia :/

  12. #12
    Modérateur

    Avatar de NoSmoking
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    16 959
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 16 959
    Points : 44 122
    Points
    44 122
    Par défaut
    comme envoyer une valeur =posttype et une valeur=taxonomy,...
    tu as toutes les billes pour le faire, comme déjà écrit, à peine modifié
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    $.post(
        "la_page_serveur.php",
        {
            'param_1': $('#input_param1').val(),   // exemple de récupération d'un NPUT
            'param_2': 'Valeur du param #2'
        },
        function(data) {
            // ici le code exécuté au retour de la réponse
        }
    );
    jQuery.post() entre autres

  13. #13
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2015
    Messages
    238
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2015
    Messages : 238
    Points : 95
    Points
    95
    Par défaut
    sur le moment j'ai cru que tu avais répondu à mon soucis
    c'est vrai que je connaissais value coté html que j'ai donc cherché coté js mais ne connaissais pas val()
    mais ce que je veux c'est recupérer sur le meme objet

    mon code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var posttype = $(this).attr("value");(button)
    le tiens :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    'param_1': $('#input_param1').val()
    mais sur un même objet html comment envoyer plusieur valeurs pour ensuite les assigner aux parametres différent

    alors j'ai vu le site officiel http://api.jquery.com/val/#val-function
    comme dans le dernier exemple sur un select ex:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    'param_1': $('#input_param1').val(["1"])
    'param_2': $('#input_param1').val(["2"])
    'param_3': $('#input_param1').val(["3"])
    mais pas sur de pouvoir faire cela sur un button ni que cela réponde exactement (pas encore essayé!)

    soit je passe un tableau php grace à l'attribut ou methode "text","value"

  14. #14
    Modérateur

    Avatar de NoSmoking
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    16 959
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 16 959
    Points : 44 122
    Points
    44 122
    Par défaut
    mais ce que je veux c'est recupérer sur le meme objet
    ...
    mais sur un même objet html comment envoyer plusieur valeurs pour ensuite les assigner aux parametres différent
    j'ai du mal à comprendre ce que tu cherches à faire au final, aurait tu le code HTML de la partie concernée.

  15. #15
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2015
    Messages
    238
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2015
    Messages : 238
    Points : 95
    Points
    95
    Par défaut
    étant débutant jquery et encore plus en ajax
    ayant peu de notions js et plus en php quand même et quelques notions en java

    je developpe sous wordpress
    voici l'idée de départ basé sur l'exemple officiel je suis conscient que myfunction() pourrait être une valeur de variable php passé une fois chargé mais c'est pas trop ça le problème
    coté page du site :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    		 	<button class="sb-trigger" onclick="myFunction()">Click me</button>
    puis rencontrant des difficultés j'ai fait ceci tout en suivant en parallèle des tutos jquery ajax
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    <div class="btn-group menu">
    			<button class="sb-trigger" value="<?php print_r($valeur); ?>" >ATT</button>
    			<button class="sb-trigger" value="page">PAGE</button>			
    			<button class="sb-trigger" value="<?php print_r($valeur["posttype"]="post");?>">POST</button>		
    			<button class="sb-trigger" value="non-classe">CAT?></button>
    			<button class="sb-trigger" value="">COM</button>
    			<button class="sb-trigger" value="<?php print_r($valeur["posttype"]="attachment");?>attachment_category">TAXO</button>	
    		</div>
    puis le code coté php d'abord initialisé dans functions.php
    (j'ai eu du mal à trouver et donc à comprendre jquery et ajax avec wordpress )
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
     
     
    /****************************************************************************************************************************/
     
    function child_enqueue_js_files() {
     
        wp_enqueue_script('child-jquery', get_stylesheet_directory_uri() . "/js/jquery-1.11.3.js");
        wp_enqueue_script( 'script', get_stylesheet_directory_uri().'/js/script.js',array('child-jquery'), '1.0', true );
    // pass Ajax Url to script.js
        wp_localize_script('script', 'ajaxurl', admin_url( 'admin-ajax.php' ) );
     
     
      }
     
    add_action('wp_enqueue_scripts', 'child_enqueue_js_files');
    /* End Enqueue Javascript Files */
     
    <?php 
    /****************************************************************************************************************************/
    add_action( 'wp_ajax_load_more', 'load_more' );
    add_action( 'wp_ajax_nopriv_load_more', 'load_more' );
     
    function load_more() {
    	global $argscarousel;
    	global $ajax_query;
     
    	$posttype 	= $_POST['post_type'];
    	//$catname=$_POST['category'];
    	//$taxonomy	= $_POST['taxonomy'];
    	//$term		= $_POST['term'];
     
     
    	if ($posttype=='page'){
     
    		$args = array(
    				//'post_parent' => $post->post_parent,
    				'post_status' => array('inherit','publish'),
    				'post_type' => $posttype,
    				//'post_mime_type' => array('image','text/plain'),
    				'order' => 'ASC',
    				'orderby' => 'menu_order ID none',
    				'showposts'=>-1
     
    				);
     
    	}else {
    			$args = array(
    				//'post_parent' => $post->post_parent, 
    				'post_status' => array('inherit','publish'), 
    				'post_type' => $posttype,
    				'tax_query' => array(
    							'relation' => 'OR',
    							array(
    								'taxonomy' => 	'category',
    								'field'    => 'slug',
    								'terms'    => array('non-classe'),
    							),
    							array(
    								'taxonomy' => 'attachment_category',
    								'field'    => 'slug',
    								'terms'    => array('media00'),
    							),
    							array(
    								'taxonomy' => 'none',
    								'field'    => 'slug',
    								'terms'    => '',
    							)
    							),
    				//'post_mime_type' => array('image','text/plain'), 
    				'order' => 'ASC', 
    				'orderby' => 'menu_order ID none',
    				'showposts'=>-1
    			);
    	}
    	//wp_reset_query();
    	//wp_reset_postdata();
     
    	$argscarousel=$args;
     
    	$ajax_query = new WP_Query($args);
     
    	echo '<h2> je suis dans la fonction php loadmore</h2>';
    	if ( $ajax_query->have_posts() ) :
     
    	while ( $ajax_query->have_posts() ) : $ajax_query->the_post();
    		get_template_part( 'article' );
    		//get_template_part('content','carousel');
    	endwhile;
    	endif;
     
    	die();
    }
     
    ?>
    et enfin le fichier js script ajax

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
     
    /**
     * 
     */
    			$(document).ready(function(){
     
    						$('body').on('click', '.sb-trigger',function() {		
     
    							var posttype	=	$(this).attr("value");
    							//var cat			= 	$(this).attr("value");
    							//var taxonomy 	=   $(this).attr("value");
    							//var term		=	$(this).attr("value");
     
     
     
    							jQuery.post(
    							ajaxurl,
    							{
    							'action': 'load_more',
    							'post_type': posttype,
    							//'taxonomy'=>array(cat,taxonomy)
    							},
    								function(response){
    									posttype;
    									$('#content').html(response);
    								}
    							);
     
    						});
     
     
    			});
    le problème étant donc de passer plusieurs paramètes sur un seul button ou input/ button et étant débutant et suivant les tutos et exemples en attendant d'être un expert créatif (je désespère pas)
    je n'ai toujours pas vu comment faire
    j'ai pensé tableau en paramètre ou découper (implode) un string php ou js et de récupérer par la suite
    mais avant me suis dit demandons y'a t il plus propre plus académique ?

  16. #16
    Modérateur

    Avatar de NoSmoking
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    16 959
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 16 959
    Points : 44 122
    Points
    44 122
    Par défaut
    est ce à dire qu'au moment de l'envoi tu veux récupérer TOUTES les values de tes <button>, et d'ailleurs pourquoi tous ces <button>.

  17. #17
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2015
    Messages
    238
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2015
    Messages : 238
    Points : 95
    Points
    95
    Par défaut
    non y'a plusieurs boutons parceque je change avec chacun la requete mais c'est aussi un choix
    j'aurais tres bien pu le faire avec un form et des inputs bouton ce serait presque plus simple

    mais là une requete version wordpress c'est $wpquery et non SQL même si c'est possible donc y'a plusieurs parametres (clé =>valeurs) pas seulement post_type
    ça parait compliqué comme ça mais je connais tres mal (moins mnt ) ajax et jquery et donc je voyais pas trop au début comment faire

    soit je passe un tableau soit j'utilise explode ou str_split pour récupérer divers valeurs et là ok j'ai résolu mon problème

    mais c'est là mes lacunes en ajax et jquery qui m'embetent
    est ce la bonne façon de faire ?
    est ce mieux une fonction jquery qui récupère les valeurs mais ça je sais pas trop faire à cause de la façon de wordpress de traiter ajax qui me perturbe pour comprendre les tutos ajax
    (j'ai pas vu le mot clé "action" dans des tutos etc... par exemple)

    bref est ce "propre", classique de faire comme ça une méthode ajax jquery ?

    (bon après mnt c'est pas encore au point mais ça devrait fonctionner avec explode mais bon...sur une seul value "post_type", mon carousel change sans recharger la page pour l'instant)

  18. #18
    Modérateur

    Avatar de NoSmoking
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    16 959
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 16 959
    Points : 44 122
    Points
    44 122
    Par défaut
    Décidément j'ai vraiment du mal à visualiser ce que tu cherche à faire mais je te propose un truc du style de
    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <button class="sb-trigger" value="{cle1:btn1_valeur_1, cle2:btn1_valeur_2}" >Btn_1</button>
    <button class="sb-trigger" value="{cle1:btn2_valeur_1, cle2:btn2_valeur_2}" >Btn_2</button>
    <button class="sb-trigger" value="{cle1:btn3_valeur_1, cle2:btn3_valeur_2}" >Btn_3</button>
    les données à envoyer sont dans la value du <button> au format "string like" objet JSON et dans la fonction tu transformes les données en objet JSON avant envoi
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    $(document).ready(function() {
        $('body').on('click', '.sb-trigger', function() {
            // récup. des données
            var data = $(this).attr("value");
            // requête
            jQuery.post(
                ajaxurl,
                // transforme en objet
                JSON.parse(data),
                function(response) {
                  $('#content').html(response);
                }
            );
        });
    });
    voilà pour un principe de fonctionnement.

  19. #19
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2015
    Messages
    238
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2015
    Messages : 238
    Points : 95
    Points
    95
    Par défaut
    c'est sur étant débutant en ajax et jquery je galère même sur les tutos vis à vis de mon problème
    mais soit je reprenais tout depuis le début les tutos et j'y étais encore dans un mois
    soit j'essaye quand meme de finir ce site et après je ferais plus "scolairement" les tutos
    puis je dois pas être super doué à la base

    résultat la manière dont tu passes les données coté html sur le button je ne voyais pas comment mettre la syntaxe avant
    de plus me suis pas trop aventuré sur JSON car en suivant les tutos c'était souvent pour créer un fichier json alors j'ai pensé que j'allais encore compliqué le problème avec wordpess

    pour l'instant je fais ça et ça fonctionne mais je pense avoir du mal à bien comprendre le principe des fonctions callbacks
    résultat le carousel s'affiche mais ne fonctionne plus pour la navigation :
    coté html :
    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <div class="btn-group menu">
    	<button class="sb-trigger" value="attachment&attachment_category&<?php print_r(implode(",",get_terms('attachment_category', 'fields=names')));?>">ATT</button>	
    	<button class="sb-trigger" value="page&">PAGE</button>			
    	<button class="sb-trigger" value="post&category&non-classe">POST</button>		
    </div>
    coté jquery
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    $(document).ready(function() {
        $('body').on('click', '.sb-trigger', function() {
            var split = $(this).attr("value").split("&");
            var posttype = split[0];
            var taxonomy = split[1];
            var termA = split[2];
            var terms = new Array();
            if (typeof termA !== 'undefined') {
                terms = termA.split(",");
            }
            jQuery.post(ajaxurl, {
                'action': 'load_more',
                'post_type': posttype,
                'taxonomy': taxonomy,
                'terms': terms
            }, function(response) {
                /* là j'avoue je pensais avoir compris et comme la navigation carousel ne fonctionne pas même si il affiche bien*/
                //j'ai pensé 
                // soit les scripts ne sont pas bien positionnés dans le DOM résultat une fois chargé apres retour serveur je n'ai plus accès
                // soit autres choses j'ai rien compris ce qui se passe au moment de la fonction réponse (success)
                // je finis par mettre n'importe quoi et je pige plus trop l'interet des variables que j'avais vu dans le tutos ajax et wordpress de la fonction puisque finalement ils ont été traités sur le serveur
                //le carousel doit s'afficher normalement là où je l'ai mis $('.bottom-center .sb-content').html(response);
                //je testais avant sur #content
                //posttype;
                //taxonomy;
                //terms;
                //$('#content').html(response);
                $('.bottom-center .sb-content').html(response);
            });
        });
    });
    coté serveur dans functions.php
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    <?php
    /****************************************************************************************************************************/
    add_action('wp_ajax_load_more', 'load_more');
    add_action('wp_ajax_nopriv_load_more', 'load_more');
    function load_more() {
        global $argscarousel;
        global $querycarousel;
        global $wp_query;
        $posttype = $_POST['post_type'];
        $taxonomy = $_POST['taxonomy'];
        $terms    = $_POST['terms'];
        if ($posttype == 'page') {
            $args = array(
                //'post_parent' => $post->post_parent,
                'post_status' => array(
                    'inherit',
                    'publish'
                ),
                'post_type' => $posttype,
                'order' => 'ASC',
                //'orderby' => 'menu_order ID none',
                'showposts' => -1
            );
        } else {
            $args = array(
                //'post_parent' => $post->post_parent, 
                'post_status' => array(
                    'inherit',
                    'publish'
                ),
                'post_type' => $posttype,
                'tax_query' => array(
                    'relation' => 'OR',
                    array(
                        'taxonomy' => $taxonomy,
                        'field' => 'slug',
                        'terms' => $terms
                    )
                ),
                //'post_mime_type' => array('image'), 
                'order' => 'ASC',
                'orderby' => 'menu_order ID none',
                'showposts' => -1
            );
        }
        $argscarousel  = $args;
        $querycarousel = new WP_Query($argscarousel);
    ?>
    <?php
        if ($use_mla_gallery):
    ?>
    <?php
            get_template_part('content', 'mla-gallery');
    ?>
    <?php
        elseif ($querycarousel->have_posts()):
    ?>
    <header class="archive-header">
    <h1 class="archive-title"><?php
            if (is_day()):
                printf(__('Daily Archives: %s', 'twentytwelve'), '<span>' . get_the_date() . '</span>');
            elseif (is_month()):
                printf(__('Monthly Archives: %s', 'twentytwelve'), '<span>' . get_the_date(_x('F Y', 'monthly archives date format', 'twentytwelve')) . '</span>');
            elseif (is_year()):
                printf(__('Yearly Archives: %s', 'twentytwelve'), '<span>' . get_the_date(_x('Y', 'yearly archives date format', 'twentytwelve')) . '</span>');
            elseif ($is_media_archive):
                _e('Media Archives', 'mla-child-theme');
            else:
                _e('Archives', 'twentytwelve');
            endif;
    ?>
    </h1>
    </header><!-- .archive-header -->
    	<nav id="nav">
    		<ul>
    <?php
            while ($querycarousel->have_posts()):
                $querycarousel->the_post();
                if ($is_media_archive) {
                    get_template_part('content', 'media');
                } else {
                    get_template_part('content', 'header');
                }
            endwhile;
            wp_reset_query();
    ?>
                    </ul>
    	</nav>
    <?php
        else:
    ?>
    <?php
            get_template_part('content', 'none');
    ?>
    <?php
        endif;
    ?>
    	die();
    /* là j'ai remis le tit script du carousel mais ça change rien au bug de la navigation*/
    <script>
    jQuery(document).ready(function(){		
    	jQuery('#nav').carousel('.slider-prev', '.slider-next');
    });
    </script>
    <?php
    }
    ?>

    bref voilà faut que je potasse ton code, Json et encore quelques principes fondamentaux pour bien les intégrer
    mais pas évident suis pas très doué c'est parfois désespérant pour pas grand chose
    de plus je bosse sur eclipse pdt et je sais pas trop comment avoir le "debugger" syntaxique pour javascript en même temps
    car ça previent pas comme pour php ça faciliterait grandement l'apprentissage des tutos et le reste

    en tout cas merci à toi de me supporter

  20. #20
    Modérateur

    Avatar de NoSmoking
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    16 959
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 16 959
    Points : 44 122
    Points
    44 122
    Par défaut
    résultat le carousel s'affiche mais ne fonctionne plus pour la navigation :
    il faut que tu relances, initialises, ton carrousel coté client, donc en javascript.

    Etape 1 : je désire changer les images du carrousel et je fais une demande au serveur via Ajax
    Etape 2 : en retour j'ai un nouveau code qui remplace celui existant
    Etape 3 : je relance/initialise après chargement le nouveau carrousel

    résultat la manière dont tu passes les données coté html sur le button je ne voyais pas comment mettre la syntaxe avant
    de plus me suis pas trop aventuré sur JSON..
    entre client et serveur il n'y à qu'une façon de transmettre les informations, c'est...une chaine de caractères.

    De la manière dont est écrite cette chaine dépendra de la manière dont sera récupérer et transformer cette chaine.

    A lire Comprendre les mécanismes d'AJAX

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Evénément sur un changement de variable PHP
    Par hawksylver dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 09/09/2015, 15h50
  2. Réponses: 3
    Dernier message: 14/10/2013, 17h54
  3. Réponses: 5
    Dernier message: 14/06/2006, 16h35
  4. [FLASH 8] Detecter changement valeur d'une variable
    Par orelero dans le forum Flash
    Réponses: 1
    Dernier message: 18/02/2006, 18h25
  5. Utiliser la valeur d'un input dans une variable php
    Par megane dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 09/08/2005, 16h02

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo