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
For AevaMedia:
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:
echo '<pre>';
print_r($items);
echo '</pre>';
For the extracting images from topics:
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.
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
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?
In Sinan's code:
$items = aeva_getMediaItems(0, 5, 'm.id_media DESC');
$items = aeva_getMediaItems(0, 5, 'm.id_media DESC', true, array(1, 5, 16));
1, 5 and 16 are album IDs.
thx, that works, btw i edited my last post can you take a look?
Use this:
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>';
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
'image' => preg_match('~\[img[^\]]*\](.+?)\[/img\]~', $row['body'], $match) ? $match[1] : '',
unfortunately my coding is not good enough to tweak this one ;P sorry
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
thx, that did the trick, still looking for help when fetching topics, see my previous post
QuoteChange the $board_id as the id of the board you want to fetch images from.
what if i wanna fetch from multiple boards?
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.
Quote from: Eudemon on April 24, 2011, 03:53:37 PM
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
'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:
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:
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.
tested with the 1st one
i have a topic that writes img in html
[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
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.
QuoteTry 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
[html]
<img src="http://www.kumakuni.com/img/logo/leaf-2-logo.png" />
[/html]
Are you putting the "get slide show from AEVA" and "get images from topics" code into the same block?
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="~~~
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).
what looks missing to me is this line
'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
In the code I gave:
'~\[img[^\]]*\](.+?)\[/img\]~'
'~(?:<|\[)img.*?(?:src="|\])(.+?)(?:".+?/>|\[/img])~'
It'll catch both BBC and HTML img tag.
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
$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
just for a better understand, here is the entire codes of the block
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
$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>";
$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>';
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
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$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
Here, try this:
<?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>';