Using XenForo Bridge in Laravel - Need Templating Help

MatthewH

Member
Hey everyone, I've been trying to figure this out. I'm using this package in my Laravel 5 application for bridging XenForo to Laravel. All is fine. It's just...templating.

It always messes up. I just...I can't figure it out. Here's the function that's called on...here's the function eventually is called on.

It's calling on XenForo_ViewRenderer_HtmlPublic, so obviously I don't quite understand what's going on here...

Here's what it looks like by default...
5d70ee7b85506fc84746c3fe4572aa47.png


Here's what it looks like when I add 'Content' as a the content parameter.
ec8cfc4b8a77b8ebfcabb8e690b5d8e6.png


Even when making a custom template, nothing seems to work quite right...

thanks for your help everyone.
 
Hey I noticed you were having issues with the bridge you should have just opened an issue on github or messaged me directly :) Can you post the piece of code where you are calling the renderTemplate method?
 
Hey I noticed you were having issues with the bridge you should have just opened an issue on github or messaged me directly :) Can you post the piece of code where you are calling the renderTemplate method?
Sorry, didn't realize you were on here! Well glad someone finally can help.

I don't have the code on me right now, but how would you properly use this? Would I have to create custom templates in XenForo? God I hope not. I've tried multiple ways. Ideally I would just like to pass a whole view through the content section. I would like to try to handle everything on Laravel side...but yeah.
 
What content did you pass in? A laravel blade template? or just a straight up string? Blade should render to string properly.

Also what xenforo template are you trying to render. It looks like judging from the screenshots you are rendering the PAGE_CONTAINER template within the PAGE_CONTAINER template. I just happen to open up the file right now and see that that I have added an additional parameter to the method signature called $container which is not included in the doc block. If you used the default values of $name and $container I suspect that is what you are getting above. I use the bridge to render other xenforo templates into the PAGE_CONTAINER and do not rely on the default template name in the signature anymore which may be why I had not come across this bug.

If you could test it out by calling a different xenforo template

PHP:
renderTemplate({DIFFERENT_TEMPLATE},{YOUR CONTENT}.{VIEW_PARAM} = array())

Its been a while since I've touched this code but I believe I made the signature back words compatible with how I was using it for my application along wit the fact that there were 2 other people using it so I didn't want to change everything up and break other peoples code. I had started on a 2.0 revision but since I particularly did not have a need to update it right away I kept it the way it was. Generally when I use the method I call it like this

PHP:
renderTemplate({Xenforo_Template_Name},"",{VIEW_PARAM_ARRAY})

As you can see I do not pass laravel blade or content directly any more because it made our project to complex having 2 different templates rendering engines being used ie Blade and Xenforo. Plus my partner on the project did not know Laravel or Blade but was well versed in Xenforo so it made more sense to keep all template work in Xenforo.

The signature was left the way it was only because there is 2 places in my code base that still use Laravel Blade to render the content only because it was easier to implement with an existing library that I had created and did not at the time want to re-implement it for Xenforo templating.

I quickly pushed a fix to a new branch you can download that branch and see if that fix will solve your issue. The new temp branch is called default_template_rendering_fix
 
What content did you pass in? A laravel blade template? or just a straight up string? Blade should render to string properly.

Also what xenforo template are you trying to render. It looks like judging from the screenshots you are rendering the PAGE_CONTAINER template within the PAGE_CONTAINER template. I just happen to open up the file right now and see that that I have added an additional parameter to the method signature called $container which is not included in the doc block. If you used the default values of $name and $container I suspect that is what you are getting above. I use the bridge to render other xenforo templates into the PAGE_CONTAINER and do not rely on the default template name in the signature anymore which may be why I had not come across this bug.

If you could test it out by calling a different xenforo template

PHP:
renderTemplate({DIFFERENT_TEMPLATE},{YOUR CONTENT}.{VIEW_PARAM} = array())

Its been a while since I've touched this code but I believe I made the signature back words compatible with how I was using it for my application along wit the fact that there were 2 other people using it so I didn't want to change everything up and break other peoples code. I had started on a 2.0 revision but since I particularly did not have a need to update it right away I kept it the way it was. Generally when I use the method I call it like this

PHP:
renderTemplate({Xenforo_Template_Name},"",{VIEW_PARAM_ARRAY})

As you can see I do not pass laravel blade or content directly any more because it made our project to complex having 2 different templates rendering engines being used ie Blade and Xenforo. Plus my partner on the project did not know Laravel or Blade but was well versed in Xenforo so it made more sense to keep all template work in Xenforo.

The signature was left the way it was only because there is 2 places in my code base that still use Laravel Blade to render the content only because it was easier to implement with an existing library that I had created and did not at the time want to re-implement it for Xenforo templating.

I quickly pushed a fix to a new branch you can download that branch and see if that fix will solve your issue. The new temp branch is called default_template_rendering_fix
Okay, I'll take a look at the branch tomorrow night after work. I'm actually headed out for the night. Thank for your help!
 
You are calling twice render an template. renderView still call to renderContainer.

So i think lines from 46 to 49:
PHP:
return $response->renderContainer(
$response->renderView('urb_itemhub_view', $finalParams, $name),
$finalParams
);

Should be to:
PHP:
return $response->renderView('urb_itemhub_view', $finalParams, $name);
 
That is similar to the fix I pushed on a separate branch

https://github.com/UnderRatedBrilli...mmit/422b314305f159a2a31dfe3b2d365fb15032a76c

The issue with your solution is it doesn't account for the fact that someone may want to use the PAGE_CONTAINER and inject content into it. I agree that the api is inconsistent and should have separate methods, but that will come with a 2.0 version. It just so happened that it was initially written similar to the way you just proposed.
 
Hmm I'll have to check that out when I get a chance I have a feeling there was another reason for what I ended up doing. It's been a year now since I've looked at this particular piece of code so I'll have to dig into it in detail later in the week.
 
Top Bottom