[ balkan7 @ 18.11.2009. 21:41 ] @
Napravio sam funkciju za dodavanja koda u html tag <head>, recimo da zelim da dodajem neki javascript code ili style.css.
Ali na localhost dobjem sledecu gresku: Warning: stristr() [function.stristr]: Empty delimiter in C:\xampp\htdocs\site\header_includes.php on line 8

header_includes.php
Code:
<?php
$page_head_tags = "";

function add_to_head($tag=""){
   global $page_head_tags;
   
   if(!stristr($page_head_tags, $tag)){
      $page_head_tags .= $tag."\n";
   }
}?>


header.php
Code:
<?php
include("header_includes.php");
?>
<html>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<head>
<meta http-equiv="Content-Language" content="en-us">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Test Site</title>
<meta name="description" content="">
<meta name="keywords" content="">
<link rel="stylesheet" href="stil.css" type="text/css" media="screen" />
<?php if (function_exists("add_to_head")) { echo add_to_head(); } ?>
</head>

<body>


index.php
Code:
<?php
include_once("header.php");
add_to_head("<link rel='stylesheet' href='blue.css' type='text/css' media='screen' />");?>
[ Miroslav Ćurčić @ 18.11.2009. 21:56 ] @
Zeza te ovo: echo add_to_head();

Tu si verovatno hteo da napišeš: echo $page_head_tags;
[ balkan7 @ 18.11.2009. 22:11 ] @
Da da vidim da me zeza: echo add_to_head();
Prosto nemogu se snaci, ima li neko resenje za ovo ?
[ Miroslav Ćurčić @ 18.11.2009. 22:36 ] @
Napisao sam ti rešenje.
:)
[ balkan7 @ 18.11.2009. 22:41 ] @
Hvala ti na pomoc ali nije bio to resenije, morao sam da napravim jos jednu funkciju za output i dodati u footer-a

Code:
$output = ob_get_contents();
ob_end_clean();
echo handle_output($output);


Resio sam problemcic :)
[ Man-Wolf @ 18.11.2009. 23:05 ] @
Nisi ti resio problem, nego si samo "sakrio" gresku koja se prikazivala :-)) Mislim da bi ovo trebalo da ti odradi posao:

Code:

function add_to_head($tag=""){
   global $page_head_tags;
   
   if(!empty($tag) && !stristr($page_head_tags, $tag)){
      $page_head_tags .= $tag."\n";
   }
}


I posle samo:

Code:

echo $page_head_tags;

[ balkan7 @ 19.11.2009. 13:50 ] @
Mozda si u pravo ali sinoc kad sam proverio kod bio sam iznenadjen, na index-u mogao sam dodat javascript code a i menjat <title>, ali kad sam proverio contact.php i ostali fajlova nista nisam mogao dodati ili menjati.
Neznam sta nije uredu sa ovim kodom...

header_includes.php
Code:
$page_head_tags = "";
$page_title = "Test - ";

function set_title($title=""){
    global $page_title;
    
    $page_title = $title;
}

function add_to_title($addition=""){
    global $page_title;
    
    $page_title .= $addition;
}

function add_to_head($tag=""){
    global $page_head_tags;
    
    if(!stristr($page_head_tags, $tag)){
        $page_head_tags .= $tag."\n";
    }
}

function handle_output($output){
    global $page_head_tags, $page_title;

    if(!empty($page_head_tags)){
        $output = preg_replace("#</head>#", $page_head_tags."</head>", $output, 1);
    }
    if($page_title != "Test - "){
        $output = preg_replace("#<title>.*</title>#i", "<title>".$page_title."</title>", $output, 1);
    }
    
    return $output;
}


header.php
Code:
include("header_includes.php");
function get_head_tags(){
    echo "<!--[if lte IE 7]><style type='text/css'>.clearfix {display:inline-block;} * html .clearfix{height: 1px;}</style><![endif]-->";
}
?>
<html>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<head>
<meta http-equiv="Content-Language" content="en-us">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Test</title>
<link rel="stylesheet" href="style.css" type="text/css" media="screen" />
<?php if (function_exists("get_head_tags")) { echo get_head_tags(); }?>
</head>


footer.php
Code:

$output = ob_get_contents();
ob_end_clean();
echo handle_output($output);


index.php
Code:
include_once("header.php");
add_to_head("<link rel='stylesheet' href='blue.css' type='text/css' media='screen' />");
add_to_title("Bla Bla Bla");

[ Man-Wolf @ 19.11.2009. 14:51 ] @
Pa ti si zakomplikovao ovo iz sve snage, majkemi :p :p

Za pocetak, ne stigoh da ti kazem sinoc (a iskreno mrzelo me posle da pisem ponovo :P):

Ova tvoja funkcija:

Code:

function add_to_head($tag=""){
    global $page_head_tags;
    
    if(!stristr($page_head_tags, $tag)){
        $page_head_tags .= $tag."\n";
    }
}


