Jump to content
adrian

Tracy Debugger

Recommended Posts

9 hours ago, tpr said:

I'm not sure this would be better but wanted to share. The biggest advantage would be that it would pop out more from the rest of the page. Orange and red icons would require some brightening to be more visible though.

I do not think making the devbar pop-out is a good idea, at least I keep it always on even when I'm dealing with design so it is good to have it sit there while not distracting the general look of the page. Therefore the not inverted version is good for bright page designs, while the inverted one would be OK for dark page designs. Maybe automatic switching and/or option to set which one to use?

Regarding the color of the inverted one, a good compromise could be using goldish yellow and magenta like colors (and with not so blue color but slightly bluish gray background instead):
tracysvgicons-invert.png.da59b716777373a8b18baa460dc07367.png

also, if the other icons are not white then colored ones pop-out more:
tracysvgicons-invert-2.png.47de118c9b75238679edc70aa8dfc2be.png

Edited by szabesz
EDIT: added not white icons demo

Share this post


Link to post
Share on other sites

Making it optional means more work and maintenance. However if svgs are well prepared colorization can be easily added with something like

.tracy-invert-bar svg * { fill: white; }

As for inverted colors I often use the editor theme called Son of Obsidian as a reference. For example my file manager (Double Commander) colors are set up using that and it's beautiful 🙂

https://www.google.hu/search?q=son+of+obsidian&prmd=ivn

  • Like 1

Share this post


Link to post
Share on other sites
13 hours ago, tpr said:

I think non-grey default icons would look nicer, eg. a darker blue like #354B60 (borrowed from the Uikit admin theme).

tracysvgicons.png.4bd4c5241745b78c8c8a8f3b19bd811c.png

It's just a quick devtools preview but for me the current grey is too pale, and rather suggests that those icons are in an "off" state.

Hi @tpr I think this looks great! Not so sure about the inverted scheme - but it may work well with a darker admin theme.

  • Like 1

Share this post


Link to post
Share on other sites

I've just issued a PR to the main repo for a reworked diagnostics panel for Tracy.

This...

  • Adds a "Dedicated" server switch via cookies.
  • Adds colour coded cells.
  • Displays file permission flags.
  • Adds checks for existence, ownership, readability by process user, writability by process user, world-accessibility, execute/traversal.
  • Detects installation of the PW Upgrade module.
  • Detects use of non-file session handling.
  • Adds basic checks of the debug, chmodFile and chmodDir config settings.
  • Unifies the colour scheme with the new Tracy constants.
  • Supplies formatted suggestions for chown, chgrp and chmod commands (on non-Windows servers.) 
  • Adjusts severity of issues reported based on Local vs Production server and/or Dedicated vs Shared server.
  • Adds links to documentation for some assets.

If you want to try it out and let me know any problems you find, please consider using my temporary Fork of Tracy on github until Adrian has had a chance to consider merging the PR.

screeny-0053.thumb.png.2dba0515a5a4e286930ffa5e18c7fce2.png

screeny-0054.thumb.png.e84496d1b65bed9552c166528202b17b.png

screeny-0055.thumb.png.416553738cf1c91d3e4aef974a4398da.png

screeny-0056.png.084e1dd0c6c4792b1bcaf7af99615633.png

  • Like 5

Share this post


Link to post
Share on other sites

@adrian Hi, If using Toggle All to turn on all panels, then when not enough memory is available we only get this in the source code of the page:

Fatal error: Allowed memory size of 33554432 bytes exhausted (tried to allocate 3008800 bytes) in .../site/modules/TracyDebugger/tracy-master/src/Tracy/Helpers.php on line 133

Could there be a more graceful way to notify the developer? Since it is in the HTML output, I had to dig it up to figure out why the debugbar "disappeared" while the rest of the page was rendered ok.

Share this post


Link to post
Share on other sites

I've also had such an issue several times but no time so far to check out the reason

Share this post


Link to post
Share on other sites

Just trying the latest version on a shared host and found a bug regarding the config->debug setting. Will fix.

  • Like 1

Share this post


Link to post
Share on other sites

Busy morning 🙂

