Jens Törnell
Jens Törnell

Reputation: 24788

PHP - Don't repeat yourself?

http://plugins.trac.wordpress.org/browser/seo-content-helper/tags/1.1/get-data.php

Don't repeat yourself

I know of the "Don't repeat yourself". Still it's getting messy in some places. The code below contains three blocks of code.

They are similar in some ways and different in others. It don't follow the same pattern in all ways.

What it do

It creates an array that I loop out on the frontend.

Question

Are there any better ways to do this kind of stuff? Less messy, better structure?

    $message_start = '<strong>h2 tags</strong> - ';
    $message_end = '<span class="counter">' . $this->count_h2 . '</span>';
    if( $this->count_h2 == 0 ) {
        $message = 'No tags found. Add some!';
        $array['content_editor']['count_h2']['status'] = 2;
    } elseif( $this->count_h2 == 1 ) {
        $message = 'Some found. Too few!';
        $array['content_editor']['count_h2']['status'] = 1;
    } else {
        $message = 'Many found. Great!';
        $array['content_editor']['count_h2']['status'] = 0;
    }
    $array['content_editor']['count_h2']['message'] = $message_start . $message . $message_end;
    $array['content_editor']['count_h2']['count'] = $this->count_h2;

    $message_start = '<strong>h3-h6 tags</strong> - ';
    $h2_h6 = $this->count_h3 + $this->count_h4 + $this->count_h5 + $this->count_h6;
    $counter = ( $h2_h6 == 0 ) ? '' : $h2_h6;
    $message_end = '<span class="counter">' . $counter . '</span>';
    if( $h2_h6 == 0 ) {
        $message = 'No found. Add some!';
        $array['content_editor']['count_h3_h6']['status'] = 1;
    } else {
        $message = 'Found, great!';
        $array['content_editor']['count_h3_h6']['status'] = 0;
    }
    $array['content_editor']['count_h3_h6']['message'] = $message_start . $message . $message_end;
    $array['content_editor']['count_h3_h6']['count'] = $this->h2_h6;

    $message_start = '<strong>Title keywords</strong> - ';
    $counter = ( $this->found_keywords1_post_title == 0 ) ? '' : $this->found_keywords1_post_title;
    $message_end = '<span class="counter">' . $counter . '</span>';
    if( count( $this->keywords1 ) == 0 ) {
        $message = 'No primary added.';
        $array['content_editor']['missing_keywords1_post_title']['status'] = 2;
    } elseif( $this->found_keywords1_post_title == 0 ) {
        $message = 'No primary found.';
        $array['content_editor']['missing_keywords1_post_title']['status'] = 2;
    } else {
        $s = ( $this->found_keywords1_post_title != 1 ) ? 's' : '';
        $message = 'Primary found.';
        $array['content_editor']['missing_keywords1_post_title']['status'] = 0;
    }
    $array['content_editor']['missing_keywords1_post_title']['message'] = $message_start . $message . $message_end;
    $array['content_editor']['missing_keywords1_post_title']['count'] = $this->found_keywords1_post_title;

Upvotes: 1

Views: 231

Answers (2)

Jens T&#246;rnell
Jens T&#246;rnell

Reputation: 24788

I ended up using a clean array and prepare the variables before. It makes it more readable.

$array = array(
        'content_editor' => array(
            'count_h2' => array(
                'message_start' => 'h2 tags',
                'messages' => array(
                    0 => 'Many found. Great!',
                    1 => 'Some found. Too few!',
                    2 => 'No tags found. Add some!'
                ),
                'count' => $count_h2['count']
            ),
            'count_h3' => array(
                'message_start' => 'h3-h6 tags',
                'messages' => array(
                    0 => 'Found, great!',
                    1 => 'No tags found. Add some!'
                ),
                'count' => $count_h3['count']
            ),
            'missing_keywords1_post_title' => array(
                'status' => $missing_keywords1_post_title['status'],
                'message_start' => 'Title keywords',
                'messages' => array(
                    0 => 'Primary found!',
                    2 => 'No primary found!'
                ),
                'count' => $missing_keywords1_post_title['count']
            ),

Upvotes: 0

Sidux
Sidux

Reputation: 557

Here is an example for cleaning you code :

function pstrong($txt) {
    return "<strong>$txt</strong>";
} 

function pcounter($txt) {
    return '<span class="counter">' . $txt. '</span>';
}

$this->count_h1 = 1;
$this->h2_h6 = $this->count_h3 + $this->count_h4 + $this->count_h5 + $this->count_h6;
$array = array(
    'count_h2' => array(

        'title' => 'h2 tags',

        0 => array(
            'message' => 'No tags found. Add some!',
            'status' => 2
        ),

        1 => array(
            'message' => 'Some found. Too few!',
            'status' => 1
        ),

        'else' => array(
            'message' => 'Some found. Too few!',
            'status' => 0
        )
    ),

    'h2_h6' => array(
        'title' => 'h3-h6 tags',

        0 => array(
            'message' => 'No found. Add some!',
            'status' => 1
        ),


        'else' => array(
            'message' => 'Found, great!',
            'status' => 0
        )
    )
);

foreach($array as $key => $value) {

    $message = (!empty($value['title'][$index]) ? $value['title'][$index]['message'] : $value['title']['else']['message']);
    $array['content_editor'][$key][$index]['message'] = pstrong($value['title']) . $value['title'][$index]['message'] . pcounter($key);
    $array['content_editor'][$key][$index]['count'] = $this->$key;
}

Upvotes: 2

Related Questions