Ima za ideju da proveri da li je vec inkludovana neka skripta/link/sta vec i ako jeste, nece je inkludovati opet ... I ok, to ce da radi u slucaju da ti probas:

Code:

add_to_head('<script type="text/javascript" src="javaskripta.js"></script>');
add_to_head('<script type="text/javascript" src="javaskripta.js"></script>'); // Ovo nece ubaciti (nece duplirati)


Ali, ti napisi:

Code:

add_to_head('<script src="javaskripta.js" type="text/javascript"></script>'); // Ovo ce ubaciti, i dobices dupliran include skripte ... 


Dalje ... Kad si se vec uhvatio proceduralnog stila pisanja, zar nije bilo lakse da napises ovako nesto:

header_functions.php:

Code:


$page_title = "Test - ";
$header_includes = "";

function add_to_title($title = '')
{
  global $page_title;

  $page_title .= $title;
}

function add_to_head($tag = '')
{
  global $header_includes;

  // Sad mozes da napravis onu tvoju proveru, iako nije najsrecnija (kao sto sam vec pomenuo ...)
  if(!empty($tag) && !stristr($header_includes, $tag)){
        $header_includes .= $tag."\n";
  }
}

function print_headers()
{
  global $page_title;
  global $header_includes;

  // Stampaj TITLE
  echo "<title>$page_title</title>";

  // Stampaj include-ove
  echo $header_includes;
}


I sad lepo u index.php:

Code:

include_once("header_functions.php");
add_to_head("<link rel='stylesheet' href='blue.css' type='text/css' media='screen' />");
add_to_title("Bla Bla Bla");


header.php:

Code:

<head>
<?php print_headers() ?>
</head>


I to bi trebalo da sljaka lepo :-)

Btw, pogledaj ovu klasu koju je radio Nikola Poša:

http://www.nikolaposa.in.rs/moj-rad/php-klase/head-section (klasa za rad sa Header-ima)

Pozz!

[ balkan7 @ 19.11.2009. 15:12 ] @
Hvala ti postavio sam tvoj code ali oped isto sta god da ubacim u add_to_head nista ne includuje, a kod add_to_title dobijem default vrednost $page_title = "Test - ";

Neznam ocemu je rec ...
[ balkan7 @ 19.11.2009. 16:00 ] @
Probao sam klasu od Nikola. Sad je drugacije recimo imam u header.php
Code:
<html>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<meta http-equiv="Content-Language" content="en-us">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<?php include_once("HeadSection.php");?>

<body>

    <div align="center">      
    <table class="table" cellspacing="0" cellpadding="0">
        <tr>
            <td>
            <img border="0" src="img/header.jpg" width="400" height="200"></td>

da nepisem ostali kod e sad kod indexa postavio sam kod za head section
Code:
require_once("header.php");

$headSectionParams = array(
    'title'   => 'My site',
    'meta'    => array('name'=>'keywords', 'content'=>'test, generate, head'), 
    'css'     => array('stil.css', 'menu.css'), 
    'js'      => array('functions.js', 'js/test.js'),
);

$headSection = new HeadSection(array('contentType'=>null, 'indent'=>8), $headSectionParams);

$headSection->addJs('test.js');
$headSection->addTitle(" | Test");

echo $headSection;


e sad kad idem u izvorni kod prikazuje se
Code:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<meta http-equiv="Content-Language" content="en-us">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">

<body>

    <div align="center">      
    <table class="table" cellspacing="0" cellpadding="0">
        <tr>
            <td>
            <img border="0" src="img/header.jpg" width="400" height="200"></td>
 TEK OVDE IDU HEAD TAGOVI

Kako da postavim tagove da idu posle
Code:
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
[ balkan7 @ 19.11.2009. 17:42 ] @
Man-Wolf probao sam tvoje dvije opcije ali vracam se na prvu, ako u header dodam samo:

header.php
Code:
<head>
<?php echo print_headers(); ?>
</head>


dobijam sledecu gresku: Fatal error: Call to undefined function print_headers() in C:\xampp\htdocs\site\header.php on line 11

dok u index-u includujem
Code:
include_once("header_functions.php");


a ako postavim include_once("header_functions.php"); u header.php i obrisem sa index-a onda sve sto napises u funkciju add_to_head nista se neprikazuje, prikazuje kao prazna...
[ Man-Wolf @ 19.11.2009. 18:25 ] @
Cek, nisam imao vremena da gledam sve, al ja rekoh da napises:

Code:


<?php print_headers(); ?>



A ne:

Code:


<?php echo print_headers(); ?>



:-)

I naravno, treba da inkludujes tu skriptu sa ovim f-jama ... :-)

[ balkan7 @ 19.11.2009. 18:35 ] @
Sve sam uradio kako sta si napisao ali oped ista greska, postavio sam i sa
Code:
<head>
<?php print_headers(); ?>
</head>
ali nece.

