Jump to content

Leaderboard

Popular Content

Showing content with the highest reputation on 06/15/2013 in all areas

  1. To create a sitemap.xml you can use Pete's Sitemap XML module, or you can create a template file and page to do it for you. This post explains how to create a template to do it for you. The benefit here is that you may find it simpler to tweak a template file than a module, though either is a good solution. Here is how to do it with a template file and a page: sitemap-xml.php <?php namespace ProcessWire; /** * ProcessWire Template to power a sitemap.xml * * 1. Copy this file to /site/templates/sitemap-xml.php * 2. Add the new template from the admin. * Under the "URLs" section, set it to NOT use trailing slashes. * 3. Create a new page at the root level, use your sitemap-xml template * and name the page "sitemap.xml". * * Note: hidden pages (and their children) are excluded from the sitemap. * If you have hidden pages that you want to be included, you can do so * by specifying the ID or path to them in an array sent to the * renderSiteMapXML() method at the bottom of this file. For instance: * * echo renderSiteMapXML(array('/hidden/page/', '/another/hidden/page/')); * */ function renderSitemapPage(Page $page) { return "\n<url>" . "\n\t<loc>" . $page->httpUrl . "</loc>" . "\n\t<lastmod>" . date("Y-m-d", $page->modified) . "</lastmod>" . "\n</url>"; } function renderSitemapChildren(Page $page) { $out = ''; $newParents = new PageArray(); $children = $page->children; foreach($children as $child) { $out .= renderSitemapPage($child); if($child->numChildren) $newParents->add($child); else wire('pages')->uncache($child); } foreach($newParents as $newParent) { $out .= renderSitemapChildren($newParent); wire('pages')->uncache($newParent); } return $out; } function renderSitemapXML(array $paths = array()) { $out = '<?xml version="1.0" encoding="UTF-8"?>' . "\n" . '<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">'; array_unshift($paths, '/'); // prepend homepage foreach($paths as $path) { $page = wire('pages')->get($path); if(!$page->id) continue; $out .= renderSitemapPage($page); if($page->numChildren) $out .= renderSitemapChildren($page); } $out .= "\n</urlset>"; return $out; } header("Content-Type: text/xml"); echo renderSitemapXML(); // If you want to include other hidden pages: // echo renderSitemapXML(array('/path/to/hidden/page/'));
    11 points
  2. Module is no longer maintained. Github Repo deleted! Hello community, based on the freely available flash mp3 player (http://flash-mp3-player.net) I set a module, which creates a field to store mp3-audio files in the backend and an audio player in the frontend. mp3 files can be added by drag and drop. The audio player is configurable in module settings. (Size, colors, display of buttons, volume control, etc.) About third party Code More information http://flash-mp3-player.net/players/ Code https://github.com/neolao/mp3-player License http://creativecommons.org/licenses/by-sa/3.0/deed.en Author The Initial Developer of the Original Code is neolao (neolao@gmail.com). How to install download the 2 Files: http://flash-mp3-player.net/players/maxi/download/ http://flash-mp3-player.net/medias/player_mp3_maxi.swf http://flash-mp3-player.net/players/multi/download/ http://flash-mp3-player.net/medias/player_mp3_multi.swf Download from github the module, unzip, copy module and the 2 swf Files in a folder /Audio_MP3/ and add the folder to your /site/modules/ directory. Click *check for new modules* in ProcessWire Admin Modules screen. Click *install* for the module labeled: "Audio_MP3". Now you will be on the module config screen. Please make note of the config options and set as you want. How to use Add the Audio field to your Template in Setup > Templates. Add the following code to the template file to get the title list: $modules->Audio_MP3->player['title']; to get the player: $modules->Audio_MP3->player['code']; Create a page using the Template. Drag and drop mp3 or mp3.zip files in the audio field in the Page-Edit-Area. How it works If you store just one File in the Page-Edit-Area the Maxi-Player will be loaded. For 2 or more files the Module will switch to Multi-Player. If you want an alternative title, you can put it in the Description-field of the Audio Field, which is visible after the file upload. Module Configuration - width: Forces the video width. - height: Forces the video height. //only Maxi-Player only one file stored - volume: The initial volume, between 0 and 200. By default set to 50 - showstop: 1 to show the STOP button. - showinfo: 1 to show the INFO button. - showvolume: 1 to show the VOLUME button. - showloading: 'alway','never','autohide') to show the LOADING bar// By default set to 'alway' - showinfo: 1 to show the INFO button. - buttonwidth: The buttons width. By default set to 30. - volumewidth: The width of the VOLUME button. By default set to 30. - volumeheight: The height of the VOLUME button. By default set to 10 - loadingcolor: The color of loading bar in hex format without #//default: ffff75 - sliderovercolor: Hover color of the bar in hex format without # - buttonovercolor: Hover color of buttons in hex format without # feel free to add more configuration options to the module. More information here: http://flash-mp3-player.net/players/multi/documentation/ http://flash-mp3-player.net/players/maxi/documentation/ Need some help! I would like to make the code available via $page->player['code']; but I don't know how. README.txt Audio_MP3.module
    2 points
  3. Nico, just updated the theme, cosmetic changes as requested by "woop". Pull request at github. * give the hidden pages an italic style and a lighter shade * lighten the shade of the children page count * Added active state style for the submenu buttons
    2 points
  4. something like that ~150kb I used a standard font, made it smaller and in 2 columns, fix borders in some tables, it was a little overlined(dunno how it to say, lol). hope someone like it upd: docx
    2 points
  5. MarkupCache is a simple module that enables you to cache any individual parts in a template. I'm working on a site now that has 500+ cities in a select pulldown generated from ProcessWire pages. Loading 500+ pages and creating the select options on every pageview isn't terribly efficient, but I didn't want to cache the whole template because it needed to support dynamic parameters in the URL. The solution was to cache just the code that generated the select options. Here's an example: $cache = $modules->get("MarkupCache"); if(!$data = $cache->get("something")) { // ... generate your markup in $data ... $cache->save($data); } echo $data; I left the markup generation code (the part that gets cached) out of the example above to keep it simple. Below is the same example as above, but filled out with code that finds the pages and generates the markup (the part that gets cached): $cache = $modules->get("MarkupCache"); if(!$data = $cache->get("city_options")) { foreach($pages->find("template=city, sort=name") as $city) { $data .= "<option value='{$city->id}'>{$city->title}</option>"; } $cache->save($data); } echo $data; That was an example of a place where this module might be useful, but of course this module can used to cache any snippets of code. By default, it caches the markup for an hour. If you wanted to cache it for a longer or shorter amount of time, you would just specify the number of seconds as a second parameter in the get() call. For example, this would keep a 60-second cache of the data: $cache->get("city_options", 60) I hope to have it posted to GitHub soon and it will be included in the ProcessWire distribution. If anyone wants it now, just let me know and I'll post it here or email it to you.
    1 point
  6. Hi all, I've just pushed a new fully responsive site profile to Github: Unsemantic Site Profile for Processwire 2.3 After having tried seven zillion responsive grid systems, boilerplates, frameworks etc. I finally opted for Unsemantic Grid System. Mainly because it supports IE7, is lightweight and includes Compass/SASS. I've designed the profile as a starting point for development according to my needs. This includes almost no styling, an easy-to-use solution for placeholder images and three teaser boxes on the front page. In addition, I converted the .sass files that come with Unsemantic to .scss because I like the syntax better. Glad if you give it a try and find it an improvement for your workflow. You can see a preview here. Download from Github: https://github.com/christophlieck/UnsemanticSiteProfile
    1 point
  7. Hi all, I just found this site offering web design amongst other thingz. Comments please!!! You will see why I do not want to create a link to the site. www [dot] sandau [dot] biz
    1 point
  8. Hi Vineet - also you should be aware that foxycart is free to development, so you can just setup an account now and try it out and see if it will work. You don't pay until you want it to actually be able to run real transactions; The main problem i see with your setup is how do you remove sold seats; assuming you'll have to read the json response and then run a script to remove those seats from inventory; Some of the more advanced ticketing systems put a seat hold on seats as soon as they are added to the cart (in case 2 users try to add the same seats at the same time)..something like that might be necessary if you're selling actual seats; if you're doing GA, then this would be so much easier...
    1 point
  9. The line number for MarkupSitemapXML is cut-off in the error message you pasted, but that line number would reveal the call that is triggering it. Another alternative is to use a template file. I posted an example here: http://processwire.com/talk/topic/3846-how-do-i-create-a-sitemapxml/
    1 point
  10. I'm wondering if YSlow/Chrome might be incorrect in this case. WillyC's htaccess looks right to me. You might need to clear your Chrome cache and restart it.
    1 point
  11. Of course, thanks! - and you can call me Nico
    1 point
  12. Corrected the breadcrumb issue (width going outside of the div) and the white space beneath the nav bar. Changes are uploaded to the github. Knoll can you accept the pull request
    1 point
  13. ProCache doesn't yet support multi-domain/multi-site, but this is definitely on the roadmap.
    1 point
  14. If you leave outer tpl empty you should still specify the "||" .. 'outer_tpl' => '||'
    1 point
  15. okay, got it "URL Segments" was enabled for that template kongondo, thanks for posting the solution *almost finished my first Processwire site*
    1 point
  16. This is defined here: /wire/config.php $config->http404PageID = 27; But this is PW. We do not hack the core. So what do we do? Uh, this is PW, we can override this . So, we put our own 404 page id configuration in our /site/config.php $config->http404PageID = 1035;// my custom 404 page A word of caution though in /wire/config.php * Hard-coded configuration options for ProcessWire * These may be overridden in the /site/config.php, but it is not recommended. More info here: http://processwire.com/api/variables/config/
    1 point
  17. got it: public function init() { $this->addHookProperty('Page::player', $this, 'render'); } protected function render($event) { $page = $event->object; $embedCode = "... code ..." $titles = " ... code ..." $event->return = array('code'=>$embedCode, 'title'=>$titles); }
    1 point
  18. Hi Vineet - i recently did a site with FC so i might be able to provide some insights; since you can pass variables to the cart, all you would need to do is to pass the seat # as a variable to the cart and then users could check out; You can make custom receipt pages and that page would similarly be able to show the seat #s. You wouldn't need to make real tickets, the receipt could be the ticket. But if you needed to generate real PDF tickets say with QR codes or something like that, you would have to learn the foxycart API and then get the sales data back to PW to process the PDF generator, as well as remove sold inventory from stock. this might be a good thing to look at: http://wiki.foxycart.com/integration/modx/inventory
    1 point
  19. Hi, Valan. Try to sanitize your selector value: $sanitizer->selectorValue($value). If you're using Russian language in your titles I guess you can easily exceed the requirement for the selector string of being less then 100 symbols. Are you sure you have to look for the existing category by its title and not be the page name?
    1 point
  20. Here we go: https://github.com/apeisa/CommentRatings
    1 point
  21. wow that's great. I'll try to help out when i get more time. I was trying to turn this one into a plugin: http://tympanus.net/codrops/2012/12/04/responsive-touch-friendly-audio-player/ it's really nice and html5, but the problem is that html5 audio isn't quite there yet... so then i ended up using soundmanager2 which is super reliable (and in mass use now on sites like soundcloud) – it's cross platform and does hybrid html5 and flash; Since i'm doing mostly responsive design, doesn't make so much sense for me to do flash only; but i'll look at this module and see if it can be modded for a different player; one reason why i didn't bother making a module is because it's easy to setup the template to output the desired markup for any given player, but then you also have to remember to include all the scripts and stylesheets and when applicable the flash objects etc,, so i can see a module being a good thing to house everything, and make it easier to re-use in different sites. it would be good to eventually have audio modules for Soundmanager2, jPlayer, and maybe mediaelement.js; the latter 2 support video;
    1 point
  22. Thanks for the kind words ezeey! Nothing works with multisite I hope to find some time this weekend to take a look. If you can provide any more information it would definitely help (how to reproduce, test site I can login etc).
    1 point
  23. Starting in on a new site tonight and realized I never posted the last site we finished in March. www.la2050.org This was a information frontend site for a campaign to get people submitting proposals for a community funding project. Client was able to edit a ton of the site and never had any issues dealing with the backend. I learned a ton about markup/template organization from the threads here which were unbelievably helpful. Thanks everyone! Thanks Ryan!!!
    1 point
  24. I find it amusing that twitter requires auth, when pulling public tweets... Boring. </rant>
    1 point
  25. I stumbled upon this thread when I went looking EXACTLY for this, ha. Using the above jQuery solution shared by Soma. I was able to get jQuery highlights on my client site search page. It was/is incredibly simple! AND FOR ME to claim something is simple (I know no javascript) ... it's the simplest solution, believe me! Save the jquery plugin to your 'js' folder and call it after your jQuery.js: <script src="<?php echo $config->urls->templates; ?>js/jquery.highlight.js"></script> Then stick this in the bottom of your search.php page: <script> $("body").highlight("<?php echo $q; ?>"); $(".highlight").css({ backgroundColor: "#FFFF88" }); </script> The $q variable if what results from your input search box. EDIT (sun.aug.10.2014): here is the latest jquery link <script type="text/javascript" src="//ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script>
    1 point
  26. I don't think categories is the way to go here. 1. Nested Structure This is a good example where the date structure could be used to create the articles. Then you would a) have the urls already and b) an easy way to create lists and such. Additionally add a date field to the article template so you can choose the date and use that for additional searching. /dagboek/ /2008/ /januari/ // or use "01" as name whatever you like /article14012008/ /article15012008/ /februari/ /article01022008/ /2009/ /januari/ Then loop the years and months in a simple nested php script using API. You don't need to check if there's a year or month with articles if you create months manually. $years = $pages->get("dageboek")->children(); $out = ''; foreach($years as $year) { $out .= "<ul>"; $out .= "<li><a href='$year->url'>$year->title</a>"; if($year->numChildren) { $out .= "<ul>"; foreach($year->children() as $month) { $out .= "<li><a href='$month->url'>$month->title</a></li>"; } $out .= "</ul>"; } $out .= "</li>"; $out .= "</ul>"; } echo $out; Then on the years or months template file, you simply render out their children in any fashion you like and may add pagination using the built in Pager module. You'll have urls like /dagboek/2008/01/page1, dagboek/2008/01/page2 2. Flat The other route would be to use a flat structure and add articles to the /dagboek/ parent. Then add a date field to the article template you can define the day this article is for. Then use a script that checks for articles (oldest, newest) and generate a menu with virtual urls for each year and month that has articles. The URL then can be resolved using urlSegments to show a list of articles for the selected month. You'd have to enable url segments on the dagboek template to make this work. This is a script I created for generating a year month nested menu only for the ones that articles are found. $datefield = "mydate"; $template = "article"; $url = $pages->get("/dagboek/")->url; $newest = (int) date("Y",$pages->find("template=$template, $datefield>0, sort=-$datefield, limit=1")->first->getUnformatted($datefield)); $oldest = (int) date("Y",$pages->find("template=$template, $datefield>0, sort=$datefield, limit=1")->first->getUnformatted($datefield)); $out = ''; for($y = $oldest; $y <= $newest; $y++){ $out .= "<li>"; $out .= "<a href='#'>$y</a>"; $month_out = ''; for($m = 1; $m <= 12; $m++){ $month_start = strtotime("$y-$m-1"); $month_end = strtotime("$y-$m-1 +1 month"); $selector = "template=$template, $datefield>=$month_start, $datefield<$month_end"; if($pages->count($selector)) { // use count instead of find for fast query $month_out .= "<li><a href='{$url}$y/$m/1'>$m</a></li>"; } } if(strlen($month_out)) $out .= "<ul>$month_out</ul>"; $out .= "</li>"; } echo "<ul class='menu'>$out</ul>"; Then, on the dagboek template something like: if($input->urlSegment1 && $input->urlSegment2) { $year = (int) $input->urlSegment1; // 2008 $month = (int) $input->urlSegment2; // 02 $start = strtotime("$year-$month-01"); $end = strtotime("$year-$month-01 +1 month"); // find the articles for within that current month $articles = $pages->get("/dagboek/")->find("template=article, date>=$start, date<$end, sort=-date"); foreach($articles as $article) { echo "<h2>$article->title</h2>"; echo $article->body; } } Just rough examples.
    1 point
  27. $thumburl = $image->width > $image->height ? $image->size(450,0)->url : $image->size(0,320); echo "<img src='$thumburl'/>";
    1 point
  28. @ranzwertig I'm pretty sure the problem is with your strtolower() function. You should use mb_strtolower() instead. Make sure you have --enable-mbstring option activated. Here are the instructions.
    1 point
  29. There are valid use cases for template engines, but generally speaking templating with PHP is at least as simple and fast and at the same time imposes absolutely no limits on your creativity (especially with PW's fantastic API in your toolbox.) You'll love it once you get used to it That said, we also have modules for both Twig and Smarty template engines available, if you really want to use one of those: http://modules.processwire.com/modules/template-twig/ http://modules.processwire.com/modules/smarty-templating/ I haven't personally tried these (and most likely won't, if not purely out of curiosity) so I can't really vouch for either one, but as far as I can tell they both seem to be relatively stable.
    1 point
  30. You can also add the ID to the "list of fields to display in the admin page list" field on the advanced tab on each template. To do it quickly for all templates, put this code on any page and load it: // get all templates foreach ($templates as $t) { // if fields are the default (empty shows only the title) if ($t->pageLabelField == "") { // make new string with title and id $t->pageLabelField = "title id"; } else { // if not, add " id" to the existing string $t->pageLabelField .= " id"; } // save the template $t->save(); }
    1 point
  31. Just to test things out, I did this and it works flawlessly FAWESOME security implementation Ryan! $users->get("organizedfellow")->setOutputFormatting(false)->set('pass', 'qwerty123')->save(); PW2.3
    1 point
  32. Open thread for discussion about Vietnamese Translation/Language pack. Currently, the language pack is hosted on: https://github.com/xgenvn/processwire-vi_vn-translation
    1 point
  33. Hi Marco, Your field 'img_evento' holds multiple images. To output them, you need another loop: if (count($event->img_evento)) { echo '<ol class="thumb-grid group">'; foreach ($event->img_evento as $image) { echo '<li><a href="#"><img src="'.$image->url.'" alt="'.$image->description.'" /></a></li>'; } echo '</ol>'; You can also create thumbnails inside the loop if your images need to be smaller.
    1 point
  34. Hi Pascal, The function renderPosts which renders one or multiple posts, takes an argument $small. When small is set to true, the blog profile hides for example the comments and other things. So I suggest that you edit /site/templates/markup/post.php and give your classes based on the $small. $small is true when rendering multiple post and false when rendering one post (detail-view). // 'post-list' class when $small is true, otherwise 'post-detail' $class = ($small) ? 'post-list' : 'post'; echo "<div class='post {$class}'>";
    1 point
  35. Hello all, I just spent 3 days without internet and I couldn't do much work on my ProcessWire project because I couldn't use the cheatsheet. I realized that there's a need to have PW's documentation in an ebook format including cheatsheet. So I've copy-pasted cheatsheet in a doc file & created a cheatsheet ebook for offline use. I'm posting it here so that others can also use it. Please let me know if doing this is wrong in anyway, I'll delete the files. Also note that there was no intention to make any kind of profit by using cheatsheet to make an ebook out of it. I hope this will help people like me when they're unable to access cheatsheet for any reason. Enjoy. EDIT: Attached file has been updated, as it wasn't readable on Mac and also wasn't very good looking. So I've updated it for better readability but I'm not sure if it still works on Mac, so someone needs to check it for me. Cheatsheet_1.1_v0.2.pdf
    1 point
  36. Hi all, as a developer I only care that there is "atleast one stable version" which supports both legacy and new api that gives developers soft transition period to update their modules. Besides as this is already done with the "oo mysqli" that is available current and upcoming PDO Processwire. Thus we have "no real problem" because all modules can be updated now so they work in the current and upcoming PDO Processwire. And using PDO-only db api in your module as soon as it is available would only break backward compability for your module.
    1 point
  37. Alright guys, Here's the updated pdf which is now just ~699kb. Download Seems I shouldn't have used fancy font in the document.
    1 point
  38. Hey Ryan, The only render call in the template is for the pager. Not using URL segments. No manual pager options. I figured out the problem - I have a form on that page that allows a guest user to submit a new child page (unpublished of course). The form code was setting the page template to that of the child page, which was why $allowPageNum = $this->options['page']->template->allowPageNum; was returning false. Sorry for not figuring this out sooner!
    1 point
  39. Thanks, I just implemented this and it works like a charm.
    1 point
  40. It seems to have something to do with the pipe character '|' in the beginning of the string. Based on a very quick test I'd say pipe isn't interpreted correctly as a first character of the value - except for native fields (id, name and so on). To solve the problem try and make sure there are pipes only in between of the values in the string.
    1 point
  41. That's fun: foreach($templates as $template){ foreach($template->fieldgroup as $field){ if($field->name == "myfield"){ $template->fieldgroup->remove($field); $template->fieldgroup->save(); echo "deleted $field->name"; } } }
    1 point
  42. It is technically possible to do all of this in ProcessWire and more, but since some of your needs are unique it would involve writing some functionality yourself. For some of your needs there is likely code available here on the forums which I'm sure someone will point you too soon (I'm typing on mobile), and for everything else the community is here to help you out. The thing with ProcessWire is that almost anything is possible, but I have to ask have you taken a look at the tutorials and familiarised yourself with some of the docs on the website to get a feel for how the system works? At some point early on you will be creating fields and templates to accomplish a lot of this. Of course if you like you could also add your requirements to the Jobs forum and it is possible someone could develop this for you, but it is always good to get stuck in and get a better understanding of the system first if you have the time.
    1 point
  43. Harmster, Thanks for the module Just wanted to note that Pw has built in function for setting session messages: // Set message for next request $session->message('this message is accessible in the next request'); // or Error... $session->error('error message'); And check for messages could be done like this: if (count(wire('notices'))) { foreach (wire('notices') as $notice) { echo $notice->text; if ($notice instanceof NoticeError) echo "was error notice"; } } Edit: Just saw that you extend Process. This is only needed for Modules that execute a process in the admin of Pw. I think this is not the case for your module, so extending WireData would be enough.
    1 point
  44. Hello Igor, you have lots of questions there. All that is doable with ProcessWire, and answered already to the most simple question: PW is not to heavy for shared hosting, it's even much lighter than most known CMSs. Because you have so many questions, I will answer with links. After reading those, you will be able to to narrow down your questions a bit so you can get some really useful answers: categories: http://processwire.com/talk/topic/3579-tutorial-approaches-to-categorising-site-content/ comments: There is a built in comment system (same as in PW site pages), you just have to activate t in modules: http://processwire.com/api/fieldtypes/comments/ eCommerce http://processwire.com/talk/topic/1732-shop-for-processwire-apeisa/ (lots of suggestions besides Apeisa's module) http://processwire.com/talk/topic/3756-shopify-integration/ (most recent discussion) Contact form: http://modules.processwire.com/modules/form-template-processor/ http://processwire.com/talk/topic/59-module-want-form-builder/#entry343 or http://store.di.net/products/processwire-form-builder group/permission http://processwire.com/api/user-access/roles/ multilanguage URLs http://processwire.com/talk/topic/2979-multi-language-page-names-urls/
    1 point
  45. Other uploaders/topics that may be of interest http://www.plupload.com/ (by TinyMCE guys) - this is a beast! http://www.fyneworks.com/jquery/multiple-file-upload/# http://www.phpletter.com/Demo/AjaxFileUpload-Demo/ http://pixelcone.com/jquery/ajax-file-upload-script/ http://www.jscripts.info/mfupload.php http://www.jquery4u.com/plugins/10-jquery-ajax-file-uploader-plugins/ http://www.9lessons.info/2012/09/multiple-file-drag-and-drop-upload.html http://www.nacodes.com/2013/04/14/DROPAREA-jQuery-Html5-drag-drop-file-uploader-plugin
    1 point
  46. I thought that the MODX move was interesting too (as were the EE changes a few months earlier). I don't think it affects anything about ProcessWire, other than that it seems to drive more users here. We won't be following the path of MODX, in case anyone was worried. We get paid by the sites and apps that we develop with ProcessWire, and by the commercial support of modules like FormBuilder and ProCache. I don't have any inside knowledge on the changes at MODX, and may not understand the full scope of them, but here's my outsider opinion about it… I can understand why it is shocking to folks that use MODX, because it kind of destroys the perception of MODX as being a big and stable player. In my mind, they were a big and successful company, and I think that was a lot of other people's perception too. Why would they ever have to rely on a little hosting company with a toilet name and an HTML5 logo? MODX is way above this, or so I thought. The changes instead reveal reality that's probably always been there… MODX is a labor of love rather than profit, as most open source projects are (including us). But MODX has grown big enough in user base that keeping the whole ship afloat means having a team people that dedicate lots of time to it. These people have to be paid in order to take care of their own families, etc. So it looks to me like they are just making the tough decisions necessary to keep the team together and stable. It's not pretty (especially the Siphon part), but digging up the floor to fix the plumbing never is. WordPress has proven that hosting is a safe and viable business model to sustain a big open source project. Supporting other CMSs on the Siphon platform is probably just about risk reduction (put the eggs in a few different baskets… err, siphons… rather than all in one) and it would probably make a lot more than it would cost. None of us should view CMSs as religions. I'm glad that I can run Windows apps on my Mac now, when I need to; that doesn't make me prefer Windows. I'm not sure that having web hosting that can only run MODX would be worthwhile. The value proposition with WordPress hosting (which can only run WordPress) is entirely different. Most people using MODX (and ProcessWire) are professionals that have multiple tools. Most people using WordPress are consumers that know how to write, but don't know anything about web development. Given the different audience, I don't think MODX could duplicate WordPress's hosting success by only hosting one product. But I do think they can be successful by catering to the needs of the audience, which is rarely glued to a single product. If diversifying the eggs among multiple baskets helps to drive development for MODX, then that can only be a good thing. Hopefully that's their intention. If their reality really is as it sounded, then the changes were probably good, even if shocking. I think the fear that people might have is that this is somehow driven by investors trying to monetize the software for themselves. But that just doesn't seem to add up in this case. Instead it presents a lack of sustainability in their existing system that had to be fixed (which is itself shocking). I'm just surprised that: 1) They aren't as big and successful as I thought; 2) They don't have a stronger source of income; 3) Any of this was necessary; and: 4) They told us. I don't think that folks should abandon MODX because of the changes. Their team has put themselves in a vulnerable spot and we should support them. While I don't totally understand their changes, it seems like they are doing this to find sustainability more than anything else. While I support and wish the best for MODX in their changes, I also want to be clear that we will not be following that path. We're already on a beautifully sustainable path here, thanks to all of you.
    1 point
  47. If you use jquery theres some easy way and do it client side. If you add ?q=searchword to the search result links it's easy possible. Some helpful links To get a url parameter http://stackoverflow.com/questions/1403888/get-url-parameter-with-jquery An lightweight plugin to highlight the word on page http://bartaz.github.com/sandbox.js/jquery.highlight.html
    1 point
×
×
  • Create New...