Firstly, a huge thank you to Steve (@netcarver) for his epic rework of the Diagnostics panel - take a look at the diff https://github.com/adrianbj/TracyDebugger/pull/24/commits/8604a683ef408b4106f7b7237b3eae6c24de315a - he's put in a huge amount of time on this. I have merged his changes and bumped up Tracy's version to 4.11.0 - it deserves a major point bump for this 🙂 If you haven't used this panel much in the past, you really should take another look and give it a thorough go - it's really useful for new and experienced devs alike!

I also also added @tpr's blue for the icon color. Not sure about the inverted scheme just yet - any strong thoughts on it? I do think that the background color of the bar (the light version) could be made to look a little less dirty though. BTW, as a reference, take a look at the default Tracy bar: https://nette.github.io/tracy/tracy-debug-bar.html - be sure to check out the panels as well - we have @tpr to thank for our version looking considerably better than that 🙂

Regarding the automatic dumping of both full object and debugInfo versions, it could be as simple as this - just one version, and then the other. Perhaps some visual indicator so you know it's from one call or something. Any ideas/thoughts? @szabesz - you mentioned wanting the page ID shown without having to open the object - I don't think is any simple approach to do that, especially given that not all dumped objects are pages. Of course you can do: d($page, $page->id) but that's only useful if you are dumping multiple pages at once so you know which one is which. If you have any more specific thoughts on how to implement what you are looking, let me know.

image.thumb.png.715cf10f334eb91edb553133f242efa1.png


Regarding the memory limit error - not sure what can be can about that - I guess Tracy can't handle that error because the error broke Tracy 🙂 Seriously though there is just so much output when you have all panels toggled on that it's not surprising that these come up occasionally - I haven't seen one, but I up the PHP memory limit on my dev machine to 128M. 

Hopefully I answered everyone's questions, and please don't forget to test the new Diagnostics panel and give @netcarver your feedback.

  • Like 5

Share this post


Link to post
Share on other sites

The diagnostics panel will need more follow-up work in the days to come, but hopefully it's a useful first step.

I've just noticed how bad the permission model for my current shared host is *sigh*. Looks like I'll be moving this site to a VPS sooner rather than later.

  • Like 2
  • Thanks 1

Share this post


Link to post
Share on other sites
1 hour ago, adrian said:

Not sure about the inverted scheme just yet - any strong thoughts on it?

As I wrote that was an experiment only but wanted to share to you to check. The current latest is more consolidated if you ask me.

  • Like 2

Share this post


Link to post
Share on other sites

yep, one theme is absolutely fine for me. looks great already! 🙂

  • Like 1

Share this post


Link to post
Share on other sites
On 8/16/2018 at 12:57 PM, szabesz said:

Would it mean that we have to click twice to see one of them? First a click on the arrow next to the class name, after that another click on either debugInfo or PW object? Or maybe you "extend" debug info and PW object gets injected into it?

Either way, I think it would be nice to see the id of a Page object without clicking on anything, somewhere between the class name and the arrow. Is that possible?

What do you guys think about this approach.

As you can see I have automatically combined the debugInfo and the full object versions into an array. I have also added an automatic title if one isn't specified. I was thinking about making this all work for PW's $page, $template, $field, etc objects.

image.png.3abe581d17e72a8f19231f88689ef800.png

image.png.41e1d422d33f0e6890b33eaf056a89cd.png

image.png.f6037a719409e715f601796e2cb18161.png

 

The one concern I have is that at first glance this looks like $page returns an array, so I wonder if it might be better simple, like this where the first dump is debugInfo, and the second one is the full page object, but they both are obviously a PW $page object.

image.png.ef360726d474fda3a3773be7296bc2d1.png

image.png.eb67696237b3ec2ec31c7e1bae04d98a.png

 

Not sure - what do you guys think? I am pretty keen to have both version output automatically, but I want it to be obvious what's what.

 

  • Like 1

Share this post


Link to post
Share on other sites
9 hours ago, adrian said:

The one concern I have is that at first glance this looks like $page returns an array

I agree, we should avoid making this "impression". However, UI-wise I like the first approach a lot more: more compact and makes a group of the two. Cannot you somehow output this:

tracy-dump.jpg.06fb3885b90e77ccc9973122598ae8bb.jpg

Edited by szabesz
typo
  • Like 1

Share this post