Fatal error: Call to undefined function print_headers() in C:\xampp\htdocs\site\header.php on line 11
[ Man-Wolf @ 19.11.2009. 18:59 ] @
Citat:
Man-Wolf:
I naravno, treba da inkludujes tu skriptu sa ovim f-jama ... :-)


header.php:
Code:

<head>
<?php include('header_functions.php'); // Il kako se vec zove .... ?>

<?php print_headers(); ?>
</head>
[ balkan7 @ 19.11.2009. 19:09 ] @
Fatal error: Call to undefined function add_to_title() in C:\xampp\htdocs\site\index.php on line 18

morao sam da postavim header.php ispod add_to_head i title i sad radi :)
a kako mogu umesto echo "<title>$page_title</title>"; u headers_functions.php da stavim kod za replace na <title> recimo kao ovo?

Code:
if($page_title != $page_title){
        $output = preg_replace("#<title>.*</title>#i", "<title>".$page_title."</title>", $output, 1);
    }
[ Man-Wolf @ 20.11.2009. 01:26 ] @
Cekaj, meni nije jasno uopste sta ti radis/pokusavas da uradis ? :-) Ti na tim stranicama vec imas neki <title> tag koji hoces da zamenis sa ovim tvojim ?? Pojasni malo bolje sta tacno pokusavas ;)
[ balkan7 @ 20.11.2009. 12:42 ] @
:) E ovako po sto ti nije jasno, kako sto vec imam header.php u njega sam stavio head tagove, e sad recimo da neki CSS ili Javascript code koristim samo u jedan FILE, umesto taj file da se ucitava u sve te stranice zato sam trazio tu fukciju da se ucitava samo u file koju dodam ja, sta se tice title onu fukciju koju si napisao nije bila losa ali to koristim recimo kao na CMS skripte primer, add_to_title("Kontakt"); a prije toga imam Site Title -, a to za title sta sam te pitao mislim da ti je jasno samo sam htio znat dali mogu koristiti metodu sa preg_replace, ali i ovako je Ok :)
Jel sad jasno ili oped nije :-) heheh
Pozzzzzzzzzzz
[ Man-Wolf @ 20.11.2009. 14:00 ] @
Pa iskren da budem i dalje mi nije bas najjasnije

Sto se tice <title></title> to je ok, ako sam dobro skapirao ?

E sad, sto se tice ovog sa include-ovanjem, aj da probam da vidim da li sam dobro razumeo:

Znaci, imas neke JavaScript-e/CSS-ove koje hoces da ucitas samo na odredjenim stranicama? Ako je to slucaj, onda ne znam sta ti ne odgovara u mom kodu ?

Znaci, ti ces u skripti za koju zelis da ima neke dodatne Header Include-ove, da dodas:

Code:

add_to_head(Prvi dodatni tag);
add_to_head(Drugi dodatni tag);
add_to_title(Definisi nastavak Title-a);


I onda u header.php:

Code:

<head>
<script src=....></src> <!-- Prvi tag koji treba da bude na svim stranicama ... -->
<script src=....></src> <!-- Drugi tag koji treba da bude na svim stranicama ... -->
<?php print_headers() ?>
<!-- I pozivom ove funkcije ces da dobijes: 
    <title>Site Title - (naslov koji si dodao u definisi nastavak title-a u add_to_title() funkciji)</title>
    --- Dodatne skripte (ukoliko postoje ....)
-->


Ako je nesto drugo u pitanju, onda bih te zamolio da se malo bolje potrudis i da razdvojis pitanja u vise redova (tipa - jedno pitanje -> jedan red), posto sam malo priglup, pa ne mogu bas najbolje da se snadjem

Pozdrav!


[ dakipro @ 20.11.2009. 14:23 ] @
Aj sad, reci ce neki da solim pamet, ali posto vidim da vec radis neke 'naprednije' stvari sa php-om, tj, barem razmisljas naprednije, o slobodi pozivanja funkcija i izmene sadrzaja, probaj da koristis smarty ili bilo koji drugi template engine, videces da su ovakvi problemi, a i gomila drugih, jednostavno nepotrebni. Samo mi deluje da imas potrebno znanje i nacin razmisljanja da predjes na neki template engine i da samo picis pravu stvar.
Nevezano za temu, izvinjavam se.
[ balkan7 @ 20.11.2009. 15:27 ] @
Man-Wolf - bilo je rec o <title></title>, ali napisao sam ti da i tvoj kod radi (nebitno sad to), sta se tice prvi kod koji sam ti pastirao po sto sam kopirao od CMS i mrzeo me je da pisem funkciju a i mozda ne bi se snaso tako nabolje zato sam jednostavno kopirao.
Na taj CMS sta koristim kod radi ali kad sam proverio na localhost-u samo na jedan file je radio na ostalih ne (cudno).
Hvala na podrsku !

dakipro - hvala ti, mozda cu poceti sa smarty.