When I create blog for user, before adding blog to database I can check user identity and get user ID, to write it in blogs database, so I know that this blog belongs to this user.
But What If I want to write a sub blog. In that case before starting adding it I need somehow parent blog ID in the controller. Can I get it the way $app->user->identity works ?
Yii::$app->user->identity holds the information of a logged in user and this is done automatically by Yii2 when you call the login() method of User object. So if you are asking if there's some way that you will get the parent blog ID automatically, then the answer is No.
However, there are several ways you can pass the parent blog ID to the controller action responsible for adding a sub blog. Following are some ways that come to mind:
I am assuming you will have some sort of a form where user will type the details of the sub blog. In this form you can have a drop down (mandatory field) showing the list of existing parent blogs (from Blog table). User must select a parent blog from this list and on submission of the form, inside the controller action you can easily write code to get the ID value of the parent blog from drop down.
Instead of having the user select the parent blog from drop down, you can pass the ID (as a query string parameter) of the parent blog when user clicks on a link/button to add a sub blog. And in the page with the form to add sub blog, you can set the parent blog ID from the query string into a hidden field. Finally, on submission of the form, inside the controller action you can easily write code to get the ID value of the parent blog from hidden input field.
Related
I'm new to Rally tool. I need to create a filter on comments in Discussion of User stories. In the custom list view I was able to fetch the discussion field which displays number of comments inside the discussion and on click displays comments. However I'm struggling to create filter on this comments/discussion field. How can I achieve this?
I need to set several meta tag values in my page head to values set in blog post custom fields.
How do I access the blog item viewmodel from the head?
I've created a separate MVC view snippet for my custom head and referenced it in my template's layout, that much works.
Tried
I grab some of the same custom field values inside my blog template via references like Model.Item.Fields.MyFieldName.Fields.Title.
Adding this same line to the head template throws a
System.Web.HttpCompileException with little useful information attached. I somewhat expected this, as I suspect that viewmodel for the blog post only exists in the context of the blog widget.
Ends up that I need to rebuild after every change to the head cshtml file or I get this error. Seeing as this is about a four-minute process with Sitefinity (15 seconds to build, 3:45 to do whatever Sitefinity does for about four minutes), this is a gruelingly horrid thing to have to do.
However the Model is null at this level.
Also tried
Per the ever-helpful and highly knowledgeable #Veselin Vasilev, I looked into passing the data up via MetaDataFields. I didn't see these options in my admin section for the widget. To clarify, I'm using the built-in "Blog posts" widget with a customized view file.
But if it's possible to do this, it gives me hope that there's a way to pass more data up, even if it's going to take some work.
EDIT: Sitefinity v.10.2 and above:
There is an easier way to achieve what you are trying - in Page edit mode, in the Blog Posts widget click Edit and then Advanced. Then you should see a MetaDataFields button. Click it and you should see several meta data related fields.
In the MetaTitle field put the name of your custom field and save.
Also, from the docs:
If you leave MetaTitle field empty, Sitefinity CMS adds takes its value from the Title field of the static content item or from the identifier field of a dynamic content item. Otherwise, the tag is populated with the contents of the field that you have entered in MetaTitle field.
More details here:
https://docs.sitefinity.com/configure-meta-title-and-meta-description-on-widget-level
Sitefinity 10.1 and below:
Check this article
Basically, in your view you get a reference to the Page object and then update its Header with the meta data you need.
I am designing a photographers website.
What i need to do is allow every logged in user to view -ONLY- his portfolio and no other.
Since i haven't found any extension that does that in style, i decided to use a general portfolio extension, and create a portfolio for each user.
Then i need to find a way so that when a user logs in, with his username/password, a menu-item will appear that will hold -ONLY- his portfolio.
So my question is, how can i do that???
Assign a single menuitem to a single user.
Thank you.
The only idea I have in mind is to use user groups here. Create the user, create the user group, assign the user to the group and assign that group to the object you want to protect.
If it's just about showing images I have another idea.
I build that user group specific handling into Event Gallery, a Joomla! gallery component: https://extensions.joomla.org/extensions/extension/photos-a-images/galleries/event-gallery/
Doing this make creating different menu items unnecessary. Once the user logs in he can see his content. In addition the content is protected. A simple menu item might not do that trick.
I want to add possibility for clients to receive orders personally in one of our shops. I tried to find some module which gives possibility to select in which shop they want to receive order but I haven't found anything for free. Because of that I want to create new module for it. What's more I'm totally new in prestashop and I don't know where to start or how to create this module. I spend two-three days reading how to do it and these are my assumptions:
New carrier module can be created by extending CarrierModule class.
I read some articles / documentation about hooks.
I have created my first carrier module by editing module attached in this article http://www.prestashop.com/blog/en/carrier_modules_functions_creation_and_configuration/.
What I achieved is that I installed module and used hook 'BeforeCarrier' to add some layout to page after selecting my carrier.
This is how my carrier should work:
It should be a part of carrier list so customer is able to select it.
If carrier is not selected nothing hapens. If carrier is selected by customer then button 'Choose shop' should be shown.
After pressing button 'Choose shop' new window should be show with addresses of our shops (instead of new window it may be placed somewhere in current page).
Window with shop adresses will contain list of addresses with radiobuttons and button to confirm selection.
After confirmation of selection window will be closed and address should be shown as a part of carreir.
E-mail with confirmation will contain information in which shop customer can collect order.
Suppose that addresses will be hardcoded in php code.
These are my questions:
I created new carrier module so I assume it works correctly (as described here http://www.prestashop.com/blog/en/carrier_modules_functions_creation_and_configuration/).
How to add new button 'Choose shop' near selected carrier?
Can I use hooks to add 'Choose shop' button?
Where should I remember choosen shop address? Has 'Carrier' class place for it?
How to add shop address to e-mails? Should I edit layouts? Does e-mail layout contain place for it or do I need to add new 'placeholder' for it?
How to show chosen address on admin side?
To describe my problem more detail I have created few scenario (see attachment).
I will be greatful for any help.
I've posted the same question on prestashop forum.
These example are usually old and poorly written. They lack structure. But for your purpose I suppose they're ok.
Use hookDisplayCarrierList($args). Check $args to see which carrier has been selected, then return <select> element which you
shop addresses. This hook is triggered every time a user selects a carrier and is return via Ajax. Therefore, you may not use ajax here.
You should include you javascript in a file. Use hookDisplayHeader to detect when to insert this file into your page:
public function hookDisplayHeader(){
$propExists = property_exists($this->context->controller, 'php_self');
if($propExists){
$controllerName = $this->context->controller->php_self;
if(in_array($controllerName, array('order', 'order-opc'))){
// $this->context->controller->addJS($this->_path.'js/customcarrier.js');
This Javascript file should check whether a valid shop has been selected before going to the next step;
Because your Js code is in a file and the hookDisplayCarrierList cannot contain any JavaScript (because it returns Ajax),
you should also make use of hookDisplayBeforeCarrier. Here you could insert you custom carrier ID - this way you'd know
when to check for errors with your JS file.
Same question as #2.
The correct way to save the information would be to add a model. CustomCarrierSelectedAddress - or something like it.
It would have these columns: id_cart, id_shop_address;
The way you implement shop addresses is up to you. You may define them as constants or even make a new model for them.
Models arent that hard to create, you just need to declare class properties, static variable $definition that's it.
You may add you own methods. You should also add createTable()/dropTable() methods for convenience.
This is more complicated. You could:
Send your own email about selected shop address.
Search the controller method which send the email you wish to change.
Then you should override that method by copying the file to your module, delete all the other methods and
rename the class definition inside -> class AdminAddressesController extends AdminAddressesControllerCore
There should be an array of email placeholders and their values, which the controllers assigns.
for example '{order_id}'. You should add your email variable to array {chosen_shop_info} and assign whole
paragraph of text to it. Then you may use it in the actual email template which you can edit in BO.
This is more or less the only way I know to edit the existing templates, because you can't do conditional statements inside email templates.
To add chosen address to order page in BO, you should use another hook - hookDisplayAdminOrder.
here you can add your own block to be display in order summary.
To find out which hooks are available, go to Hook.php and look for method exec(). Add this line error_log($hook_name).
When you perform a specific action, executed hooks will be logged and you will see what kind of hook you need.
For most profiles, I can easily retrieve public activities. However, I have found one profile that for some reason does not return activities even though I can see them posted on their G+ page. The profile is: 111558147839170177177 and I am making the call below. Note the empty items array.
https://www.googleapis.com/plus/v1/people/111558147839170177177/activities/public?key=[yourkey]
I believe the page is age restricted. If you view the page in an incognito window, the posts are not shown.