Link to post
Share on other sites

At first glance I liked the array-approach, but thinking about it a little bit more I think it is not a good idea to modify the type of the originally dumped object. It should really output the correct type. Also @szabesz suggestion would be a wrong output for my understanding.

Having one d() call output two dumps on the other hand can also be misleading.

IMHO the best solution (and I guess also the simplest one) would be to have d() output the debuginfo version and dv() = dumpVerbose() output the verbose info with debugInfo = off. I don't think that a config setting is necessary or any better. I think it's even more confusing and one more thing to keep in your mind. Another setup and you might end up in another output. Not the best option.

d() and dv() would just be one thing to remember across all setups and it would produce a consistent output always and everywhere.

EDIT: Another option I could think of would be something like this, having a toggle in the label section showing/hiding one or the other but outputting only one visible object for one single dump and also showing correct variable types:

2018-08-18--11-02-36.png.4f81070cda6b3c4e2160a66d38fe4260.png

The label, eg d($page, 'my custom label'); could also be shown right beside the toggles

 

  • Like 1

Share this post


Link to post
Share on other sites
14 minutes ago, bernhard said:

it is not a good idea to modify the type of the originally dumped object

Then let's not call it "dump" 🙂 Seriously, we need debug info and not "dumps". I'm longing for a version which outputs both so there is no need to use options or different method calls, and I really do not mind if that one is not d() but maybe i() (short for info) or whatever, if d for dump is misleading.

Edited by szabesz
typos

Share this post


Link to post
Share on other sites
29 minutes ago, szabesz said:

Then let's not call it "dump" 🙂 Seriously, we need debug info and not "dumps".

I don't care about how we call it, but I care about what it shows and dumping/debugging/infoing a page object that is then labelled as array is simply not what I understand as good/correct dumping/debugging/infoing.

PS: actually I even do care a little about how we call it 😄 dump() is already some kind of standard. we have dump() and bardump() and it's called exactly like this in the nette docs. It's a better alternative for var_dump() and well... that also "dumps" variables. We already have firelog() and log() so I see no need for introducing another one (for me d() and dv() would be a similar thing and mean about the same just with different options. dump() and dumpVerbose() => tracy bar, log() => file, firelog() => dev console).

Share this post


Link to post
Share on other sites
3 minutes ago, bernhard said:

we have dump() and bardump() and it's called exactly like this in the nette docs.

Your idea is to stick to "dump", while Adrian's idea is different. Let's not try to merge the two ideas, but come up with a solution to support Adrian's original idea which is great, I think.

  • Like 1

Share this post


Link to post
Share on other sites

That was my suggestion:

2018-08-18--11-02-36.png

But I guess that's more effort than just implementing a new method dumpVerbose() with different settings. Let's wait for adrian to wake up - good morning btw 😉😄

  • Like 2

Share this post


Link to post
Share on other sites

Morning 🙂

Thanks for the thoughtful discussion @szabesz and @bernhard - I think I like Bernhard's idea of a toggle, although I think it belongs below the title, just before the dumped objects.

I think I'll go with debugInfo and Full Object as the labels for the toggle though - I'd rather this was more explicit and helps to educate new developers about what they are actually seeing.

I tried blending the debugInfo version into the main object and it works but it gets added to the data property, so you have to dig down to find it and it gives an incorrect impression of how the object is actually constructed. This would certainly be the simplest approach, but I'll take a look at implementing the toggle idea - I think if that works it will be the cleanest and most useful.

 

  • Like 1

Share this post


Link to post
Share on other sites

Ok, here is a really quick and dirty demo. Obviously the links need to look nicer and the selected one needs to be highlighted, but hopefully you get the idea. Any thoughts before I clean it up? 

doubledump.gif.5ac1bda745a12fbdf62e39cdfe9128a3.gif

  • Like 2

Share this post


Link to post
Share on other sites

Playing with this idea where the toggles are icons floated to the right of dumps that have both debugInfo and regular object versions. Notice that the currently selected version of the dump results in the highlighted icon color.

I think I need some help figuring out the most useful / cleanest looking option for this.

Any ideas?

image.thumb.png.91de3e1256de2ec12782515d56ea8d53.png

