Lei Lionel
Lei Lionel

Reputation: 1273

Display a popup when a PHP condition is met

I am having the following project that I have been working with for a while. Everything is working fine as you can see after running the snnipets.

/* The dark background behind the dialogs */

.dialog-overlay{
    display: none;
    position: fixed;
    top:0;
    left:0;

    width: 100%;
    height: 100%;
    background-color: rgba(0,0,0,0.3);

    z-index: 10;
}

/* The dialogs themselves */

.dialog-card{
    box-sizing: border-box;
    width: 570px;
    position: absolute;
    left: 50%;
    margin-left: -285px;
    top: 50%;

    font: bold 14px sans-serif;

    border-radius: 3px;
    background-color:  #ffffff;
    box-shadow: 1px 2px 4px 0 rgba(0, 0, 0, 0.12);
    padding: 45px 50px;
}

.dialog-card .dialog-question-sign{
    float: left;
    width: 68px;
    height: 68px;
    border-radius: 50%;
    color:  #ffffff;
    text-align: center;
    line-height: 68px;
    font-size: 40px;
    margin-right: 50px;
    background-color:  #b4d8f3;
}

.dialog-card .dialog-info{
    float: left;
    max-width: 350px;
}

.dialog-card h5{	/* Dialog title */
    color:  #383c3e;
    font-size: 24px;
    margin: 5px 0 30px;
}

.dialog-card p{		/* Dialog text */
    color:  #595d60;
    font-weight: normal;
    line-height: 21px;

    margin: 30px 0;
}

.dialog-card .dialog-confirm-button,
.dialog-card .dialog-reject-button{
    font-weight: inherit;
    box-sizing: border-box;
    color: #ffffff;
    box-shadow: 0 1px 1px 0 rgba(0, 0, 0, 0.12);
    padding: 12px 40px;
    border: 0;
    cursor: pointer;
    outline: 0;
}

.dialog-card .dialog-confirm-button{
    background-color:  #87bae1;
    margin-right: 12px;
}

.dialog-card .dialog-reject-button{
    background-color:  #e4749e;
}

.dialog-card button:hover{
    opacity:0.96;
}

.dialog-card button:active{
    position:relative;
    bottom:-1px;
}
<div id="my-confirm-dialog" class="dialog-overlay">

        <div class="dialog-card">

            <div class="dialog-question-sign"><i class="fa fa-question"></i></div>

            <div class="dialog-info">

                <h5>Are you sure?</h5>
                <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed pharetra id odio a pellentesque. In dapibus maximus augue, eu dapibus felis laoreet non.</p>

                <button class="dialog-confirm-button">Yes</button>
                <button class="dialog-reject-button">No</button>

            </div>

        </div>

    </div>


<span class="dialog-show-button" data-show-dialog="my-confirm-dialog">Show Confirm Dialog</span>

    
    <script src="http://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

    <script>

        // This is an example jQuery snippet that makes the dialogs work

        $(document).ready(function() {

            // We have two control functions that show or hide dialogs

            function showDialog(id){

                // Find the dialog and show it

                var dialog = $('#' + id),
                        card = dialog.find('.dialog-card');

                dialog.fadeIn();

                // Center it on screen

                card.css({
                    'margin-top' : -card.outerHeight()/2
                });

            }

            function hideAllDialogs(){

                // Hide all visible dialogs
                $('.dialog-overlay').fadeOut();

            }

            // Here is how to use these functions

            $('.dialog-confirm-button, .dialog-reject-button').on('click', function () {

                // Hide the dialog when the confirm button is pressed
                hideAllDialogs();

            });

            $('.dialog-overlay').on('click', function (e) {

                if(e.target == this){
                    // If the overlay was clicked/touched directly, hide the dialog
                    hideAllDialogs();
                }


            });

            $(document).keyup(function(e) {

                if (e.keyCode == 27) {
                    // When escape is pressed, hide all dialogs

                    hideAllDialogs();
                }

            });


            // Here, we are listening for clicks on the "show dialog" buttons,
            // and showing the correct dialog

            $('.dialog-show-button').on('click', function () {

                // Take the contents of the  "data-show-dialog" attribute
                var toShow = $(this).data('show-dialog');

                showDialog(toShow);
            });
        });

    </script>

Beside being able to display the popup after clicking on Show Confirm Dialog, I want to be able to display the popup when a PHP condition is met. Like:

if(condition){

  //Display Popup

}

Kindly help me solve this problem

Upvotes: 1

Views: 6043

Answers (3)

Jeff
Jeff

Reputation: 6953

supposing the php should be in the same script as the html, js, ...:

<?php
if(1===1) {
    echo "<script>";
    echo "showDialog('my-confirm-dialog');";
    echo "</script>";
}
?>

this needs to live at the very end of your html, otherwise it'll fail, because DOM not loaded, etc...

To be sure you could place that inside $(document).ready:

 <script>
 $(document).ready(function() {
       // leave the function-definitions and eventlisteners here
       //...

       // add at the very end:
       <?php 
       if(1===1) {
           echo "showDialog('my-confirm-dialog');";
       }
       ?>

 });
 </script>

Another solution would be to only set a js-var depending on the php-condition, and check for that in js.

Upvotes: 2

Softwaretechniker
Softwaretechniker

Reputation: 29

If you want to use some value from PHP in JavaScript, you have to put it somewhere on the page with PHP and read it with JavaScript. A dirty inline-script solution would be something like this:

<script>
  var myValueFromPhp = <?= \json_encode($anyThing) ?>;
</script>

A clean solution depends on the use-case, but would be similar:

<div data-coolness="<?='yepp'?>></div>

(or something like that, depending on the templating engine)

Upvotes: 0

StefanJanssen
StefanJanssen

Reputation: 456

The easiest way I see you could achieve this is just make a script tag in which you would call this function.

<?php if( condition ): ?>
    <script type='text/javascript'>
        showDialog(id)
    </script>
<?php endif; ?>

Upvotes: 1

Related Questions