how to disable particular js file in only particular view yii2 - yii2-advanced-app

i doing ajax call and render view page in modal popup. but in this view page all js and css files are included. so in main page and ajax view page, js file got conflict.
i know how to disable js file in view page in yii-1.00
like this one
Yii::$app()->clientScript->scriptMap['jquery.js'] = false;
Yii::$app()->clientScript->scriptMap['yii.js'] = false;
but i dont know how to do this is in yii2.
so how can i do this.
thanks in advance.

This will disable bundle which conflicts others.
Write below code in particular page in where you want to disable the JS files.
unset($this->assetBundles['yii\bootstrap\BootstrapAsset']);
unset($this->assetBundles['yii\web\JqueryAsset']);

if you want to exclude the assets which are registered on the layouts
you can use return $this->renderPartial("view"); from your controller
action.
render partial
otherwise if your view contain other Javascripts/css files you want to inject into the rendering result you may use return $this->renderAjax("view") instead
render ajax

for Yii2
//in controller you can use this line...It will not reload assets with renderAjax.
\Yii::$app->assetManager->bundles = false;

Related

Open Model on edit in list view

In backpack list view when I click in edit button then I get redirected to another page instead of I want model window where I edit and save the record. Also want for Add New.
How can I do that?
The system really isn't designed for that behaviour to be changed, but if you REALLY need it i guess you can create new files in your resources/views/vendor/backpack/crud. This will make Backpack use those views instead of the ones in the package. You can copy views from the package and change them to fit your need:
- list.blade.php would include edit.blade.php in a bootrap modal;
- buttons/edit.blade.php should trigger the right modal on click;
- edit.blade.php should submit the form with ajax instead and catch the errors, to show them inside the modal;
The same process needs to be repeated for the create.blade.php file.
It won't be easy...

Zend Framework Layout Handling

How is everyone else handing stuff like this?
I'm building a site with ZF, it has 1 layout. Some actions on the site open a ajax or iframe (Fancybox) lightbox to display forms and views. So we need to turn off the layout so the header/background/etc is not displayed, but then I would lose the main body of the layout, like HTML body, Header section with all the default helpers, etc.
In this instances, should I just setup two layouts, or is there a better method to go about handling that?
This is on ZF1
I would create another layout (let's call it minimal.phtml).
In the controller handling the Ajax you can change the layout script inthe init() function with...
Zend_Layout::getMvcInstance()->setLayout('minimal');
Or
$this->_helper->layout->setLayout('minimal');

Opening URI in overlay, not main page

On my page, overlays are loaded by inserting their content with jQuery and then fading in.
What I want to do is this:
When you click to open an overlay, an URI is loaded (e.g. news/12, where news is the category and 12 is the id of the item to load).
Except, instead of loading it in body, it should be loaded in the overlay.
In other words, I want to achieve something like on facebook, where you open an overlay, the url changes, but the main page stays the same.
I'm guessing you need ajax for this, but I have no idea whatsoever how to do it.
Thanks
It sounds like you want to use the new history.pushState(...) and history.popState(...) browser API.
This SO post might help you out: Change the URL in the browser without loading the new page using JavaScript
Use Boxy. See http://onehackoranother.com/projects/jquery/boxy/tests.html#
AJAX example:
<a href='#' onclick='Boxy.load("test-1.html");'>Test 1</a>
See this question: Ajax - How to change URL by content
I solved it thanks to Lethargy's answer.
.pushState() is exactly what I need to have the URL reflect the contents of the overlay that is dynamically created with jQuery.
With some tweaking around and debugging I managed to get it all working.
Now my overlays (or popups, dialogs, whatever) are search engine ready, and the url is copy-pastable for users :)

Is it possible to call a URL without a visible view?

Is it possible to load a URL without a visible view?
Basically I'm trying to submit some information to my server by a php page. It works from my webViewController, which has a working view, but not from my appDelegate, which doesn't have a visible view.
I recommend you use ASIHTTPRequest to submit the information to your php page.

Sharethis button does not work on pages loaded via ajax

I am trying to use the sharethis button on a page which is loaded via ajax.
The buttons do not show up. Please help.
Regards,
Pankaj
After adding the new content to the dom, call
stButtons.locateElements();
// or if you want to be a bit defensive about whether the lib has been
// loaded or not:
if (window.stButtons){stButtons.locateElements();} // Parse ShareThis markup
Article another another
Updated 09/2017 Answer
The stButtons object doesn't exist anymore, now you can use
window.__sharethis__.initialize()
To reinitialize the buttons
Updated 03/2020 Answer
As found in The Ape's answer above: https://stackoverflow.com/a/45958039/1172189
window.__sharethis__.initialize()
This still works, however there is a catch if your URL changes on the AJAX request, you need to make sure the URL you want shared is set as a data attribute (data-url) on the inline sharing div. You can also update the title using data-title attribute.
<div class="sharethis-inline-share-buttons" data-url="http://sharethis.com" data-title="Sharing is great!"></div>
Use case:
I'm using a WordPress/PHP function to generate specific content based on a query string. If you don't set the data-url attribute on the ShareThis div, ShareThis will hold the first URL that was clicked to share, regardless of the URL update on AJAX request.
This solution will also work for NodeJS based frameworks, like Meteor.
stButtons.locateElements();
is needed in the rendered callback of a template, to ensure that the shareThis buttons will appear on a page redirect.
I was facing the same problem with sharethis and Ajax pagination.
The buttons was not showing after posts loaded by Ajax so I've searched and found this.
I've just added the function stButtons.locateElements(); on Ajax success:
something like success: stButtons.locateElements();
Hope this will be helpful for someone like me.
Thanks
Ibnul
For the new API following solution worked for me
if (__sharethis__ && __sharethis__.config) {
__sharethis__.init(__sharethis__.config);
}
Add this code after loading ajax content.
do this:
window.__sharethis__.load('inline-share-buttons', config);
and config your buttons with javascript.
The following should work with current ShareThis javascript. If sharethis js isn't loaded, the script loads it. If it is already loaded, ShareThis is re-initialized using the current URL so that it works on pages loaded via Ajax. Working fine for me when used with mounted method on Vue component.
const st = window.__sharethis__
if (!st) {
const script = document.createElement('script')
script.src =
'https://platform-api.sharethis.com/js/sharethis.js#property=<your_property_id>&product=sop'
document.body.appendChild(script)
} else if (typeof st.initialize === 'function') {
st.href = window.location.href
st.initialize()
}
Make sure you use your property id provided by ShareThis in the script src url.
In Drupal you can achieve this by adding following code:
(function($){
Drupal.behaviors.osShareThis = {
attach: function(context, settings) {
stLight.options({
publisher: settings.publisherId
});
// In case we're being attached after new content was placed via Ajax,
// force ShareThis to create the new buttons.
stButtons.locateElements();
}
};
});
I found the following solution on one of the addThis forums and it worked great for me.
I called the function as a callback to my ajax call. Hoep this helps
<script type="text/javascript">
function ReinitializeAddThis(){
if (window.addthis){
window.addthis.ost = 0;
window.addthis.ready();
}
}
...
$('#camps-slide .results').load(loc+suffix, function() {ReinitializeAddThis();});
</script>