SimplePortal

Support => English Support => Topic started by: Eudemon on April 23, 2011, 11:24:27 PM

Title: hmm...about php block
Post by: Eudemon on April 23, 2011, 11:24:27 PM
i wanna write a slide show block
i alrdy have the js and slide show codes set up
 
right now i need help getting the recent items from gallery aeva
i can easier get a item with this code
<a href="', $galurl, 'sa=item;id=', $item['id'], '"><img src="', $galurl, 'sa=media;id=', $item['id'], ';preview" alt="" />
but how do i make loop recent 5 items
and how do i get the title, just use $item['title']?

also anyone know how to get for example
the image from [img] tag one from each thread for looping recent 5 threads?
i just need to get the img url, the thread url and thread title

thx

if u need to see my site it's on my signature
Title: Re: hmm...about php block
Post by: [SiNaN] on April 24, 2011, 08:25:23 AM
For AevaMedia:

Code: [Select]
global $sourcedir, $galurl;

require_once($sourcedir . '/Aeva-Subs.php');

$items = aeva_getMediaItems(0, 5, 'm.id_media DESC');

foreach ($items as $item)
echo $item['title'], '<a href="', $galurl, 'sa=item;id=', $item['id'], '"><img src="', $galurl, 'sa=media;id=', $item['id'], ';thumb" alt="" /></a><br />';

You can use such a code to see what's available in $items array:

Code: [Select]
echo '<pre>';
print_r($items);
echo '</pre>';

For the extracting images from topics:

Code: [Select]
global $smcFunc;

$board_id = 1;

$request = $smcFunc['db_query']('', '
SELECT t.id_topic, m.subject, m.body
FROM {db_prefix}topics AS t
INNER JOIN {db_prefix}messages AS m ON (m.id_msg = t.id_first_msg)
WHERE t.id_board = {int:board}
ORDER BY t.id_topic DESC
LIMIT {int:limit}',
array(
'board' => $board_id,
'limit' => 5,
)
);
$items = array();
while ($row = $smcFunc['db_fetch_assoc']($request))
{
$items[] = array(
'title' => $row['subject'],
'href' => $scripturl . '?topic=' . $row['id_topic'] . '.0',
'image' => preg_match('~\[img[^\]]*\](.+?)\[/img\]~', $row['body'], $match) ? $match[1] : '',
);
}
$smcFunc['db_free_result']($request);

foreach ($items as $item)
echo '<a href="', $item['href'], '">', $item['title'], '</a>:', (!empty($item['image']) ? '<img src="' . $item['image'] . '" alt="" />' : 'No Image') . '<br />';

Change the $board_id as the id of the board you want to fetch images from.
Title: Re: hmm...about php block
Post by: Eudemon on April 24, 2011, 01:53:27 PM
thank you SiNaN

if i want to get the items from specific album, where do i put the album id?

also for the topic tag
 i wanna make it search [img] or <img> since i sometimes use html tag

