There was a problem initializing the feedlist plugin. Make sure the file feedlist.php is directly under your wp-content/plugins directory and not a subdirectory.
args = $args; $this->id = md5(uniqid(rand(), true)); } function GetID(){ $this->Debug($this->id); } /* core methods */ // called automagically if you use an inline filter (inside a post/page). function FeedListFilter(){ return $this->BuildFeedOutput(); } // call this if you want to process one feed function FeedListFeed(){ echo $this->BuildFeedOutput(); } // call this if you want to process a feed file function FeedListFile(){ $this->args = $this->GetArgumentArray(); $this->output = ''; // Seed the random number generator: srand((double)microtime()*1000000); $feed = Array(); $feedInfo = $this->LoadFile($this->args['file']); if(count($feedInfo)){ // we have some feeds // Randomize the array: shuffle($feedInfo); // Make sure we are set to show something: ($this->args['feedsToShow'] < 1) ? 1 : $this->args['feedsToShow']; ($this->args['feedsToShow'] > sizeof($feedInfo)) ? sizeof($feedInfo) : $this->args['feedsToShow']; // we will fetch each feed, then coallate items for($i=0;$i<$this->args['feedsToShow'];$i++){ $thisFeed = $feedInfo[$i]; $urlAndTitle = preg_split("/~/", $thisFeed); $feedUrl = trim($urlAndTitle[0]); $feedTitle = trim($urlAndTitle[1]); $this->rs = $this->GetFeed($feedUrl); if($this->rs){ $this->items = $this->rs->items; if($this->args['random']){ shuffle($this->items); } // Slice off the number of items that we want: if ($this->args['num_items'] > 0) { $this->items = array_slice($this->items, 0, $this->args['num_items']); } if(!$this->args['mergeFeeds']){ $this->output.= '
'.$feedTitle.'
'; if($this->args['show_date']){ $this->output .= '
updated: '. $this->NormalizeDate($this->rs) . '
'; // fl_tz_convert($this->rs->last_modified,0,Date('I')).''; } $this->output.=$this->Draw($this->items,$this->args); } else { $feed = array_merge($feed,$this->items); } } } $this->output .= ''; } else { $this->output = $this->args['before'] . 'No Items Were Found In the Provided Feeds. Perhaps there is a communication problem.' . $this->args['after']; } // coallate feed items echo $this->output; } /* end core methods */ /* basic settings - you can edit these */ function GetSettings(){ /* CONFIGURATION SETTINGS ---------------------- cacheTimeout how long should your cache file live in seconds? By default it is 21600 or 6 hours. most sites prefer you use caching so please make sure you do! connectionTimeout how long should I try to connect the feed provider before I give up, default is 15 seconds showRssLinkListJS TRUE by default and will include a small block of JS in your header. If it is false the JS will not be included. If you want the $new_window = 'true' option to use the JS then this must also be true. Otherwise both true and simple will hardcode the target="_blank" into the new window links */ // DEFINE THE SETTINGS -- EDIT AS YOU NEED: $feedListDebug = false; // To debug this script during programming (true/false). $cacheTimeout = 21600; // 21600 sec is 6 hours. $connectionTimeout = 15; // 15 seconds is default $showRSSLinkListJS = true; $Language = 'en_US'; // Choose your language (from the available languages below,in the translations): $Translations = array(); // Please send in your suggestions/translations: // English: $Translations['en_US'] = array(); $Translations['en_US']['ReadMore'] = 'Read more...'; // Dutch: $Translations['nl_NL'] = array(); $Translations['nl_NL']['ReadMore'] = '[lees verder]'; // French: $Translations['fr_FR'] = array(); $Translations['fr_FR']['ReadMore'] = 'Lisez davantage'; $feedListFile = '/feeds.txt'; // IF you are going to use the random feedlist generator make sure this holds the correct name for your feed file: // Build an array out of the settings and send them back: $settings = array ( 'feedListDebug' => $feedListDebug, 'cacheTimeout' => $cacheTimeout, 'connectionTimeout' => $connectionTimeout, 'showRSSLinkListJS' => $showRSSLinkListJS, 'language' => $Language, 'translations' => $Translations, 'feedListFile' => $feedListFile ); return $settings; } function GetDefaults(){ $settings = $this->GetSettings(); return array( 'rss_feed_url' => 'http://del.icio.us/rss', 'num_items' => 15, 'show_description' => true, 'random' => false, 'before' => '
  • ', 'after' => '
  • ', 'description_separator' => ' - ', 'encoding' => false, 'sort' => 'none', 'new_window' => false, 'ignore_cache' => false, 'suppress_link' => false, 'show_date' => false, 'additional_fields' => '', 'max_characters' => 0, 'max_char_wordbreak' => true, 'file'=>$settings['file'], 'feedsToShow'=>0, 'mergeFeeds'=>false, 'show_date_per_item' => false, 'show_description_only' => false ); } /* end basic settings */ function BuildFeedOutput(){ $this->args = $this->GetArgumentArray(); $this->rs = $this->GetFeed($this->args['rss_feed_url']); $this->output = ''; if($this->rs){ $this->items = $this->rs->items; if($this->args['random']){ shuffle($this->items); } // Slice off the number of items that we want: if ($this->args['num_items'] > 0) { $this->items = array_slice($this->items, 0, $this->args['num_items']); } $this->output = $this->Draw(); } return $this->output; } function Draw(){ $settings = $this->GetSettings(); $this->items = $this->NormalizeDates($this->items); $this->items = $this->SortItems($this->items,$this->args['sort']); // Explicitly set this because $new_window could be "simple": $target = ''; if($this->args["new_window"] == true && $settings["showRSSLinkListJS"]) { $target=' rel="external" '; } elseif ($this->args["new_window"] == true || $settings["new_window"] == 'simple') { $target=' target="_blank" '; } $this->output =''; foreach($this->items as $item){ $thisLink = ''; $linkTitle = ''; $thisDescription = ''; $thisTitle = $item['title']; $thisItemDate = ''; if($this->args['show_description_only']){ $this->args['show_description'] = true; } if ($this->args['encoding']){ // very poor and limited internationalization effort $thisTitle = htmlentities(utf8_decode($thisTitle)); } if (isset($item['content']['encoded']) || isset($item['description'])){ if (isset($item['description'])){ $thisDescription = $item['description']; } else{ $thisDescription = $item['content']['encoded']; } // Handle max_characters and max_char_wordbreak before the htmlentities makes it more complicated: if (!empty($this->args['max_characters']) && is_numeric($this->args['max_characters'])) { $thisDescription = substr($thisDescription, 0, $this->args['max_characters']); // If true, we cut on the last space: if (!empty($this->args['max_char_wordbreak'])) { $max_char_pos = strrpos($thisDescription, ' '); if ($max_char_pos > 0) { $thisDescription = substr($thisDescription, 0, $max_char_pos); } } } else if ($encoding) { //further really weak attempt at internationalization $thisDescription = htmlentities(utf8_decode($thisDescription)); } $linkTitle = $thisDescription; $linkTitle = strip_tags($linkTitle); $linkTitle = str_replace(array("\n", "\t", '"'), array('', '', "'"), $linkTitle); $linkTitle = substr($linkTitle, 0, 300); // if we are only showing the description we don't need the separator.. if (strlen(trim($thisDescription)) && !$this->args['show_description_only']) { $thisDescription = $this->args['description_separator'].$thisDescription; } } // Only build the hyperlink if a link is provided..and we are not told to suppress the link: if (!$this->args['suppress_link'] && strlen(trim($item['link'])) && strlen(trim($thisTitle)) && !$this->args['show_description_only']){ $thisLink = ''.$thisTitle.''; } elseif (strlen(trim($item['link'])) && $this->args['show_description']) { // If we don't have a title but we do have a description we want to show.. link the description $thisLink = ''.$thisDescription.''; $thisDescription = ''; } else { $thisLink = '' . $thisTitle . ''; } if($this->args['show_date_per_item']){ $thisItemDate = '
    ' . $item['feeddate'] . '
    '; } // Determine if any extra data should be shown: $extraData = ''; if (strlen($this->args['additional_fields'])){ // Magpie converts all key names to lowercase so we do too: $this->args['additional_fields'] = strtolower($this->args['additional_fields']); // Get each additional field: $addFields = explode('~', $this->args['additional_fields']); foreach ($addFields as $addField) { // Determine if the field was a nested field: $fieldDef = explode('.', $addField); $thisNode = $item; foreach($fieldDef as $fieldName) { // Check to see if the fieldName has a COLON in it, if so then we are referencing an array: $thisField = explode(':', $fieldName); $fieldName = $thisField[0]; $thisNode = $thisNode[$fieldName]; if (count($thisField) == 2) { $fieldName = $thisField[1]; $thisNode = $thisNode[$fieldName]; } } if (is_string($thisNode) && isset($thisNode)) { $extraData .= '
    ' . $thisNode . '
    '; } } } if($this->args['show_description_only']){ $this->output .= $this->args['before'].$thisLink.$thisItemDate.$extraData; } else if ($this->args['show_description']){ $this->output .= $this->args['before'].$thisLink.$thisItemDate.$thisDescription.$extraData; }else{ $this->output .= $this->args['before'].$thisLink.$thisItemDate.$extraData; } if (is_numeric($this->args['max_characters']) && $this->args['max_characters'] > 0) { $this->output .= ''; } $this->output .= $this->args['after']; } return $this->output; } function ArrayPush(&$arr) { $args = func_get_args(); foreach ($args as $arg) { if (is_array($arg)) { foreach ($arg as $key => $value) { $arr[$key] = $value; $ret++; } }else{ $arr[$arg] = ""; } } return $ret; } /* utility functions */ function NormalizeDates(){ $newItems = array(); foreach($this->items as $item){ $this->ArrayPush($item,array("feeddate"=>$this->NormalizeDate($item))); array_push($newItems,$item); } return $newItems; } function NormalizeDate($item){ $d=""; if(array_key_exists('pubdate',$item)) { $d = date($this->dateFormat,strtotime($item['pubdate'])); } else if (array_key_exists('published',$item)) { $d = date($this->dateFormat,strtotime($item['published'])); } else if (array_key_exists('dc',$item) && array_key_exists('date',$item['dc'])) { $d = date($this->dateFormat,strtotime($item['dc']['date'])); } else if (array_key_exists('last_modified',$item)) { $d = $this->TimezoneConvert($item['last_modified'],0,Date('I')); } else { $d = date($this->dateFormat); } return $d; } function TimezoneConvert($datetime,$tz_from,$tz_to,$format='d M Y h:ia T'){ return date($format,strtotime($datetime)+(3600*($tz_to - $tz_from))); } function MakeNumericOnly($val){ return ereg_replace( '[^0-9]+', '', $val); } function GetMonthNum($month){ $months = array('jan'=>'01','feb'=>'02','mar'=>'03','apr'=>'04','may'=>'05','jun'=>'06','jul'=>'07','aug'=>'08','sep'=>'09','oct'=>'10','nov'=>'11','dec'=>'12'); $month = strtolower($month); return $months[$month]; } function SortItems(){ $sort = strtolower($this->args['sort']); $sort = explode(" ",$sort); if((count($sort) ==1 || $sort[0] == 'asc') && $sort[0] != 'none'){ $sort[1] = SORT_ASC; } elseif ($sort[1] == 'desc') { $sort[1] = SORT_DESC; } else { $sort[1] = ''; } if($sort[0] == 'feeddate'){ $sort[2] = SORT_NUMERIC; } else { $sort[2] = SORT_STRING; } if (($sort[1]!='') && count($this->items)) { // Order by sortCol: foreach($this->items as $item) { $sortBy[] = $item[$sort[0]]; } // Make titles lowercase (otherwise capitals will come before lowercase): $sortByLower = array_map('strtolower', $sortBy); array_multisort($sortByLower, $sort[1], $sort[2], $this->items); } return $this->items; } function LoadFile($file){ /* load the $feedListFile contents into an array, using the --NEXT-- text as a delimeter between feeds and a tilde (~) between URL and TITLE */ $x = file($file); return preg_split("/--NEXT--/", join('', file($file))); } function GetArgumentArray(){ $this->args = $this->AssignDefaults(); $a = array(); foreach($this->args as $d=>$v){ if($this->args[$d] === 'true') { $a[$d] = 1; }else if($this->args[$d] === 'false'){ $a[$d] = 0; }else{ $a[$d] = $v; } $a[$d] = html_entity_decode($a[$d]); } return $a; } function AssignDefaults(){ $defaults = $this->GetDefaults(); $a = array(); $i=0; foreach ($defaults as $d => $v) { $a[$d] = isset($this->args[$d]) ? $this->args[$d] : $v; $a[$d] = isset($this->args[$i]) ? $this->args[$i] : $a[$d]; $i++; } return $a; } function GetFeed($feedUrl){ $this->feed = false; if(function_exists('fetch_rss')){ $this->feed = fetch_rss($feedUrl); } return $this->feed; } function InitializeReader($ignore_cache){ $settings = $this->GetSettings(); if ($ignore_cache) { if (is_numeric($ignore_cache)) { define('MAGPIE_CACHE_AGE', $ignore_cache); } else { define('MAGPIE_CACHE_ON', false); } } else { define('MAGPIE_CACHE_AGE', $settings["cacheTimeout"]); } define('MAGPIE_DEBUG', false); define('MAGPIE_FETCH_TIME_OUT', $settings["connectionTimeout"]); } function Debug($val,$name=''){ if(strlen($name)){ print('

    '.$name.'

    '); } print('
    ');
    				print_r($val);
    				print('
    '); } /* end utility functions */ } function rssLinkListFilter($text) { return preg_replace_callback("//", "feedListFilter", $text); } /* Templates can call any of these functions */ function rssLinkList($args){ if(!is_array($args)){ $args = func_get_args(); } return feedList($args); } function feedList($args){ if(!is_array($args)){ $args = func_get_args(); } $feed = new FeedList($args); return $feed->FeedListFeed(); } function randomFeedList($args){ if(!is_array($args)){ $this->args = parse_str($args,$a); $this->args = $a; } $feed = new FeedList($args); return $feed->FeedListFile(); } function feedListFilter($args){ $args = explode(",",$args[1]); if(count($args) == 1 && !strpos($args[0],":=")){ $a = array(); $a["rss_feed_url"] = $args[0]; $args = $a; } else { $a = array(); foreach($args as $arg){ $arg = explode(":=",$arg); $a[$arg[0]] = $arg[1]; } $args = $a; } $feed = new FeedList($args); return $feed->FeedListFilter(); } /* end template functions */ if (function_exists('add_filter')) { add_filter('the_content', 'rssLinkListFilter'); } if(function_exists('FeedListInitError')){ add_action('admin_head','FeedListInitError'); } if(function_exists('add_action')) { function rssLinkList_JS(){ $jsstring = ' '; echo $jsstring; } $jsFeed = new FeedList(''); $settings = $jsFeed->GetSettings(); if($settings["showRSSLinkListJS"]){ add_action('wp_head', 'rssLinkList_JS'); } } ?> Show and Tell-- Heart To Hand: Quilt Talk with Wendy

    Blue Ribbon Days

    September 3rd, 2009

    Blue RibbonBlue Ribbon Days are here! The Oregon State Fair opened in Salem last week and runs through September 7th.  There were some beautiful quilts shown at the Quilt Gallery and I thought I would share some pictures Dean took.  Thanks so much to Jan and Dean for heading to the fair and reporting back! Keep in mind that the quilts at the fair are sometime hung up high so it makes it difficult to take photos.

    Landscape Quilt 

              

        

    Happy Day!

    Wendy

    A Quilt for Lars

    August 9th, 2009

    A Quilt For Lars

    This is Lars; he is 18 and just graduated from High School and is heading to Pacific University here in Oregon in the Fall.  I remember when Lars was a tiny baby.  He would sit in his car seat on the table between his mom and me while we ate bowls of Hungarian Mushroom Soup and Salad bar at Old Wives tales restaurant.  Lars and his brother Noah came to the shop during this winter, because his Mom wanted to give him a quilt for his graduation.  Lars is a real scholar and musician and chose books as his theme and Thimbleberries fabric for his colors. We looked at several patterns and he pointed out the aspects of the patterns he liked.  I look all this information in and designed him a quilt.    Beth worked on his quilt here at the shop and then did custom long arm quilting. Here it is all finished.  Congratulations Lars!Another Lar's Quilt Photo

     

    Table Runner of the Month Club

    May 21st, 2009

    Table Runners

    The Jeri Kelly Table runner of the month club is now beginning. Every Month we will offer a fabric kit for the table runner collection based on Jeri’s Book: “Every Month”. You can pick and choose the table runners you want to make or you can sign up for the year long program and save. You MUST own the book to participate. The book costs a one time fee of $24.00 and includes 12 patterns plus a place mat pattern that coordinates with the sets. The fabric kit includes everything you need for backing, binding and quilt top. For each table runner, you will need to supply 1 yard of Steam A Seam II - LIGHT and 17″ x 44″ Low Loft Batting (available here on the web site).Year Long Program: Sign-up for a year, start anytime, you will receive 1 book (when you order it) and 12 fabric kits over the next 12 months. You will be charged $12.99 each month plus shipping. Your first kit for the current month will be sent right away and all subsequent kits will be sent by the second week of each month. Because these kits are seasonal,we will send you the June kit in May so you have time to sew and complete the kit for the next month.

     If you have any questions, do not hesitate to let me know!

    Happy Day!

    Wendy

    Saturday Breakfast Club

    May 7th, 2009

    Table TopperDo you need a reason to get up in the morning or add bounce to your day? We think the Heart to Hand Breakfast Club will provide a great start to your day. Breakfast Club offers a breakfast treat, and coffee or tea, along with a Quilter’s recipe (pattern). The Breakfast Club patterns are designed for your dining (quilting) pleasure. Just bring in your sewing machine and tools along with a “Fabric Cinnamon Roll”. The size of the Fabric Cinnamon Rolls will depend on whether you are making a table runner or a king size quilt.

    The staff at Heart to Hand is available during normal shop hours if you need assistance selecting fabrics for your Fabric Cinnamon Roll.

    Meets: May 9th
    Time: 11:00 to 4:30
    Cost: $35

    Buddy Special! Which is 20% off your class fee when you bring a buddy to take the class too. Register online or call the shop: 503-230-9075.  You MUST register by Friday at 2:00pm so we can have your treats waiting for you! 

     

     

    This picture is of the Eggs Benedict 30″ x 35″ table topper.  The great thing about this project is you use 2 1/2″ strips and can make 4 place mats, a table topper, A wall quilt, a lap quilt, a full/queen or a king all from the same pattern that we give you. So pick your project and come join us this Saturday.

    Sharyle has an out of town engagement, and so Beth and I will be team teaching this class.  Sharyle will return in June to teach Grannies Granola.  June 13th.

    Happy Day!

    Wendy

    Fabric Blowout Special

    May 4th, 2009

    Heart To Hand Needle Case

    May is our Anniversary month Beth, Dean and I have some special sales scheduled for you all month.  This week it is Buy two yards of fabric and get one free.  See the details below.

    We also have special projects scheduled for this month.  The first one is this adorable Heart To Hand Needle Case.  From White Sewing comes this cute project. Take a traditional log cabin square and transform it into this charming and handy needle case. It’s fun…and it’s easy to make! Our kit includes fabric to make the case, felt, and muslin. You supply the leftover batting or flannel, and buttons. We will include a free copy of the pattern and templates. We are offering a variety of color options. Inside Needle Case

    It’s Fabric Sale Time!!!

    We have a lot of fabrics that we need to clear out so we can purchase new ones. This week we are offering a buy two yards of fabric and get one free sale.  Limited to stock on hand. Put a total of three yards of fabric in your cart, and the server will charge you for the three but Susan will make the correction when she processes your order.  You will need to pay regular shipping on all fabric.

    You can find all our fabrics here.

    Happy Day!

    Wendy

    McKenna Ryan Block of the Month

    April 24th, 2009

    McKenna Ryan Block of the MonthHere is the fourth block in the McKenna Ryan Block of the Month program: Wish Upon A Star.  The embellishments and quilting are not done yet but I thought you would enjoy seeing this block.  The Polar Bears are throwing snowballs!

    We started Wish Upon A Star back in January. Anyone can join at any time.  We meet on the third Saturday of each month, or you can order the supplies online and work at home.  We have fabric kits, patterns and embellishments for this great Winter Holiday Quilt. 

    So come join us!  For information on the block program and to order it online visit our website.  To register for the class at our Oregon City Store you can get more information here.

    Happy Day!

    Wendy

    Follow-up to National Quilting Day!

    April 20th, 2009

    National Quilting Day QuiltMarch 21st was National Quilting Day.  Shown here is a quilt top sewn by Barbara Timby she also donated the fabric, Beth Durand donated her long-arm quilting skills and Heart to Hand donated the batting and backing.  This will be given to our local Habitat for Humanity.  Thanks to Barbara and Beth for a great charity quilt! We will let you know more details about this donation later this month.

    You can still get this free pattern at the link above.

    In other activities, Jan just put up a beautiful wall of purses and purse patterns at the shop.  Norma and I are teaching classes on totes and encourage you to sign up. 

    Norma is teaching Six-Pack Stack Reversible Tote that uses six different Fat quarters.  I will be teaching the Birdie Sling class.  I hope you will consider coming and joining us.

    Dick and Jane Tote

    Beth just finished this cute tote, using a panel from Michael Miller’s Dick and Jane Fabrics.  Very simple and so very cute! Anyone can make it and NO pattern needed!

    Happy Day!

    Wendy

     

    Happy Easter

    April 12th, 2009

    All of us  at Heart To Hand would like to wish you and yours a wonderful Easter Day! We thank you for your faithfulness as our customers during these difficult economy days in our country.  Without you we would not be here, and we do realize that!  We know when you order, visit or call you are making a choice to buy your fabrics and supplies from us. Please let us know what we can do to serve you, our loyal customers!

     

     

    Click to play this Smilebox slideshow:

     

    Create your own slideshow - Powered by Smilebox

     

    Hoppy Day!
    Wendy and The Heart To Hand Team

    “The resurrection gives my life meaning and direction and the opportunity to start over no matter what my circumstances. ”
    ~ Robert Flatt 

    Leftovers: For Cooking and Sewing

    April 10th, 2009

    Birdie Sling

    I struggle with leftovers.  They are good for a day or so and then I get bored with them.  So I wrap them up in the freezer to save for another day and usually end up throwing out the leftovers six months later.  But having cleaned the fridge and freezer a week or so ago I decided that there was a 2 pound leftover pork tenderloin roast in the freezer that I did not want to go bad.  I have been thinking of pulled pork sandwiches.  Not that I have ever had one, but still I was thinking of them.

    So after cleaning the kitchen, I pulled the pork out and mixed up a sauce of French onion soup, catsup, mustard, brown sugar, and vinegar.  Mixing it well in the crock-pot, I tossed in my leftover tenderloin.  The house smells wonderful! It has been cooking for about six hours on low and I will cook it another two.  Then shred the pork and roll it into my new favorite bread option.  Flat-out whole grain flat bread.  YUMMY. 

     So dinner was taken care of and I was off to my next project.  Making this cute purse pattern designed by Amy Butler called a “Birdie Sling“. I made this bag in great Spring and Summer fabric colors using fabric leftovers.  I think it is a cute bag, and realize that this been a day of leftovers in cooking and sewing, and everything can look new again from a different prospective.

    Happy Day!
    Wendy

    RJR Fabrics: Farmers Market

    April 8th, 2009

    Farmers Market Twice the Charm PackJust in time for Spring, from RJR Fabrics comes the newest Farmers Market 2008 collection.  This is a Twice the Charm Pack which includes 18 wonderful fruit and vegetable pieces in 5-1/2″ X 22″ strips with pinked edges.

    Last time we had this type of collection I designed a fun and easy Picnic Time Quilt.  Slice up all your strips and sew together this fun project.

    The fabrics in this collection are truly wonderful, bright and beautiful.  Make a strip quilt, a wall hanging or how about a market tote using the Charm Party Tote Pattern.

    We also received another Twice the Charm pack from RJR called Beachfront Cottages designed by Demetria Hayward. This fabric displays a variety of shells, stripes, florals and beautiful background fabrics.Picnic Time Quilt

     

    Enjoy These Collections

    Happy Day!

    Wendy

    « Previous Entries