2013-10-09 2 views
0

나는 이것이 Wordpress 기반의 질문이라는 것을 알고 있지만, 그 대답은 확실히 독립형 PHP라고 생각합니다.이 PHP 코드 조각을 합리화

클라이언트를위한 거의 모든 사이트에서 옵션 페이지에서 제공되는 일부 소셜 미디어 링크를 추가해야합니다. 나는 현재 이런 종류의 스 니펫을 사용한다.

$twt = of_get_option('twitter'); 
$fcb = of_get_option('facebook'); 
$ins = of_get_option('instagram'); 
if ($twt) { 
    echo '<li class="twitter"><a href="'.$twt.'">Twitter</a></li>'; 
} 
if ($fcb) { 
    echo '<li class="facebook"><a href="'.$fcb.'">Facebook</a></li>'; 
} 
if ($ins) { 
    echo '<li class="instagram"><a href="'.$ins.'">Instagram</a></li>'; 
} 

이 내 주요 고객 중 하나 링크의 몇이 있다면 괜찮지 만, 최근에는 약간 투박한 할 수 있습니다 자신의 디자인에 태양 아래 모든 소셜 미디어 링크를 포함 할 수 있으므로이 방법을 수행 보인다 .

내가 모든 것을 foreach 또는 무엇인가에 결합 할 수있는 방법이 있습니까?

+0

- 그래서 데이터 구조의 종류는이 작업을 수행하는 편리 할 수 ​​있는지에 대해 생각합니다. – CBroe

+1

이 모든 진술에 공통된 것이 있습니까? 이 문장의 작은 부분 만 * variable *입니까? 이 문장을 적당한 * 변수 *와 루프를 가진 한 문장으로 대체 할 수 있습니까? – deceze

+0

@deceze 각 문장에서 유일한 부분은 옵션 값 (트위터, 페이스 북, 인스 타 그램)과 함께 제공되는'li' 클래스와 링크'href' –

답변

4

는 정확히 그 뜻 알고 있지만,이 코드를 확인하지 마십시오

$social_media = array(
    array('name' => 'Twitter', 'href' => of_get_option('twitter')), 
    array('name' => 'Facebook', 'href' => of_get_option('facebook')), 
    array('name' => 'Instagram', 'href' => of_get_option('instagram')) 
); 

foreach($social_media as $s) 
    echo '<li class="' . strtolower($s["name"]) . '"><a href="' . $s["href"] . '">' . $s["name"] . '</a></li>'; 

그런 다음 단순히으로 새로운 소셜 미디어 사이트를 추가 :

foreach(array('twitter', 'facebook', 'instagram') as $source) 
    { 
    $data = of_get_option($source); 
    if($data) 
     { 
     echo '<li class="'.$source.'"><a href="'.$data.'">'.ucfirst($source).'</a></li>'; 
     } 
    } 
+2

+1 이상한 공백입니다. =) – AD7six

+0

이것은 매력처럼 작동했는데, 이것은 내 개발 시간에서 몇 분을 면도해야합니다. +1 –

+0

내 IDE가 아닌 SO 창에서이 코드를 편집했습니다. 과도한 공백을 제거했습니다 - 지적 해 주셔서 감사합니다! –

2

당신이 뭔가를 시도해 볼 수도를 $social_media 어레이.

0

는 다음과 같은 시도 :

$social = array('Twitter', 'Facebook', 'Instagram'); 

for($i=0;$i<length($social); ++$i) { 
    $twt = of_get_option($social[$i]); 
    if ($twt) { 
     echo '<li class="' . strtolower($social[$i]) . '"><a href="' . $twt . '">' . $social[$i].  '</a></li>'; 
    } 
} 

당신은 배열에 추가하여 추가 소셜 네트워크를 추가 할 수 있습니다. 컴팩트 한 솔루션입니다.

6
  1. 식별 공통점 :

    echo '<li class="twitter"><a href="'.$twt.'">Twitter</a></li>'; 
    ^^^^^^^^^^^^^^^^^  ^^^^^^^^^^^^^^^^^^^^^  ^^^^^^^^^^^ 
    
  2. 변화 식별 부 :

    echo '<li class="twitter"><a href="'.$twt.'">Twitter</a></li>'; 
           ^^^^^^^      ^^^^^^^ 
    
  3. 식별 종속 관계 :

    $twtof_get_option(...) 그 파라미터에 따라이와 동일 twitter in 2
    서비스의 클래스와 이름은 서로 종속되어 있습니다. 그들의 관계는 이름이 클래스의 첫 글자 대문자 버전 일뿐입니다.하지만 필자는 필연적으로 그 것에 의존하지 않을 것입니다.

의 Unify :뿐만 아니라 배열을 사용하여 의미 foreach 문을 사용하여

$services = array(
    'twitter' => 'Twitter', 
    'facebook' => 'Facebook' 
    ... 
); 

foreach ($services as $service => $name) { 
    if ($url = of_get_option($service)) { 
     printf('<li class="%s"><a href="%s">%s</a></li>', $service, $url, $name); 
     // or, if you can't be sure that the variables are safe for HTML interpolation: 
     // printf('<li class="%s"><a href="%s">%s</a></li>', htmlspecialchars($service), htmlspecialchars($url), htmlspecialchars($name)); 
    } 
} 
+2

OP가 스스로 해결할 수 있도록 도와줍니다. – dunc

관련 문제