Marco Ro Posted November 13, 2018 Share Posted November 13, 2018 I'm trying to add an action in the moment a new user registers and his page is created. Specifically, when a user is registered with the Facabook module, send the notification to Mailchimp and add it to the list, this with the mailchimp module. I think the problem could be in how I set the hook and in the page data. I hope I didn't make too many mistakes! sorry for this. wire()->addHook('Pages::saved', function($page) { if($page->template == "user"){ $user = $page; if ($user->hasRole('login-facebook')) { $mc = $modules->get("SubscribeToMailchimp"); $email = $user->email; $subscriber = [ 'FNAME' => $user->pad_firstname, 'MMERGE4' => $user->$country_title, ]; $mc->subscribe($email, $subscriber); } } }); I try also to use LoginFacebook::createNewUser but I'm not sure how use it. For this I move to do an hook directly when a user page is created. (that also coulde help me for others projects) . Link to comment Share on other sites More sharing options...
flydev Posted November 13, 2018 Share Posted November 13, 2018 30 minutes ago, MarcoPLY said: I think the problem could be in how I set the hook and in the page data. Correct, try to compare your hook-code and the one on the documentation: https://processwire.com/api/ref/pages/saved/ hints: function, HookEvent, $pages, $event, object; ? besthintever: tracy 1 Link to comment Share on other sites More sharing options...
Marco Ro Posted November 13, 2018 Author Share Posted November 13, 2018 Thank you @flydev. I try but there are some point that sure I do not understand. I'm reading the hook post. But probably I still make more then one error and this make hard debug the hook. wire()->addHookAfter('Pages::saved', function($event) { // Use wire() because the function is outside of a class. It's in my ready.php // Use addHookAfter becasue I need to have all the fields populated before I can use them. $page = $event->arguments(0); // here set to have the access to all the data in the page (rigth?) if($page->template == "user"){ // if the page saved it's a user page if ($user->hasRole('login-facebook')) { // (I'm not sure if I have to use $user or $page->fields) $mc = $modules->get("SubscribeToMailchimp"); // call the module take the fields and send it $email = $page->email; $subscriber = [ 'FNAME' => $page->pad_firstname, 'MMERGE4' => $page->$country_title, ]; $mc->subscribe($email, $subscriber); } } }); UPDATE I keep try to find a way to do the hook, but not with great result. I have also try to use Users::saveReady. wire()->addHookAfter('Users::saveReady', function(HookEvent $event) { $page = $event->arguments(0); if($user->hasRole('login-facebook')){ $mc = wire('modules')->get("SubscribeToMailchimp"); $email = $this->wire('user')->email; $subscriber = [ 'FNAME' => $this->wire('user')->pad_firstname, ]; $mc->subscribe($email, $subscriber); } }); I think to have a bit of confiution about the structure to how make a hook. Link to comment Share on other sites More sharing options...
Marco Ro Posted November 19, 2018 Author Share Posted November 19, 2018 Sorry @flydev, I think to have read all the documentation and forum post. I have trie all the code that I thinked was correct, using the method Pages::saved, Users::saveReady, saveReady. Try trying to start the hook with $this->addHookAfter, $pages->addHookAfter, wire()->addHookAfter but no one worked. I also thought the problem was how I was trying to access the data so I try $email = wire('input')->post->email, $email = $page->email, $email = $this->wire('user')->email. Could you tell me pleace where I wrong? This should not work? $this->addHookAfter('Pages::saveReady', function($event) { $page = $event->arguments[0]; if ($page->template == "user") { $mc = wire('modules')->get("SubscribeToMailchimp"); $email = $this->wire('user')->email; $subscriber = [ 'FNAME' => $this->wire('user')->pad_firstname, ]; $mc->subscribe($email, $subscriber); } }); All the method that I used I think are correct. So, my error need is in how I call the hook and/or how I access the data. The file is in my ready.php so like the documentation I have to use $this-> but not work. In the documentation about hook I read to use wire() if the hook it's ouside the class like it's the module. I try to follow your exemple here and write the hook like you did and call teh module using wire(). So, sure there are something that I do not understand. :( Link to comment Share on other sites More sharing options...
flydev Posted November 19, 2018 Share Posted November 19, 2018 Sorry @MarcoPLY I didn't saw your last ping! This is the correct way to call the hook, put it in ready.php as you did then, go to Modules > Refresh if you still can't see the hook. Code : wire()->addHookAfter('Pages::saved', function(HookEvent $event) { // Get the object the event occurred on, if needed $pages = $event->object; // Get values of arguments sent to hook (if needed) $page = $event->arguments(0); // your code: $page = $event->arguments[0]; bd($page); // tracy debug: User page object if ($page->template == "user") { $mc = wire('modules')->get("SubscribeToMailchimp"); $email = wire('user')->email; $subscriber = [ 'FNAME' => wire('user')->pad_firstname, ]; $mc->subscribe($email, $subscriber); bd($mc); // tracy debug: MailChimp object } }); 3 Link to comment Share on other sites More sharing options...
Marco Ro Posted November 20, 2018 Author Share Posted November 20, 2018 Thanks a lot @flydev. Ok, so, I have to use wire() becasue the hook is ouside the class. and I need also call $pages = $event->object. But aren't the data store in the argument? why I have to call pages object? Unfortunately the hook does not work. I think now the problem is how access to the correct date to send to Mailchimp. The Dumps I see empty, but in the Logs page now I have the Login-Facebook and I can read: Created new user: name-surname then Updated user 'name-surname' fields: role:login-register, pad_firstname, pad_firstname, pad_lastname and then Used Facebook to login for user: name-surname There isn't the email, could this be the problem that does not generate the user in Mailchimp? But, on the user page the email has been added successfully, for this type of hook only need this, correct? I can't find anywhere bd($mc). I try also to use $email = $page->email; and $email = $this->wire('user')->email but but not work, also try $email = wire('input')->post->email I know the input post it's use only in the form but I just to try. Any Idea? Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now