I am using both cwidgets i.e., cdetailview and cgridview I have displayed it using renderPartial method .
The thing thing is That I need to change my css to it for beautification.I am well versed with css styling but to these widgets, how do I apply it in yii? thats the big question to me, I did walk through all forum pages yet my need is not satisfied.
following is the code
viewb
<?php $this->widget('zii.widgets.CDetailView', array(
'data' => array(),
//to avoid error
'attributes' => $res,
'cssFile'=>Yii::app()->request->baseUrl.'/css/mecss.css',));
?>
cssFile doesn't work have copy pasted the assets detailview code and applied my css yet no change
controllerb
$this->renderPartial('viewB',array('res'=>$res));
viewc
<?php
$this->widget('zii.widgets.grid.CGridView', array(
'dataProvider'=>$dataProvider,
'ajaxUpdate'=>true,
'columns'=>array(
array('name'=>' Name','value'=>'$data["name"]'),
array('name'=>' status','value'=>'$data["status"]'),
),
));
?>
controllerc
$this->renderPartial('viewc',array(
'dataProvider'=>$dataProvider,
));
this is the view what am looking for
all the attributes are from the same table's record which i have provided as $res to detailview but then i need deatils, credential details and expirarydetails as headers for respective attributes .is it possible? if yes please guide else what else can i do so to achieve it please let me know.
am displaying it in modelA and modelD view respectively using ajax
to each i wanna apply my css style but then i dont know how do i start
i do know their's an attribute cssFile am tryng with it can anyone guide for it or any good way.
Please guide let me know how do i achieve it
Yes you can apply your custom Css. Some attributes are used for this like
cssFile
filterCssClass
itemsCssClass
loadingCssClass
pagerCssClass
rowCssClass
rowCssClassExpression
summaryCssClass
And yes here is the demo with custom Css properties.
http://www.yiiplayground.com/index.php?r=UiModule/dataview/gridStyle
you can set all sorts of classes for your CGridView :
class for your row
class for filter row
rowCssClassExpression
a PHP expression that is evaluated for every table body row and whose
result is used as the CSS class name for the row.
The following code will apply CSS class from Bootstrap 3 framework to detail view:
<?php
$this->widget('zii.widgets.CDetailView', array(
'data' => array(),
'htmlOptions' => array('class' => 'table table-striped table-bordered table-hovered table-condensed'),
//to avoid error
'attributes' => $res,
'cssFile'=>Yii::app()->request->baseUrl.'/css/mecss.css',));
?>
Basically, you can use the htmlOptions property to apply whatever style or HTML attribute you want (everthing, based on tag name).
Related
How can I add placeholder or CSS classes to login fields using wp_login_form?
The function wp_login_form in wp-includes/general-template.php renders the login form from an array of arguments:
$default = array(
'echo' => true,
...
...
);
and then creates the <form>...</form>. There is no way I can add a class name to input fields or the submit button. I want to use bootstrap classes for this purpose. Currently I have to override default classes rendered by WordPress.
I don't want to do that. For example if I want to make username box to look like an input with class form-control, I have to either write additional classes in my CSS for default WP classes or take help of jQuery to remove default classes and add mine.
What is the best way to do it? wp_login_form does not have attributes set for placeholder.
In brief I need to pass the following:
1. Pass class name from outside via an array $args,
2. Pass placeholder text for input fields
This might be a solution, eventhough it isn't perfect.
Wordpress' functon wp_login_form() does not support changing the css class. And I would recommend not to use Javascript for changing the DOM when you do not absolutely have to.
My solution to modify the CSS class was to set the echo property to false so the function returns the result as a string. Then, use str_replace() to find the classes we want to replace and replace it with the class names we want to use.
$args = array(
'echo' => false,
// etc...
And now replacing the class names...
$output = wp_login_form( $args );
$output = str_replace( 'class="input"', 'class="df-input"', $output );
echo $output;
You could also convert $output into a DOMDocument() so you can replace the class names in an more elegant manner.
According to its documentation, wp_login_form() does not receive an argument to set a class name for itself of input elements. Presumably because you wouldn't have more than one login form on the page.
It is possible to add an id to the inputs of the forms like so:
$args = array(
'form_id' => 'loginform',
'id_username' => 'user_login',
'id_password' => 'user_pass',
'id_remember' => 'rememberme',
'id_submit' => 'wp-submit',
);
However, seems that in order to set other attributes such as class and placeholders you would have to use Javascript. This can be done without JQuery. This would look like something along the lines of document.querySelector('#username').setAttribute("class", "username");
See the querySelector documentation.
I am using CakePHP 2.0 and I want to load a concrete CSS style in a Page. (with no controller but using the Layout).
I know it can be done with scripts using:
$this->Html->script('photos', array('inline' => false));
And then on the Layout:
<?php echo $scripts_for_layout; ?>
But i have no idea if it exists or not something similar to $scripts_for_layout; for CSS style.
Do you know how can i do it?
If you can upgrade to 2.1 then you can use this:
// in your view
$this->Html->script('carousel', array('block' => 'scriptBottom'));
// in your layout
echo $this->fetch('scriptBottom');
http://book.cakephp.org/2.0/en/views.html#using-blocks-for-script-and-css-files
update:
In earlier versions you could do it like you do with scripts:
$this->Html->css('some.css', null, array('inline' => false));
And it will be placed to $scripts_for_layout.
I'm using a sfWidgetFormSelect widget to render a select list. More precisely i'm using the feature allowing groups, quite easy with this :
$choices = array(
'Europe' => array('France' => 'France', 'Spain' => 'Spain', 'Italy' => 'Italy'),
'America' => array('USA' => 'USA', 'Canada' => 'Canada', 'Brazil' => 'Brazil'),
);
$w = new sfWidgetFormChoice(array('choices' => $choices));
That's a good start but not enough because i need to have specific CSS classes attached to each item of the list.
How can i do that ? The doc is not really helping for this kind of advanced features.
Thanks.
Having played with these a little bit, from what I know, this level of control isn't possible via the form class. You can pass the CSS class to the main widget but it would apply to all <option> tags inside the <select>.
You might be better of just writing this dropdown yourself in HTML and making sure it corresponds to this widget in terms of how it's named. This way you can use your own HTML but still use the widget in validation. Another option might be to handle the advanced styling via Javascript where you can connect it to the option values themselves, although it does get a little messy.
Correct me if I'm wrong, after reading drupal fapi related articles, I got the impression that fapi generates 'id' attributes by itself. It allows developers to assign 'name' attribute only. If that's the case, is there a way I can set desire 'id' value for elements? Because, I want my elements to have meaningful 'id' so that html/jquery code would be easier to read as well as save my time from going through already written jquery code to change those all 'id's that I've used inside.
P.S:drupal version - 6.x
Ok found the solution. I can use the #attributes key of the $form element to set any additional attributes (such as class, id, etc.). Thanks for your help so far.
I had a similar issue to deal with. I needed to have multiple forms on the same page so I had to change the ids of the form and its elements to prevent duplicate ids. I did something like the following:
function voci_comment_form($form, &$form_state, $cid) {
$form['#attributes']['id'] = 'voci-comment-form-' . $cid;
$form['#attributes']['class'][] = 'voci-comment-form';
$form['body'] = array(
'#title' => 'Post a comment',
'#type' => 'textarea',
'#resizable' => FALSE,
'#rows' => 1,
);
$form['comment'] = array(
'#type' => 'submit',
'#value' => 'Comment',
);
foreach ($form as $k => &$element) {
$k = str_replace('_', '-', $k);
$element['#attributes']['id'] = "edit-$k-$cid";
$element['#attributes']['class'][] = "edit-$k";
}
return $form;
}
This basically sets unique ids based on the $cid that is passed in. The code also adds classes to each element in the form so you can style it easily. I'm sure a more robust solution is possible but this is the basic idea. Tested in Drupal 7.
It's true that you can set $element['#attributes']['id'] and that will apply to the form field. However, it will break labels and #states in Drupal 7 because the rest of the rendering pipeline reads the ID from somewhere else. So for your labels and #states to keep working, use set the ID to $element['#id'] instead (an undocumented property that nonetheless is how the form API watches ID internally).
Make sure to pass your ID through drupal_html_id as well to ensure no conflicts.
This problem doesn't really have much to do with the Drupal-FAPI itself, but more with how Drupal theme forms (create the markup).
If you want to alter all forms on your site, you can overwrite the theming functions that is used for forms and the different type of form fields.
If you just want to overwrite some forms or form fields, you can set the #theme attribute on the form or an element, to change which function should be used for creating the markup.
I'm trying to theme a modules output.
In particular i'm working on http://drupal.org/project/service_links
Any idea how that works?
Thanks in advance!
Generally, if you want to theme a module you have a few options.
Overwrite theme functions. You can overwrite the theme functions that the module uses/implements to change the markup, one example of such a function is theme_service_links_node_format. You change make a function in your theme's template.php called 'your_theme_name_service_links_node_format' and make your custom markup in it instead.
CSS. If you don't need to change the actual markup of a modules output, you only need to add the needed css, to theme it into your liking.
In some cases, it doesn't look like sercive links is such a case, you can also make your own templates, and make Drupal use them instead.
Another way, again it doesn't look like service is service links is such a case, is to implement preprocess functions in your template.php. This is needed if you want to alter how certain template variables are generated.
If you want to implement your own theming function services links defines 3 themables. In your theme you should imlement the following
yourtheme_service_links_build_link()
yourtheme_service_links_node_format()
yourtheme_service_links_node_format()
'service_links_build_link' => array(
'arguments' => array(
'text' => NULL,
'url' => NULL,
'title' => NULL,
'image' => NULL,
'nodelink' => NULL,
),
),
'service_links_node_format' => array(
'arguments' => array('links' => NULL),
),
'service_links_block_format' => array(
'arguments' => array('items' => NULL),
),
Have a look at http://drupalcode.org/viewvc/drupal/contributions/modules/service_links/service_links.module?view=markup line 389 and below
What's the problem? I mean, every module should use a different name for main container and so. You can use css selector in clever way to refer the template pages.
For example, the FAQ module use identificator to all part of html output, like faq-question and faq-answer in the main page.
Just inspect your resulting code and css it, if possible modify the module-related css!
If the module implements its own theme hooks you can use that. You can also use CSS.