also for the topic loop, here is my code
Code: [Select]
foreach ($items_t as $item_t){
echo '<a href="', $item_t['href'], '">' (!empty($item_t['image']) ? '<img src="' , $item_t['image'] , '" alt="" /><span>',$row['subject'],'</span>' : 'No Image') '</a>';
}
i added _t in the end because i placed media code in there too, since they both use $items, i also changed $item to $item_t when define array
anyways, the above code i'm getting unexpected '(', expecting ',' or ';'
can u see the error?
Title: Re: hmm...about php block
Post by: grafitus on April 24, 2011, 03:05:25 PM
In Sinan's code:
Code: (Find) [Select]
$items = aeva_getMediaItems(0, 5, 'm.id_media DESC');
Code: (Replace) [Select]
$items = aeva_getMediaItems(0, 5, 'm.id_media DESC', true, array(1, 5, 16));
1, 5 and 16 are album IDs.
Title: Re: hmm...about php block
Post by: Eudemon on April 24, 2011, 03:09:42 PM
thx, that works, btw i edited my last post can you take a look?
Title: Re: hmm...about php block
Post by: grafitus on April 24, 2011, 03:34:00 PM
Use this:
Code: [Select]
foreach ($items_t as $item_t)
echo '<a href="', $item_t['href'], '">', (!empty($item_t['image']) ? '<img src="', $item_t['image'], '" alt="" /><span>', $row['subject'], '</span>' : 'No Image'), '</a>';
Title: Re: hmm...about php block
Post by: Eudemon on April 24, 2011, 03:53:37 PM
still getting
syntax error, unexpected ','
and it's not missing tag from before, cuz if i comment out that part the whole thing works fine

again, when fetch topic from db
i wanna make it search for [img] or <img> and only match the 1st one
should be this code needs to change
Code: [Select]
'image' => preg_match('~\[img[^\]]*\](.+?)\[/img\]~', $row['body'], $match) ? $match[1] : '',unfortunately my coding is not good enough to tweak this one  ;P sorry
Title: Re: hmm...about php block
Post by: Chen Zhen on April 24, 2011, 10:48:58 PM
Code: [Select]
foreach ($items_t as $item_t)
echo '<a href="', $item_t['href'], '">', !empty($item_t['image']) ? '<img src ="'.$item_t['image'].'" title="'.$row['subject'].'" alt="" /><span>'. $row['subject']. '</span>' : 'No Image' , '</a>';

no comma for logic only for echo
Title: Re: hmm...about php block
Post by: Eudemon on April 24, 2011, 11:14:21 PM
thx, that did the trick, still looking for help when fetching topics, see my previous post

Quote
Change the $board_id as the id of the board you want to fetch images from.
what if i wanna fetch from multiple boards?
Title: Re: hmm...about php block
Post by: Chen Zhen on April 25, 2011, 01:34:34 AM
Code: [Select]
global $smcFunc;
$limit = 100;

$request = $smcFunc['db_query']('', '
SELECT t.id_topic, m.subject, m.body
FROM {db_prefix}topics AS t
INNER JOIN {db_prefix}messages AS m ON (m.id_msg = t.id_first_msg)
WHERE t.id_board IN (1,2,3,4,5)
ORDER BY t.id_topic DESC
LIMIT {int:limit}',
array(
'board' => $boards,
'limit' => $limit,
)
);
$items = array();
$count = 0;
while ($row = $smcFunc['db_fetch_assoc']($request))
{       
        $pattern = '/\[img]([^\[]+)?\[\/img\]?/i';
        preg_match ($pattern, $row['body'], $matches);
        $src = $matches[1];
        unset($matches);
        if (empty($src)) {continue;}
        if ($count > 4) {break;}
$items[] = array(
'title' => $row['subject'],
'href' => $scripturl . '?topic=' . $row['id_topic'] . '.0',
'image' =>  $src,
);
        $count++;
}
$smcFunc['db_free_result']($request);

foreach ($items as $item)
echo '<div style="text-align:center;"><a href="', $item['href'], '">',  (!empty($item['image']) ? '<img src="' . $item['image'] . '" alt="" />' : 'No Image') . '<br />', $item['title'], '</a><br /></div>';

I dunno - you can mess with that.. that should show the first 5 images incrementing from boards 1 - 5 assuming there are at least 5 images in the first 100 (limit) topics.
Title: Re: hmm...about php block
Post by: [SiNaN] on April 25, 2011, 09:54:46 AM
again, when fetch topic from db
i wanna make it search for [img] or <img> and only match the 1st one
should be this code needs to change
Code: [Select]
'image' => preg_match('~\[img[^\]]*\](.+?)\[/img\]~', $row['body'], $match) ? $match[1] : '',unfortunately my coding is not good enough to tweak this one  ;P sorry

The second code I gave would do exactly that. If you want multiple boards, use this:

Code: [Select]
global $smcFunc;

$boards = array(1, 2, 3);

$request = $smcFunc['db_query']('', '
SELECT t.id_topic, m.subject, m.body
FROM {db_prefix}topics AS t
INNER JOIN {db_prefix}messages AS m ON (m.id_msg = t.id_first_msg)
WHERE t.id_board IN ({array_int:boards})
ORDER BY t.id_topic DESC
LIMIT {int:limit}',
array(
'boards' => $boards,
'limit' => 5,
)
);
$items = array();
while ($row = $smcFunc['db_fetch_assoc']($request))
{
$items[] = array(
'title' => $row['subject'],
'href' => $scripturl . '?topic=' . $row['id_topic'] . '.0',
'image' => preg_match('~\[img[^\]]*\](.+?)\[/img\]~', $row['body'], $match) ? $match[1] : '',
);
}
$smcFunc['db_free_result']($request);

foreach ($items as $item)
echo '<a href="', $item['href'], '">', $item['title'], '</a>:', (!empty($item['image']) ? '<img src="' . $item['image'] . '" alt="" />' : 'No Image') . '<br />';

If not all the topics in those boards have images in their first posts and you need to make sure only topics with images are fetched, you can use this:

Code: [Select]
global $smcFunc;

$boards = array(1,2);

$request = $smcFunc['db_query']('', '
SELECT t.id_topic, m.subject, m.body
FROM {db_prefix}topics AS t
INNER JOIN {db_prefix}messages AS m ON (m.id_msg = t.id_first_msg)
WHERE t.id_board IN ({array_int:boards})
AND m.body LIKE {string:search}
ORDER BY t.id_topic DESC
LIMIT {int:limit}',
array(
'boards' => $boards,
'search' => '%[/img]%',
'limit' => 5,
)
);
$items = array();
while ($row = $smcFunc['db_fetch_assoc']($request))
{
$items[] = array(
'title' => $row['subject'],
'href' => $scripturl . '?topic=' . $row['id_topic'] . '.0',
'image' => preg_match('~\[img[^\]]*\](.+?)\[/img\]~', $row['body'], $match) ? $match[1] : '',
);
}
$smcFunc['db_free_result']($request);

foreach ($items as $item)
echo '<a href="', $item['href'], '">', $item['title'], '</a>:', (!empty($item['image']) ? '<img src="' . $item['image'] . '" alt="" />' : 'No Image') . '<br />';

This will be slower if you have a lot of posts in your forum though.
Title: Re: hmm...about php block
Post by: Eudemon on April 25, 2011, 07:08:48 PM
tested with the 1st one
i have a topic that writes img in html
Code: [Select]
[html]
<img src="http://www.kumakuni.com/img/logo/leaf-2-logo.png" />
[/html]
it's not getting that image

and it does work for regular bbc [img] tags
also the multiple board edit works also, thx
Title: Re: hmm...about php block
Post by: Chen Zhen on April 25, 2011, 09:08:29 PM
Code: [Select]
global $smcFunc;
$limit = 100;
$boards = array(1,2,3,4,5);

$request = $smcFunc['db_query']('', '
SELECT t.id_topic, m.subject, m.body
FROM {db_prefix}topics AS t
INNER JOIN {db_prefix}messages AS m ON (m.id_msg = t.id_first_msg)
WHERE t.id_board IN ({array_int:boards})
ORDER BY t.id_topic DESC
LIMIT {int:limit}',
array(
'boards' => $boards,
'limit' => $limit,
)
);
$items = array();
$count = 0;
while ($row = $smcFunc['db_fetch_assoc']($request))
{       
        $patterns = array('\[img]([^\[]+)?\[\/img\]?', '\<img([^\[]+)?\><\/img\>?', '\<img([^\[]+)?\/\>?');
        $remove = array('/ >', '<img>', '<img', '/>', '</img>', '[img]', '[/img]', 'src=', '"', '>');
        $pattern = '/(' .implode('|', $patterns) .')/i';
        preg_match ($pattern, $row['body'], $matches);
        $src = $matches[1];
        unset($matches);
        if (empty($src)) {continue;}
        if ($count > 4) {break;}
        $src = str_ireplace($remove, '', $src);
        if (substr($src,-1) == '/') {$src = substr($src,0,-1);}
$items[] = array(
'title' => $row['subject'],
'href' => $scripturl . '?topic=' . $row['id_topic'] . '.0',
'image' =>  $src,
);
        $count++;
}
$smcFunc['db_free_result']($request);

foreach ($items as $item)
{
echo '<div style="text-align:center;"><a href="', $item['href'], '">',  (!empty($item['image']) ? '<img src="' . $item['image'] . '" alt="" title="'.$item['title'].'" />' : 'No Image') . '<br />', $item['title'], '</a><br /></div>';
}

Try that out.
 
Title: Re: hmm...about php block
Post by: Eudemon on April 25, 2011, 09:37:46 PM
Quote
Try that out.
tried, didn't work
it's doing weird thing like each topic slide showing the 5th image from media
some words in those post pop up and then disappear
also it get the newest 4 posts from board 1 in array and 1 from other board
but the other board posts are newer than those from board 1
thanks tho Underdog

anyways
the last one [SiNaN] gave me works
only it's not getting img from post using html tag like
Code: [Select]
[html]
<img src="http://www.kumakuni.com/img/logo/leaf-2-logo.png" />
[/html]
Title: Re: hmm...about php block
Post by: AngelinaBelle on April 26, 2011, 07:02:53 AM
Are you putting the "get slide show from AEVA" and "get images from topics" code into the same block?
Title: Re: hmm...about php block
Post by: Eudemon on April 26, 2011, 12:59:27 PM
i use $item for get aeva and rename get topic to $item_t
so they won't collide each other, in fact it's actually working
i've tested and i'm getting 5 from aeva and 5 from topic
the only problem right now the get topic isn't getting the post image that uses <img src="~~~
Title: Re: hmm...about php block
Post by: AngelinaBelle on April 26, 2011, 10:51:27 PM
I don't know, offhand, where the thing is going wrong.
If I had written the code, the first thing I would do is double-check my own regexps, using one of the online regexp testers like http://www.spaweditor.com/scripts/regex/ (http://www.spaweditor.com/scripts/regex/)
To be sure what is going on, you can just get the block to echo something useful at each step, moving from $body to $matches to str_ireplace($remove, '', $src).
Title: Re: hmm...about php block
Post by: Eudemon on April 27, 2011, 10:40:46 PM
what looks missing to me is this line
Code: [Select]
'image' => preg_match('~\[img[^\]]*\](.+?)\[/img\]~', $row['body'], $match) ? $match[1] : '',it seem to me that the image build/search is building [img] image from post
but is not building <img src="~~ image from post
my coding is not good enough to tweak this line tho
Title: Re: hmm...about php block
Post by: [SiNaN] on April 28, 2011, 06:56:09 AM
In the code I gave:

Code: (Find) [Select]
'~\[img[^\]]*\](.+?)\[/img\]~'
Code: (Replace) [Select]
'~(?:<|\[)img.*?(?:src="|\])(.+?)(?:".+?/>|\[/img])~'
It'll catch both BBC and HTML img tag.
Title: Re: hmm...about php block
Post by: Eudemon on April 28, 2011, 04:26:36 PM
that works

and here is the code i wrote to *try* to combine the 5 items from media, and 5 items from post
and shuffle it, but it seems like the array is not storing the string, can u see why

Code: [Select]
$slide=array();
$num=-1;
foreach ($items as $item){
        $num=$num+1;
$slide= array( $num => '<a href="', $galurl, 'sa=item;id=', $item['id'], '"><img src="', $galurl, 'sa=media;id=', $item['id'], ';preview" alt="" />
                <span>', $item['title'],'</span></a>' );
}

foreach ($items_t as $item_t){
        $num=$num+1;
        $slide = array ( $num => '<a href="', $item_t['href'], '">', !empty($item_t['image']) ? '<img src ="'.$item_t['image'].'" title="'.$row['subject'].'" alt="" /><span>'. $item_t['title']. '</span>' : 'No Image' , '</a>' );
}

shuffle($slide);

for($i=0;$i<$num;$i++)
    echo $slide[$i];

update: there was a missing $, and right now it's only loading 1 image OTL
Title: Re: hmm...about php block
Post by: Eudemon on April 28, 2011, 04:41:18 PM
just for a better understand, here is the entire codes of the block

Code: [Select]
code removed

for some reason the for loop of $slide is only showing one image
(above and below //loop image comment)
btw how do i highlight something that's in code view

<---see last post for shorter version
Title: Re: hmm...about php block
Post by: [SiNaN] on April 30, 2011, 06:26:40 AM
Code: (Find) [Select]
$slide=array();
$num=-1;
foreach ($items as $item){
        $num=$num+1;
$slide= array( $num => '<a href="', $galurl, 'sa=item;id=', $item['id'], '"><img src="', $galurl, 'sa=media;id=', $item['id'], ';preview" alt="" />
                <span>', $item['title'],'</span></a>' );
}

foreach ($items_t as $item_t){
        $num=$num+1;
        $slide = array ( $num => '<a href="', $item_t['href'], '">', !empty($item_t['image']) ? '<img src ="'.$item_t['image'].'" title="'.$row['subject'].'" alt="" /><span>'. $item_t['title']. '</span>' : 'No Image' , '</a>' );
}

shuffle($slide);

//loop images

echo'<script type="text/javascript" src="http://www.kumakuni.com/coin-slider/jquery-1.5.2.min.js"></script>
<script type="text/javascript" src="http://www.kumakuni.com/coin-slider/coin-slider.min.js"></script>
<link rel="stylesheet" href="http://www.kumakuni.com/coin-slider/coin-slider-styles.css" type="text/css" />';

echo" <div id='coin-slider'><center>";

for($i=0;$i<$num;$i++)
    echo $slide[$i];

   echo '</center></div>';
echo'<script type="text/javascript">
    $(document).ready(function() {';
echo"        $('#coin-slider').coinslider();
    });
</script>";

Code: (Replace) [Select]
$slide = array();
foreach ($items as $item)
$slide[] = '<a href="' . $galurl . 'sa=item;id=' . $item['id'] . '"><img src="' . $galurl . 'sa=media;id=' . $item['id'] . ';preview" alt="" /><span>' . $item['title'] . '</span></a>';
foreach ($items_t as $item)
$slide[] = '<a href="' . $item_t['href'] . '"><img src="' . $item_t['image'] . '" title="' . $row['subject'] . '" alt="" /><span>' . $item_t['title'] . '</span></a>';
shuffle($slide);

echo'
<script type="text/javascript" src="http://www.kumakuni.com/coin-slider/jquery-1.5.2.min.js"></script>
<script type="text/javascript" src="http://www.kumakuni.com/coin-slider/coin-slider.min.js"></script>
<link type="text/css" rel="stylesheet" href="http://www.kumakuni.com/coin-slider/coin-slider-styles.css" />
<div id="coin-slider" style="text-align: center;">', implode('', $slide), '</div>
<script type="text/javascript">
$(document).ready(function() {
$('#coin-slider').coinslider();
});
</script>';
Title: Re: hmm...about php block
Post by: Eudemon on April 30, 2011, 12:30:46 PM
that works! thank you [SiNaN]
you can take a look of the slide show on my portal page, through the link on my signature

btw can u remove the url path for the js and css from both codes

again, thank you for ur support, i'm a freshman computer science college student
still learning new things about programming
but i'll try my best to help out the simple portal support board for return if i have time
Title: Re: hmm...about php block
Post by: yaosurfer on September 28, 2011, 03:28:18 PM
Hello
I dont want to start a new topic as this one is the most relevant to the situation im in right now.
Im trying to implement exactly the same slider.
3 files are loaded onto my server - css, .min.js plus js library
Now im trying to run the code you have supported (obviously with replaced path to files) and unfortunately im getting error in php block
Code: [Select]
$slide = array();
foreach ($items as $item)
$slide[] = '<a href="' . $galurl . 'sa=item;id=' . $item['id'] . '"><img src="' . $galurl . 'sa=media;id=' . $item['id'] . ';preview" alt="" /><span>' . $item['title'] . '</span></a>';
foreach ($items_t as $item)
$slide[] = '<a href="' . $item_t['href'] . '"><img src="' . $item_t['image'] . '" title="' . $row['subject'] . '" alt="" /><span>' . $item_t['title'] . '</span></a>';
shuffle($slide);

echo'
<script type="text/javascript" src="http://mydomain/forum/themes/slider/jquery-1.6.4.js"></script>
<script type="text/javascript" src="http://mydomain/forum/themes/slider/coin-slider.min.js"></script>
<link type="text/css" rel="stylesheet" href="http://mydomain/forum/themes/slider/coin-slider-styles.css" />';
<div id="coin-slider" style="text-align: center;">', implode('', $slide), '</div>
<script type="text/javascript">
$(document).ready(function() {
$('#coin-slider').coinslider();
});
</script>';

error message is:

Parse error: syntax error, unexpected '}', expecting ',' or ';' in /html/forum/Sources/PortalBlocks.php(3351) : eval()'d code on line 16


BTW do I have to implement or upload any other codes or files?

Thank you
Title: Re: hmm...about php block
Post by: Blue on September 29, 2011, 12:10:48 AM
Here, try this:

Code: [Select]
<?php

$slide 
= array();
foreach (
$items as $item)
$slide[] = '<a href="' $galurl 'sa=item;id=' $item['id'] . '"><img src="' $galurl 'sa=media;id=' $item['id'] . ';preview" alt="" /><span>' $item['title'] . '</span></a>';
foreach (
$items_t as $item)
$slide[] = '<a href="' $item_t['href'] . '"><img src="' $item_t['image'] . '" title="' $row['subject'] . '" alt="" /><span>' $item_t['title'] . '</span></a>';
shuffle($slide);

echo
'
<script type="text/javascript" src="http://mydomain/forum/themes/slider/jquery-1.6.4.js"></script>
<script type="text/javascript" src="http://mydomain/forum/themes/slider/coin-slider.min.js"></script>
<link type="text/css" rel="stylesheet" href="http://mydomain/forum/themes/slider/coin-slider-styles.css" />
<div id="coin-slider" style="text-align: center;">'
implode(''$slide), '</div>
<script type="text/javascript">
$(document).ready(function() {
$("#coin-slider").coinslider();
});
</script>'
;
SimplePortal 2.3.8 © 2008-2024, SimplePortal