Author Archives: Christoffer Wadensten

(PHP) Sort array of objects by property value

usort($myArray, function($a, $b)
{
    return strcmp($a->myPropery, $b->myPropery);
});

Sort by predefined order:

$predefinedOrder = array(1,5,2,6);

usort($arrayOfObjects, function ($a, $b) use ($predefinedOrder ) {

    $flipped = array_flip($predefinedOrder);
    $left = $flipped[$a->myPropery)];
    $right = $flipped[$b->myPropery)];
    return $left >= $right;
});

(PHP) Add column to table in Laravel

Create migration in console:

php artisan make:migration add_mycolumn_to_mytable

Use Schema::table() to access existing table (instead of Schema::create() for creating new tables)

public function up()
{
    Schema::table('mytable', function($table) {
        $table->text('mycolumn');
    });
}
public function down()
{
    Schema::table('mytable', function($table) {
        $table->dropColumn('mycolumn');
    });
}

Then run migrations:

php artisan migrate

(WordPress) Generate post title from custom field

I had a custom post type that only used custom fields, so I needed to generate a post title from there.
Here’s one way. You can if course chain as many if else as you want to check other types.

functions.php

function custom_post_type_title($post_id)
{
    global $wpdb;
    if (get_post_type($post_id) == 'staff') {
        $name = get_post_custom_values('name');
        $title = $name[0];
        $where = array('ID' => $post_id);
        $wpdb->update($wpdb->posts, array('post_title' => $title), $where);
    } 
}

add_action('save_post', 'custom_post_type_title');

(JS) Newline to br

Replaces newline characters with <br> tags in the same style as the php nl2br function

// lewline to br - php style 
function nl2br (str, is_xhtml) {
        var breakTag = (is_xhtml || typeof is_xhtml === 'undefined') ? '<br />' : '<br>';
        return (str + '').replace(/([^>\r\n]?)(\r\n|\n\r|\r|\n)/g, '$1'+ breakTag +'$2');
    }

(JS) Super simple slider/carousel/slideshow

Here’s how you can make a super simple slideshow that changes slides on a timer interval. You could easily edit it so any other event, like a mouse click, will trigger the slide() function.

You can see it in action HERE

HTML

<div class="slider">

    <div class="slide red">
        <p>THIS IS SLIDE 1</p>
    </div>

    <div class="slide blue">
        <p>THIS IS SLIDE 2</p>
    </div>

    <div class="slide green">
        <p>THIS IS SLIDE 3</p>
    </div>

</div>

CSS

.slider {
    width: 500px;
    height: 300px;
    margin: 0 auto;

    /* DON'T CHANGE THESE */
    position: relative;
    overflow: hidden;
}

.slide {
    /* DON'T CHANGE THESE */
    position: absolute;
    width: 100%;
    height: 100%;
}

/** ONLY FOR STYLING THE EXAMPLE SLIDES */
.slide p {
    color: #FFF;
    text-align: center;
}

.red {
    background: red;
}

.blue {
    background: blue;
}

.green {
    background: green;
}

jQuery

<script src="http://code.jquery.com/jquery-1.11.3.min.js"></script>
<script src="http://code.jquery.com/jquery-migrate-1.2.1.min.js"></script>
<script>
    // Configurable values
    slider = $('.slider'); // Slider element
    slideDuration = 3000; // Duration of each slide in milliseconds
    slideSpeed = 1000; // Speed of slide animation in milliseconds (must be equal of less than slideDuration)


    width = slider.width();
    slider.children().hide().css({left: width});
    slider.children(':first').show().css({left: 0});

    // Slide in from the left
    $.fn.slideIn = function () {
        $(this).show().animate({
            left: "-=" + width
        }, slideSpeed / 2);
    }

    // Slide out to the left
    $.fn.slideOut = function () {
        $(this).animate({
            left: "-=" + width
        }, slideSpeed / 2, function () {
            $(this).hide().css({left: width});
        });
    }

    // Main slide function
    function slide() {
        currentSlide = slider.find('div:visible:first');
        nextSlide = (!slider.children(":last").is(":visible")) ? currentSlide.next() : slider.children(':first');

        currentSlide.slideOut();
        nextSlide.slideIn();
    }

    // Timer function
    window.setInterval(function () {
        slide();
    }, slideDuration);
</script>

And of course you could make this dynamic by spitting out the slides from a database… for example like this:

<div class="slider">

<?php foreach ($slides as $slide) { ?>

    <div class="slide">
        <p><?php $slide['content'] ?></p>
    </div>

<?php } ?>

</div>

(PHP) Get a list of run database queries in Laravel

This is great if you want to see what queries are actually run when using Eloquent.

        // Get all querys run
        $queries = DB::getQueryLog(); 

        // If you want to sort them by time this works
        usort($queries, function ($a, $b) {
            return $a['time'] &amp;lt; $b['time'];
        });

        // Print them on screen in a readable way
        echo '&amp;lt;pre&amp;gt;';
        print_r($queries);
        echo '&amp;lt;/pre&amp;gt;';