הוסטס - פורום אחסון האתרים הגדול בישראל

הוסטס - פורום אחסון האתרים הגדול בישראל (https://hosts.co.il/forums/index.php)
-   פורום תיכנות (https://hosts.co.il/forums/forumdisplay.php?f=14)
-   -   [PHP] עזרה בניסיון לבצעה STR_REPLACE על כמה דברים בעזרת לולאה (https://hosts.co.il/forums/showthread.php?t=31302)

-VladK- 22-09-06 14:27

[PHP] עזרה בניסיון לבצעה STR_REPLACE על כמה דברים בעזרת לולאה
 
ובכן....יכול להיות שלא הבנתם את הכותרת...ותאמת...אני לא מאשים אותכם |קורץ|

טוב אז ככה...
אני רוצה לעשות פונקציה...שמזינים לה כתובת של תיקיה, שם הקובץ, מה להחליף, ובמה...עכשיו...
הכל הלך מצויין עד שהיגעתי למצב שאני צריך לבצעה החלפה של יותר מדבר אחד באותו הקובץ (ההחלפה מתבצעת על התוכן של הקובץ שאני מייבא...)

חשבתי על דרך כלשהי....לפצל את החלק השלישי והרביעי (מה להחליף, ובמה) ואז לבצעה החלפה בעזרת המערך...אבל הסתבכתי לגמרי...אני מסתכל בקוד ואני לא מבין מה הוא לעזאזל עושה...

בקיצור אני מבובלבל לגמרי!

הקוד הוא כזה:
PHP קוד:

<?
function str_tpl($dir,$file,$what,$whith){
    
$tpl file($dir."/".$file.".tpl");
    if(
$what != NULL AND $whith != NULL){
        
$what_s explode("/"$what);
        
$whith_s explode("/"$whith);
        
$count1 count($what_s);
        
$x 0;
        for(
$i=1;$i<=$count1;$i++){
            
$tpl .= str_replace ($what_s[$x], $whith_s[$x], $tpl);
            
$x++;
        }
    }
    foreach (
$tpl as $cont){
        
$value .= $cont;
    }
    return 
$value;
}

echo 
str_tpl("style","header","<*CSS_NUM*>",1);
$block str_tpl("style","block","<*BLOCK_TITLE*>/<*BLOCK_CONTENT*>","כותרת/תוכן");
echo 
str_tpl("style","index_body","<*BLOCKS*>",$block);
echo 
str_tpl("style","footer",NULL,NULL);
?>

אני ישמח לעזרה.

עריכה:
זה מראה לי את השגיאה הבאה:
Warning: Invalid argument supplied for foreach() in *** on line 14

RS324 22-09-06 15:20

כנראה ש $tpl הוא לא מערך זה 1 , 2 בשביל יעילות הייתי ממליץ לך להשתמש ב preg_match_all ולשחק עם זה או להשתמש ב preg_replace_callback()

בהצלחה

עריכה:

שים לב למשפט הזה :

PHP קוד:

$tpl .= str_replace ($what_s[$x], $whith_s[$x], $tpl); 

אין לך את המשתנה X בכלל לפני השורה הזאת, כנראה שהוא NULL

-VladK- 22-09-06 15:27

אהההם....כפי שידוע לי FILE מחזיר ערך של מערך...מה עושה הפונקציה preg_match_all?
ומה עושה הפונקציה preg_replace_callback?

בקשר למשפט...המשתנה X כן קיים...הוא שווה ל0...שמתי אותו לפני הלולאה....

RS324 22-09-06 15:32

תעשה PRINT_R ל FILE ותראה מה אתה מקבל

-VladK- 22-09-06 15:41

וואלה צודק...אבל אני לא מבין מה זה בדיוק אומר...כי תכלס ככה:
PHP קוד:

<?
function str_tpl($dir,$file,$what,$whith){
    
$tpl file($dir."/".$file.".tpl");
    if(
$what != NULL AND $whith != NULL){
        
$tpl str_replace ($what$whith$tpl);
    }
    foreach (
$tpl as $cont){
        
$value .= $cont;
    }
    return 
$value;
}

echo 
str_tpl("style","header","<*CSS_NUM*>",1);
$block str_tpl("style","block","<*BLOCK_TITLE*>","כותרת");
echo 
str_tpl("style","index_body","<*BLOCKS*>",$block);
echo 
str_tpl("style","footer",NULL,NULL);
?>


-VladK- 22-09-06 17:35

אופסי...יצא לי בטעות דאבל :-/

RS324 22-09-06 18:01

אחרי

PHP קוד:

 $tpl file($dir."/".$file.".tpl"); 

תכתוב :

PHP קוד:

print_r($tpl); 

ותדביק פה מה שזה מוציא...

-VladK- 22-09-06 18:03

עשיתי את זה כשאמרתה לי לעשות PRINT_R בפעם הראשונה...
זה הראה לי משהו כזה:
array ( 1=> 2=> 3=>) and so on....

הנה צילום מסך:
http://img60.imageshack.us/img60/7286/untitledgk9.png

RS324 22-09-06 18:07

יופי אבל מה היה בתוך....
חח
אתה מחסיר את החלקים החשובים

-VladK- 22-09-06 18:10

בתוך מה?!? מה יש בתוך הקבצים שאני מאנקלד?

RS324 22-09-06 18:16

הדרך שאתה עושה היא איך לומר את זה בעדינות....מאד לא חכמה ולא יעילה...
בשביל מה להכניס את כל הטמפלט למערך ?
ואז כשאתה רוצה להחליף משהו אתה עובר בכל האיברים של המערך בכלל לא חכם לעשות את זה
תחליף את הפונקציה שלך לזאתי וזה כמעט בטוח יעבוד...

PHP קוד:

function str_tpl($dir,$file,$what,$whith){
    
$tpl file_get_contents($dir."/".$file.".tpl");
    if(
$what != NULL AND $whith != NULL){
        
$tpl str_replace ($what$whith$tpl);
    }
   
    return 
$tpl;



-VladK- 22-09-06 18:21

אוקיי...שגיאה זה לא מחזיר (יאיי)...אבל חסר פה הקטע של החלפה של 2 דברים...מה שגרם לי לבעיה מלכתכילה :-/

RS324 22-09-06 18:28

תנסה להחליף את :

PHP קוד:

 $tpl str_replace ($what$whith$tpl); 

בקוד הזה :

PHP קוד:

$tpl str_replace(($what), eval($whith), $tpl); 


-VladK- 22-09-06 18:31

arse error: syntax error, unexpected $end in /home/pilmen/domains/pilmen.sharvit.net/public_html/cms/index2.php(5) : eval()'d code on line 1

RS324 22-09-06 18:43

תכנס לקובץ שאתה עורך ואם נגיד כתוב לך
PHP קוד:

$var['bla'

תחליף אותו ב :

PHP קוד:

$var[bla

אותו דבר גם בדברים שאתה מחליף וזה יעבוד לך ב 100 %

ועוד דבר
PHP קוד:

echo str_tpl("style","header","<*CSS_NUM*>",1); 

תוסיף ADDSLASES בשביל שלא יהיה לך שגיאות.

-VladK- 22-09-06 21:26

ציטוט:

נכתב במקור על ידי RS324
תכנס לקובץ שאתה עורך ואם נגיד כתוב לך
PHP קוד:

$var['bla'

תחליף אותו ב :

PHP קוד:

$var[bla

אותו דבר גם בדברים שאתה מחליף וזה יעבוד לך ב 100 %

ועוד דבר
PHP קוד:

echo str_tpl("style","header","<*CSS_NUM*>",1); 

תוסיף ADDSLASES בשביל שלא יהיה לך שגיאות.

אין לי מערכים בתוך הקבצי הTPL...

ולא הבנתי לאן לשים את הADDSLASES שאמרתה לי לשים...

RS324 22-09-06 21:34

תחליף את

PHP קוד:

$tpl file_get_contents($dir."/".$file.".tpl"); 

ב

PHP קוד:

$tpl addslashes(file_get_contents($dir."/".$file.".tpl")); 


-VladK- 23-09-06 07:38

אני חושב שלא הבנתה מה אני רוצה לעשות...

כשאני מנסה להחליף משהו אחד במשהו אחד הכל עובד...אבל אחרי שאני מנסה לעשות החלפה של 2 דברים ב2 דברים זה לא עובד...

הקוד הזה:
PHP קוד:

<?
function str_tpl($dir,$file,$what,$whith){
    
$tpl file_get_contents($dir."/".$file.".tpl");
    if(
$what != NULL AND $whith != NULL){
        
$tpl str_replace ($what$whith$tpl);
    }
    return 
$tpl;
}

echo 
str_tpl("style","header","<*CSS_NUM*>",1);
$block str_tpl("style","block","<*BLOCK_TITLE*>","כותרת");
echo 
str_tpl("style","index_body","<*BLOCKS*>",$block);
echo 
str_tpl("style","footer",NULL,NULL);
?>

עובד...

אבל אחרי שאני משנה אותו קצת בכך שאני מפצל 2 חלקים ממנו ומכניס לתוך מערך ולאחר מכן מנסה לבצע החלפה אחד על אחד זה לא עובד לי :(

RS324 23-09-06 09:01

אוקי עכשיו הבנתי אותך.. ומסתבר שצדקתי בהתחלה
תנסה לעשות משהו כזה...

PHP קוד:

<?
function str_tpl($dir,$file,$what,$with)
{
//    $what = array(0=>'firstval',1=>'secondval');
    //$width = array(0=>'firstreplace',1=>'secondreplace');
    
    
    
$tpl file_get_contents($dir."/".$file.".tpl");
    
$tpl preg_replace("/$what/",$with,$tpl);

    return 
$tpl;
}

$what = array('<*CSS_NUM*>','<*BLOCK_TITLE*>','<*BLOCKS*>');  
$with = array('1','כותרת','block in here');

echo 
str_tpl('style','header',$what,$with);

?>


-VladK- 23-09-06 10:33

דבר ראשון זה מחזיר לי שגיאה...דבר שני...זו לא הדרך שרציתי לעבוד איתה...רציתי לעשות פונקציה שמזינים לה תיקיה, שם הקובץ, מה להחליף...אם זה 2 או יותר אז לפצל את זה למערך...ואז לבצע החלפה אחד על אחד עם במה שזה יוחלף...

RS324 23-09-06 10:49

1. איזה שגיאה זה מחזיר לך ?
2. זה יעבוד לך גם בלי מערכים..

-VladK- 23-09-06 10:58

Warning: preg_replace() [function.preg-replace]: Parameter mismatch, pattern is a string while replacement in an array. in /home/pilmen/domains/pilmen.sharvit.net/public_html/cms/index2.php on line 9

איך בדיוק?

RS324 23-09-06 11:11

החלטתי להפסיק לנסות לתת לך פתרונות בלי לבדוק

הבעיה אצלך היא ש PREG משתמש ב PLATERNS ו דברים שאתה רוצה להחליף
נראים ככה
<*CSS_NUM*>
וזה משנה את זה
אז אני יראה מה אפשר לעשות ויחזיר לך לפה תשובה עובדת...

-VladK- 23-09-06 11:19

תודה :) (מה זה PLATERNS?)

RS324 23-09-06 11:31

טוב אז ככה, לאחר כמה ניסיונות הגעתי למסקנה שיהיה קשה להשתמש ב PREG לכן החלטתי לבסוף להשתמש ב STR_REPLACE

זאת הפונקציה :

PHP קוד:

function str_tpl($dir,$file,$what,$with)
{
 
    
$tpl file_get_contents($dir."/".$file.".tpl");
 

    if (
is_array($what) AND is_array($with))
    {
        foreach (
$what AS $key=>$val)
        {
            
$tpl str_replace($what[$key],$with[$key],$tpl);
        }
        
    }
    else 
    {
        
$tpl str_replace($what,$with,$tpl);
    }
    
        return 
$tpl;


עכשיו דוגמאות להפעלה של הפונקציה :

PHP קוד:

$patterns = array();
$patterns[0] = '<*CSS_NUM*>';
$patterns[1] = '<*BLOCK_TITLE*>';
$patterns[2] = '<*BLOCKS*>';
$replacements = array();
$replacements[0] = 'this is css num';
$replacements[1] = 'כותרת';
$replacements[2] = 'block in here';
echo 
str_tpl('style','header',$patterns,$replacements); 

דוגמא נוספת :

PHP קוד:

echo str_tpl('style','header','<*CSS_NUM*>','mynum'); 

תהנה, עובד ב 100 %

-VladK- 23-09-06 15:08

ציטוט:

נכתב במקור על ידי RS324
טוב אז ככה, לאחר כמה ניסיונות הגעתי למסקנה שיהיה קשה להשתמש ב PREG לכן החלטתי לבסוף להשתמש ב STR_REPLACE

זאת הפונקציה :

PHP קוד:

function str_tpl($dir,$file,$what,$with)
{
 
    
$tpl file_get_contents($dir."/".$file.".tpl");
 

    if (
is_array($what) AND is_array($with))
    {
        foreach (
$what AS $key=>$val)
        {
            
$tpl str_replace($what[$key],$with[$key],$tpl);
        }
        
    }
    else 
    {
        
$tpl str_replace($what,$with,$tpl);
    }
    
        return 
$tpl;


עכשיו דוגמאות להפעלה של הפונקציה :

PHP קוד:

$patterns = array();
$patterns[0] = '<*CSS_NUM*>';
$patterns[1] = '<*BLOCK_TITLE*>';
$patterns[2] = '<*BLOCKS*>';
$replacements = array();
$replacements[0] = 'this is css num';
$replacements[1] = 'כותרת';
$replacements[2] = 'block in here';
echo 
str_tpl('style','header',$patterns,$replacements); 

דוגמא נוספת :

PHP קוד:

echo str_tpl('style','header','<*CSS_NUM*>','mynum'); 

תהנה, עובד ב 100 %

תודה רבה לך! מצטער שקצת שיגעתי לך תשכל ;P


כל הזמנים הם GMT +2. הזמן כעת הוא 20:12.

מופעל באמצעות VBulletin גרסה 3.8.6
כל הזכויות שמורות ©
כל הזכויות שמורות לסולל יבוא ורשתות (1997) בע"מ