image.thumb.png.8eaea4d2ab8176006b8eabc563e468c0.png

 

 

  • Like 1

Share this post


Link to post
Share on other sites

Here's a screencast of the icon based switching in action. 

Is everyone happy with this approach? Any ideas for improvements?

toggledumps.gif.3afebb359c7eaed034c0072156fefd93.gif

 

Back to @szabesz's idea of the page ID being shown - I have removed that from the recent screenshots/casts, but here it is again with the new icon toggles in place. What does everyone think about these automatic titles - useful, or unnecessary - I am not sure.

image.png.2446c975ce57eb0c956654c1c516a840.png

  • Thanks 1

Share this post


Link to post
Share on other sites
18 minutes ago, adrian said:

Any ideas for improvements?

Thanks, looks ok, except the possibility of the icons "jumping" because of the scrollbar. Is it possible to move them to the left instead?

21 minutes ago, adrian said:

What does everyone think about these automatic titles - useful, or unnecessary - I am not sure.

If it's a collection of pages (WireArray and derived) then we could see the number of pages, for example. My idea is to see the basics so that there is no need to click on anything if that is enough.
BTW, it will also work with bd(), won't it?

  • Like 1

Share this post


Link to post
Share on other sites
14 minutes ago, szabesz said:

Thanks, looks ok, except the possibility of the icons "jumping" because of the scrollbar. Is it possible to move them to the left instead?

I tried both. Here is left which is fine and does prevent the scrollbar jumping, I didn't like the way it affected left alignment compared to other dumps like the "test" one above, but maybe it's ok?

image.png.d95940ecb93b01316b458dd3d37aa958.png

15 minutes ago, szabesz said:

If it's a collection of pages (WireArray and derived) then we could see the number of pages, for example. My idea is to see the basics so that there is no need to click on anything if that is enough.

I see where you're headed, and I like the idea but I am a little worried about going down a huge rabbit hole. Maybe if you can put together a list of PW objects and the data you think should be automatically displayed in this way, maybe we can come up with a solution. I am actually thinking that this might need to be another element that sits between the title (if defined) and the object dump.

20 minutes ago, szabesz said:

BTW, it will also work with bd(), won't it?

That's the plan - I haven't coded it yet so not sure - there could be some complications, but hopefully solvable.

  • Thanks 1

Share this post


Link to post
Share on other sites
8 minutes ago, adrian said:

, but maybe it's ok?

Another UX thing is that icons on the left require shorter mouse movements, well most of the time 🙂

11 minutes ago, adrian said:

I am a little worried about going down a huge rabbit hole.

Sure...

11 minutes ago, adrian said:

Maybe if you can put together a list of PW objects...

I am really thinking of the basics here, nothing more: id, count() that's all that comes to my mind 🙂

  • Like 1

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

  • Recently Browsing   0 members

    No registered users viewing this page.

  • Similar Content

    • By picarica
      so i am trying to put CustomHooksForVariations.module, a custom module, i am placing it into site/modules direcotry yet my modules page in admin panel gives me errors
      so this is the screen show when i refresh modules, i dont know why the shole hook is written on top of the page :||

      and this next image is when i try to install it, i saw that it is not defiuned modules.php but it shouldnt need to be ?, any ways i dont want to edit site's core just to make one moulde work there has to be a way

    • By David Karich
      ProcessWire InputfieldRepeaterMatrixDuplicate
      Thanks to the great ProModule "RepeaterMatrix" I have the possibility to create complex repeater items. With it I have created a quite powerful page builder. Many different content modules, with many more possible design options. The RepeaterMatrix module supports the cloning of items, but only within the same page. Now I often have the case that very design-intensive pages and items are created. If you want to use a content module on a different page (e.g. in the same design), you have to rebuild each item manually every time.
      This module extends the commercial ProModule "RepeaterMatrix" by the function to duplicate repeater items from one page to another page. The condition is that the target field is the same matrix field from which the item is duplicated. This module is currently understood as proof of concept. There are a few limitations that need to be considered. The intention of the module is that this functionality is integrated into the core of RepeaterMatrix and does not require an extra module.
      Check out the screencast
      What the module can do
      Duplicate multible repeater items from one page to another No matter how complex the item is Full support for file and image fields Multilingual support Support of Min and Max settings Live synchronization of clipboard between multiple browser tabs. Copy an item and simply switch the browser tab to the target page and you will immediately see the past button Support of multiple RepeaterMatrix fields on one page Configurable which roles and fields are excluded Configurable dialogs for copy and paste Duplicated items are automatically pasted to the end of the target field and set to hidden status so that changes are not directly published Automatic clipboard update when other items are picked Automatically removes old clipboard data if it is not pasted within 6 hours Delete clipboard itself by clicking the selected item again Benefit: unbelievably fast workflow and content replication What the module can't do
      Before an item can be duplicated in its current version, the source page must be saved. This means that if you make changes to an item and copy this, the old saved state will be duplicated Dynamic loading is currently not possible. Means no AJAX. When pasting, the target page is saved completely No support for nested repeater items. Currently only first level items can be duplicated. Means a repeater field in a repeater field cannot be duplicated. Workaround: simply duplicate the parent item Dynamic reloading and adding of repeater items cannot be registered. Several interfaces and events from the core are missing. The initialization occurs only once after the page load event Changelog
      2.0.0
      Feature: Copy multiple items at once! The fundament for copying multiple items was created by @Autofahrn - THX! Feature: Optionally you can disable the copy and/or paste dialog Bug fix: A fix suggestion when additional and normal repeater fields are present was contributed by @joshua - THX! 1.0.4
      Bug fix: Various bug fixes and improvements in live synchronization Bug fix: Items are no longer inserted when the normal save button is clicked. Only when the past button is explicitly clicked Feature: Support of multiple repeater fields in one page Feature: Support of repeater Min/Max settings Feature: Configurable roles and fields Enhancement: Improved clipboard management Enhancement: Documentation improvement Enhancement: Corrected few typos #1 1.0.3
      Feature: Live synchronization Enhancement: Load the module only in the backend Enhancement: Documentation improvement 1.0.2
      Bug fix: Various bug fixes and improvements in JS functions Enhancement: Documentation improvement Enhancement: Corrected few typos 1.0.1
      Bug fix: Various bug fixes and improvements in the duplication process 1.0.0
      Initial release Support this module
      If this module is useful for you, I am very thankful for your small donation: Donate 5,- Euro (via PayPal – or an amount of your choice. Thank you!)
      Download this module (Version 2.0.0)
      > Github: https://github.com/FlipZoomMedia/InputfieldRepeaterMatrixDuplicate
      > PW module directory: https://modules.processwire.com/modules/inputfield-repeater-matrix-duplicate/
      > Old stable version (1.0.4): https://github.com/FlipZoomMedia/InputfieldRepeaterMatrixDuplicate/releases/tag/1.0.4
    • By Robin S
      A new module that hasn't had a lot of testing yet. Please do your own testing before deploying on any production website.
      Custom Paths
      Allows any page to have a custom path/URL.
      Note: Custom Paths is incompatible with the core LanguageSupportPageNames module. I have no experience working with LanguageSupportPageNames or multi-language sites in general so I'm not in a position to work out if a fix is possible. If anyone with multi-language experience can contribute a fix it would be much appreciated!
      Screenshot

      Usage
      The module creates a field named custom_path on install. Add the custom_path field to the template of any page you want to set a custom path for. Whatever path is entered into this field determines the path and URL of the page ($page->path and $page->url). Page numbers and URL segments are supported if these are enabled for the template, and previous custom paths are managed by PagePathHistory if that module is installed.
      The custom_path field appears on the Settings tab in Page Edit by default but there is an option in the module configuration to disable this if you want to position the field among the other template fields.
      If the custom_path field is populated for a page it should be a path that is relative to the site root and that starts with a forward slash. The module prevents the same custom path being set for more than one page.
      The custom_path value takes precedence over any ProcessWire path. You can even override the Home page by setting a custom path of "/" for a page.
      It is highly recommended to set access controls on the custom_path field so that only privileged roles can edit it: superuser-only is recommended.
      It is up to the user to set and maintain suitable custom paths for any pages where the module is in use. Make sure your custom paths are compatible with ProcessWire's $config and .htaccess settings, and if you are basing the custom path on the names of parent pages you will probably want to have a strategy for updating custom paths if parent pages are renamed or moved.
      Example hooks to Pages::saveReady
      You might want to use a Pages::saveReady hook to automatically set the custom path for some pages. Below are a couple of examples.
      1. In this example the start of the custom path is fixed but the end of the path will update dynamically according to the name of the page:
      $pages->addHookAfter('saveReady', function(HookEvent $event) { $page = $event->arguments(0); if($page->template == 'my_template') { $page->custom_path = "/some-custom/path-segments/$page->name/"; } }); 2. The Custom Paths module adds a new Page::realPath method/property that can be used to get the "real" ProcessWire path to a page that might have a custom path set. In this example the custom path for news items is derived from the real ProcessWire path but a parent named "news-items" is removed:
      $pages->addHookAfter('saveReady', function(HookEvent $event) { $page = $event->arguments(0); if($page->template == 'news_item') { $page->custom_path = str_replace('/news-items/', '/', $page->realPath); } }); Caveats
      The custom paths will be used automatically for links created in CKEditor fields, but if you have the "link abstraction" option enabled for CKEditor fields (Details > Markup/HTML (Content Type) > HTML Options) then you will see notices from MarkupQA warning you that it is unable to resolve the links.
      Installation
      Install the Custom Paths module.
      Uninstallation
      The custom_path field is not automatically deleted when the module is uninstalled. You can delete it manually if the field is no longer needed.
       
      https://github.com/Toutouwai/CustomPaths
      https://modules.processwire.com/modules/custom-paths/
    • By teppo
      Hey folks!
      I'm happy to finally introduce a project I've been working on for quite a while now: it's called Wireframe, and it is an output framework for ProcessWire.
      Note that I'm posting this in the module development area, maily because this project is still in rather early stage. I've built a couple of sites with it myself, and parts of the codebase have been powering some pretty big and complex sites for many years now, but this should still be considered a soft launch 🙂
      --
      Long story short, Wireframe is a module that provides the "backbone" for building sites (and apps) with ProcessWire using an MVC (or perhaps MVVM... one of those three or four letter acronyms anyway) inspired methodology. You could say that it's an output strategy, but I prefer the term "output framework", since in my mind the word "strategy" means something less tangible. A way of doing things, rather than a tool that actually does things.
      Wireframe (the module) provides a basic implementation for some familiar MVC concepts, such as Controllers and a View layer – the latter of which consists of layouts, partials, and template-specific views. There's no "model" layer, since in this context ProcessWire is the model. As a module Wireframe is actually quite simple – not even nearly the biggest one I've built – but there's still quite a bit of stuff to "get", so I've put together a demo & documentation site for it at https://wireframe-framework.com/.
      In addition to the core module, I'm also working on a couple of site profiles based on it. My current idea is actually to keep the module very light-weight, and implement most of the "opinionated" stuff in site profiles and/or companion modules. For an example MarkupMenu (which I released a while ago) was developed as one of those "companion modules" when I needed a menu module to use on the site profiles.
      Currently there are two public site profiles based on Wireframe:
      site-wireframe-docs is the demo&docs site mentioned above, just with placeholder content replaced with placeholder content. It's not a particularly complex site, but I believe it's still a pretty nice way to dig into the Wireframe module. site-wireframe-boilerplate is a boilerplate (or starter) site profile based on the docs site. This is still very much a work in progress, but essentially I'm trying to build a flexible yet full-featured starter profile you can just grab and start building upon. There will be a proper build process for resources, it will include most of the basic features one tends to need from site to site, etc. --
      Requirements and getting started:
      Wireframe can be installed just like any ProcessWire module. Just clone or download it to your site/modules/ directory and install. It doesn't, though, do a whole lot of stuff on itself – please check out the documentation site for a step-by-step guide on setting up the directory structure, adding the "bootstrap file", etc. You may find it easier to install one of the site profiles mentioned above, but note that this process involves the use of Composer. In the case of the site profiles you can install ProcessWire as usual and download or clone the site profile directory into your setup, but after that you should run "composer install" to get all the dependencies – including the Wireframe module – in place. Hard requirements for Wireframe are ProcessWire 3.0.112 and PHP 7.1+. The codebase is authored with current PHP versions in mind, and while running it on 7.0 may be possible, anything below that definitely won't work. A feature I added just today to the Wireframe module is that in case ProcessWire has write access to your site/templates/ directory, you can use the module settings screen to create the expected directories automatically. Currently that's all, and the module won't – for an example – create Controllers or layouts for you, so you should check out the site profiles for examples on these. (I'm probably going to include some additional helper features in the near future.)
      --
      This project is loosely based on an earlier project called pw-mvc, i.e. the main concepts (such as Controllers and the View layer) are very similar. That being said, Wireframe is a major upgrade in terms of both functionality and architecture: namespaces and autoloader support are now baked in, the codebase requires PHP 7, Controllers are classes extending \Wireframe\Controller (instead of regular "flat" PHP files), implementation based on a module instead of a collection of drop-in files, etc.
      While Wireframe is indeed still in a relatively early stage (0.3.0 was launched today, in case version numbers matter) for the most part I'm happy with the way it works, and likely won't change it too drastically anytime soon – so feel free to give it a try, and if you do, please let me know how it went. I will continue building upon this project, and I am also constantly working on various side projects, such as the site profiles and a few unannounced helper modules.
      I should probably add that while Wireframe is not hard to use, it is more geared towards those interested in "software development" type methodology. With future updates to the module, the site profiles, and the docs I hope to lower the learning curve, but certain level of "developer focus" will remain. Although of course the optimal outcome would be if I could use this project to lure more folks towards that end of the spectrum... 🙂
      --
      Please let me know what you think – and thanks in advance!
    • By tcnet
      PageViewStatistic for ProcessWire is a module to log page visits of the CMS. The records including some basic information like IP-address, browser, operating system, requested page and originate page. Please note that this module doesn't claim to be the best or most accurate.
      Advantages
      One of the biggest advantage is that this module doesn't require any external service like Google Analytics or similar. You don't have to modify your templates either. There is also no JavaScript or image required.
      Disadvantages
      There is only one disadvantage. This module doesn't record visits if the browser loads the page from its browser cache. To prevent the browser from loading the page from its cache, add the following meta tags to the header of your page:
      <meta http-equiv="Cache-Control" content="no-cache, no-store, must-revalidate" /> <meta http-equiv="Pragma" content="no-cache" /> <meta http-equiv="Expires" content="0" /> How to use
      The records can be accessed via the Setup-menu of the CMS backend. The first dropdown control changes the view mode. There are 4 different view modes.
      View mode "Day" shows all visits of the selected day individually with IP-address, browser, operating system, requested page and originate page. Click the update button to see new added records. View mode "Month" shows the total of all visitors per day from the first to the last day of the selected month. View mode "Year" shows the total of all visitors per month from the first to the last month of the selected year. View mode "Total" shows the total of all visitors per year for all recorded years. Please note that multiple visits from the same IP address within the selected period are counted as a single visitor.
      Settings
      You can access the module settings by clicking the Configuration button at the bottom of the records page. The settings page is also available in the menu: Modules->Configure->ProcessPageViewStat.
      IP2Location
      This module uses the IP2Location database from: http://www.ip2location.com. This database is required to obtain the country from the IP address. IP2Location updates this database at the begin of every month. The settings of ProcessPageViewStat offers the ability to automatically download the database monthly. Please note, that automatically download will not work if your webspace doesn't allow allow_url_fopen.
      Dragscroll
      This module uses DragScroll. A JavaScript available from: http://github.com/asvd/dragscroll. Dragscroll adds the ability in view mode "Day" to drag the records horizontally with the mouse pointer.
      parseUserAgentStringClass
      This module uses the PHP class parseUserAgentStringClass available from: http://www.toms-world.org/blog/parseuseragentstring/. This class is required to filter out the browser type and operating system from the server request.
      Special Feature
      PageViewStatistic for ProcessWire can record the time a visitor viewed the page. This feature is deactivated by default. To activate open the module configuration page and activate "Record view time". If activated you will find a new column "S." in the records which means the time of view in seconds. With every page request, a Javascript code is inserted directly after the <body> tag. Every time the visitor switches to another tab or closes the tab, this script reports the number of seconds the tab was visible. The initial page request is recorded only as a hyphen (-).
       
×
×
  • Create New...